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、抽象类与接口的区别

最新文章

  1. Fiddler抓包工具使用基础
  2. getVisibleSize 和 getContentSize 和 getWinSize
  3. Qt之四方分割器QuadSplitter
  4. linux杂记(六)档案权限
  5. windows系统下使用cd命令
  6. Vxworks驱动程序的结构
  7. MySQL数据库入门笔记
  8. mysql DISTINCT 的实现与优化
  9. 调用链监控 CAT 之 URL埋点实践
  10. vue项目打包笔记
  11. centos 系统上如何把python升级为3
  12. C# Note32: 查漏补缺
  13. C++: 带参数回调函数和不带参数的回调函数;
  14. C# 常用的工具方法
  15. JDBC(13)—JDBC调用存储过程和函数
  16. flask之信号和mateclass元类
  17. PNG格式图片常见转换方法
  18. golang中的字符串拼接
  19. Python 实int型和list相互转换 现把float型列表转换为int型列表 把列表中的数字由float转换为int型
  20. phpstrom主题

热门文章

  1. MySql基础补漏笔记
  2. Executor 任务执行器
  3. 虚拟机中给linux 系统添加硬盘以后,进行分区挂载
  4. Flink中逻辑计划和物理计划的概念划分和对应关系
  5. linux 命令行下设置代理
  6. linux下(centos7)docker安装
  7. Learning links
  8. 第1章 JavaScript 简介
  9. Element节点
  10. CSS3中新增的对文本和字体的设置