1、什么是跳表?

跳表实际上就是多层链表

跳表可用在让链表的元素查询接近线性时间

代码结构及java实现参考博客园随笔

2、判断两棵二叉树是否相同?(结构相同,内容相同)

思路:(1)先定义树节点TreeNode:{

Int val;

TreeNode left;

TreeNode right;//左右节点

TreeNode(int x){val=x;}

}

(2)判断两个树是否为空树的情况,再判断两个节点所指的值val是否相同,再递归,循环比较左节点或右节点是否相同(参看博客园随笔)

3、冒泡排序的实现

For(i=0;i<a.length-1;i++){  //循环冒泡的次数

For(j=0;j<a.length-i-1;j++){  //循环比较的次数

If(a[j]>a[j+1]){

Int temp = a[j];

a[j] = a[j+1];

a[j+1]=temp;

}

}

}

4、Cookie和session的区别

Cookie是客户端保持状态的方案

session是服务端保持状态的方案,只有访问jsp、servlet等程序,服务器才会创建session,访问静态资源不会创建。可以在服务器上通过request对象的getSession方法得到session。浏览器禁用或不支持cookie时,可以通过URL地址重写实现session(HttpServletResponse类的encodeURL(String url)方法),在地址中附加Sid参数作唯一标识

5、熟悉哪些设计模式

(1)线程安全的单例模式:懒加载+synchronized

关键字:线程安全

缺点是效率低

还有一种饿汉方式:在类装载的时候就实例化静态实例,再用静态getInstance方法返回

(2)工厂模式:使用场景:jdbc连接数据库、降低对象的产生和销毁

关键字:父接口+子实现类+第三方构建实例的类

实现过程:1 定义父接口及公共方法

2 定义实现父接口的子类

3 定义含有根据子类名创建子类实例的create方法的工厂类

return human; }

Class.forName即让虚拟机查找并加载指定的类

4 根据创建子类实例的类来创建子类实例

创建子类实例时,用到向上转型

(3)模板方法模式

关键字:抽象父类(基本方法+final模板方法)+ 子实现类(实现基本方法)

使用场景:重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为;

Main方法中实例化父类,FatherClass fc=new SubClass();

fc.run();

(4)原型模式:不通过new来产生对象,而是通过对象拷贝来实现

关键字:类实现cloneable接口并重写clone()方法

浅拷贝:拷贝目标对象A的所有变量,但变量中对其他类实例的引用B仍然指向原来的地址,即拷贝后的对象A1修改成员变量的值,只影响它本身,而拷贝后的对象修改引用其他类实例的变量的值,会同时影响修改到目标对象

例:A.set成员变量=‘aaa’,A.setB=‘bbb’

A1.set成员变量=‘ccc’,A.setB=‘ddd’

此时输出A.成员变量=‘aaa’,A.B=‘ddd’

输出A1.成员变量=‘ccc’,A.B=‘ddd’

深拷贝:是全拷贝,拷贝后对象的变量相互独立,互不影响,对其他类实例的引用指向拷贝后的对象

以上面的例子,结果输出应为:

输出A.成员变量=‘aaa’,A.B=‘bbb’

输出A1.成员变量=‘ccc’,A.B=‘ddd’

(5)代理模式

1 静态代理(聚合式,体现在代理类实例化了被代理类):

关键字:父接口+子实现类+代理实现类

2 动态代理:主要用来做方法的增强,在不修改目标代理类源码的情况下,增强方法

实现动态代理的关键技术是反射,jdk动态代理的反射主要体现在invoke方法参数method反射调用的是被代理对象的方法

第一种动态代理:JDK动态代理的实现主要通过java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口

关键字:接口+子类+实现InvocationHandler接口和调用Proxy.newProxyInstance的代理类

Proxy的静态方法newProxyInstance(ClassLoader cl, Class<?> interface, InvocationHandler h)

InvocationHandler接口的唯一方法invoke(Object proxy,Method m,Object[] args)

第二种动态代理:cglib动态代理(继承式)

关键字:实现MethodInterceptor接口的代理类

(6)策略模式

关键字:抽象父类+子实现类(多个)+上下文(维护一个对策略类对象的引用)

策略与简单工厂模式结合的例子

6、抽象类与接口的区别

java面试记录一:跳表、判断二叉树相同、冒泡排序、cookie和session的区别、设计模式(单例、工厂、模板方法、原型、代理、策略)、抽象类与接口的区别的更多相关文章

  1. 补充Java面试记录

    补充Java面试记录 背景:这两天面试遇到的部分问题都分散在了前面两篇文摘中,这里再做一些其他的记录,以备不时之需! 一.谈谈你对SpringBoot的理解? SpringBoot简介:SpringB ...

  2. java基础之抽象类与接口的区别

    在学习java的过程中,或者是在找工作笔试或面试的时候,如果你是java岗位,那么抽象类与接口的区别无疑是一个大热点,是各大公司都想要考的一个小知识点,下面是我为了9月份秋招自己总结的,若有不对的地方 ...

  3. 【java基础 16】抽象类和接口的区别

    导读:前两天闲着没事儿,看了本书,然后写了点代码,在接口里面写了默认方法实现,因为书上说这个特性是从java8开始的,我还特地给测了一下java7. 没过几天,就有一个技术分享会,刚好也是讲java8 ...

  4. java抽象类与接口的区别及用法

    java抽象类与接口的区别及用法 一.抽象类里面的方法可以有实现,但是接口里面的方法确是只能声明. 二.接口是设计的结果 :抽象类是重构的结果 . 三.java不支持多重继承,所以继承抽象类只能继承一 ...

  5. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

  6. Java基础知识强化18:抽象类、接口的区别 和 选择性实现接口方法

    1.抽象类和接口的区别 抽象类里面可以有非抽象的方法(可以没有抽象方法),接口里只能有抽象方法. 抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号.  抽象类(abstract c ...

  7. java 抽象类与接口的区别 整理

    抽象类与接口的区别 抽象类 包含抽象方法的类就是抽象类,声明的语句:abstract class 必须是public protected 接口 对行为的抽象,声明语句:interface 抽象方法的修 ...

  8. java基础之接口(抽象类与接口的区别)

    概述 猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不.但是,现在有很多的驯养员或者是驯的,这应该属于经过特殊的培训训练出来的,对不.所以,这些额外的动作定义到动物类中就不合适,也不适合直 ...

  9. 第十八节:详解Java抽象类和接口的区别

    前言 对于面向对象编程来说,抽象是它的特征之一. 在Java中,实现抽象的机制分两种,一为抽象类,二为接口. 抽象类为abstract class,接口为Interface. 今天来学习一下Java中 ...

随机推荐

  1. struts2动态调用+Servlet过滤器+struts2拦截器

    周末真的是懒到心慌...... 本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章: eclipse环境下基于tomcat-7.0.82构建struts2项目 ...

  2. 关于广州xx公司对驰骋BPM, 流程引擎表单引擎 常见问题解答

    关于广州xx公司对驰骋BPM, 流程引擎表单引擎 常见问题解答 @驰骋工作流,ccflow周朋 周总早, ccflow 功能很强大,在体验过程中,以下几个问题需沟通下: 先使用.net 再使用java ...

  3. OpenLayers 6 学习笔记

    这个是真的学习笔记!不是教程 转载请声明:https://www.cnblogs.com/onsummer/p/12159366.html 基于openlayers 6.x api不太好查,就基于腾讯 ...

  4. Git安装与配置,以及pycharm提交代码到github

    1.下载git,安装 下载好后直接下一步到底,安装成功(选择组件页面,可以勾选上控制台窗口字体选项,如下图) 2.配置Git信息 1.打开窗口中,输入:git --version 查看已安装的git版 ...

  5. pikachu-SQL注入漏洞

    一.SQL Inject 漏洞原理概述 1.1 什么是数据库注入漏洞     数据库注入漏洞,主要是开发人员在构建代码的时候,没有对用户输入的值的边界进行安全的考虑,导致攻击者可以通过合法的输入点提交 ...

  6. sqlserver 批量修改数据库表主键名称为PK_表名

    1.我们在创建sqlserver得数据表的主键的时候,有时会出现,后面加一串随机字符串的情况,如图所示: 2.如果你有强迫症的话,可以使用以下sql脚本进行修改,将主键的名称修改为PK_表名. --将 ...

  7. Ubuntu 系统连接到服务器

    Ubuntu 系统连接到服务器 我用的是 Ubuntu18.04 系统 假设你的服务器上的用户名是 root, 域名或者 ip 地址是 xyz 而且配置好了安全组(阿里云的)和云解析 首先要安装 op ...

  8. Linux物理磁盘扩容流程

    1. 插入硬盘前,查看现有硬盘情况 (1)命令:fdisk -l 说明:fdisk -l 查看设备的所有分区 (2)命令:df -h 说明:df 列出文件系统的整体磁盘使用量 2. 断电插入硬盘后,重 ...

  9. 卸载软件后,win10应用与功能中仍有残留,解决方案。

    这个问题我已经找到解决办法了,首先打开“应用和功能”列表, 然后往下拉看到“相关设置”打开其中的“程序和功能”一项, 然后找出你想删除的应用进行卸载.

  10. MySQL 8 拷贝MySQL数据库到另一台机器

    通过mysqldump生成包含SQL语句的文件,然后将其应用到目标机器的mysql客户端程序. mysqldump --help 可以获取mysqldump选项以及用法. 如果源服务器上启用了GTID ...