- JDK1.5新增的功能 ==>>>
- 字符流和字节流的区别,使用场景,相关类 ==>>>
- 线程安全的概念,实现线程安全的几种方法 ==>>>
- 抽象类和接口的区别,使用场景 ==>>>
- hash算法的实现原理,hashcode的实现原理 ==>>>
- error和exception的区别,RuntimeException和非RuntimeException的区别 ==>>>
- 继承与组合的区别,使用场景 ==>>>
- 使用静态工厂方法的好处和坏处 ==>>>
- 排序算法,他们是时间复杂度是多少 ==>>>
- 数据库设计原则、范式 ==>>>
- 数据库常用的编码方式有哪几种
- 如果有10万条学生成绩信息,怎么获取成绩最高的那一条数据,怎么获取成绩第三的那一条数据,列举你认为性能最好的方式 ==>>>
- 序列化的作用,应用场景,除了网路传输 ==>>>
- spring的IOC、AOP的使用场景 ==>>>
- ajax是否能跨域请求,解决的办法 ==>>>
- 解析xml的几种方法,他们的原理 ==>>>
- 怎么样实现高性能的代码 ==>>>
- 如果有和其他系统有接口调用,但其他系统还没开发完成,怎么进行单元测试 ==>>>
- 防止重复提交有哪几种方式 (这个网上很多,可以google下)
- 怎么样运用样式设计一个DIV浮出层
- 数据库连接池的实现原理,请求怎么样去获取连接,,关闭连接时,连接池是销毁连接还是回收连接 ==>>>
- tomcat、weblogic、jboss的区别,容器的作用 ==>>>
- apache是容器么,它的作用是什么 ==>>>
- 内部跳转和外部跳转的区别,底层实现原理 ==>>>
- http和https的区别 ==>>>
- 宕机的原因有哪几种,怎么样分析宕机的原因,如:数据库的长连接。。。 ==>>>
- 在velocity页面,为什么不推荐不推荐使用宏定义 ==>>>
- webx的核心原理,webx框架和velocity的优缺点 ==>>>
- 页面上如果有一个screen和两个control,那么他们有几个context ==>>>
- 一个含有layout、screen和control的页面,他们的加载顺序是什么,是等所有的加载完一起显示,还是其他。。。 ==>>>
- #if($!a==’true’)会出问题么,为什么 ==>>>
- 支付宝怎么样保证他的安全,他的调用异常分哪几种 ==>>>
- 项目中你觉得做得最好的是什么 ==>>>
- 35.java除了8种基本类型外,在虚拟机里还有哪一种,有什么作用?
- 36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式?
- 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别?
- 38.列举三种以上垃圾回收算法,并比较其优缺点?
- 39.编写代码实现一个线程池
- 40.描述一下JVM加载class文件的原理机制?
- JVM中类的装在是由ClassLoader和它的子类来实现的,java ClassLoader是一个重要的java运行时组件。它负责在运行时加载和装入类文件的类。
- 41.试举例说明一个典型的垃圾回收算法?
- 42.请用java写二叉树算法,实现添加数据形成二叉树功能,并以先序的方式打印出来.
- 43.请写一个java程序实现线程连接池功能?
- 44.给定一个C语言函数,要求实现在java类中进行调用。
- 45.如何获得数组的长度?
- 46.访问修饰符“public/private/protected/缺省的修饰符”的使用
- 47.用关键字final修饰一个类或者方法时,有何意义?
- 48.掌握类和对象的概念,掌握面向对象编程的本质
- 49.静态变量和静态方法的意义,如何引用一个类的静态变量或者静态方法?
- 50.JAVA语言如何进行异常处理,关键字:thorws,throw,try,catch,finally
- 51.Object类(或者其子类)的finalize()方法在什么情况下被调用?
- 52.一个“.java”原文件中是否可以包括多个类(不是内部类)?
- 53.掌握内部类和接口的概念
- 54.StringTokenizer类的使用
- 55.数据结构,如何遍历List中的元素?
- 如果要按照键值保存或者访问数据,使用什么数据结构?
- 要掌握Collection相关的接口和类的使用
- 56.使用StringBuffer类与String类进行字符串连接时有何区别?
- 57.调用Thread类的destroy()方法有什么后果?
- 58.多线程,用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
- 59.使用socket建立客户端与服务器的通信的过程
- 60.JAVA语言国际化应用,Locale类,Unicode
- 61.描述反射机制的作用
- 62.如何读写一个文件?
关于Hashcode方法和equals?
哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:
1
|
public
native
int
hashCode();
|
根据这个方法的声明可知,该方法返回一个int类型的数值,并且是本地方法,因此在Object类中并没有给出具体的实现。
为何Object类需要这样一个方法?它有什么作用呢?今天我们就来具体探讨一下hashCode方法。
一.hashCode方法的作用
对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode。在Java中也一样,hashCode方法的主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。
为什么这么说呢?考虑一种情况,当向集合中插入对象时,如何判别在集合中是否已经存在该对象了?(注意:集合中不允许重复的元素存在)
也许大多数人都会想到调用equals方法来逐个进行比较,这个方法确实可行。但是如果集合中已经存在一万条数据或者更多的数据,如果采用equals方法去逐一比较,效率必然是一个问题。此时hashCode方法的作用就体现出来了,当集合要添加新的对象时,先调用这个对象的hashCode方法,得到对应的hashcode值,实际上在HashMap的具体实现中会用一个table保存已经存进去的对象的hashcode值,如果table中没有该hashcode值,它就可以直接存进去,不用再进行任何比较了;如果存在该hashcode值, 就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址,所以这里存在一个冲突解决的问题,这样一来实际调用equals方法的次数就大大降低了,说通俗一点:Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。下面这段代码是java.util.HashMap的中put方法的具体实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public
V put(K key, V value) {
if
(key ==
null
)
return
putForNullKey(value);
int
hash = hash(key.hashCode());
int
i = indexFor(hash, table.length);
for
(Entry<K,V> e = table[i]; e !=
null
; e = e.next) {
Object k;
if
(e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(
this
);
return
oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return
null
;
}
|
put方法是用来向HashMap中添加新的元素,从put方法的具体实现可知,会先调用hashCode方法得到该元素的hashCode值,然后查看table中是否存在该hashCode值,如果存在则调用equals方法重新确定是否存在该元素,如果存在,则更新value值,否则将新的元素添加到HashMap中。从这里可以看出,hashCode方法的存在是为了减少equals方法的调用次数,从而提高程序效率。
HashMap与HashTable?
2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration,HashMap使用Iterator。
支付宝笔试面试
1. cookie 和 session 的区别
cookie机制采用的是在客户端保持状态的方案,
而session机制采用的是在服务器端保持状态的方案。
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
2. JVM 内存模型
3. SQL注入的原理
4. 悲观锁 和 乐观锁
5. 读程序,输出结果. 关于treemap的
6. Linux 基础命令,统计日志中的信息
7. java 分布式集群
8. 一道设计题,具体到数据库的表.大概是淘宝的搜索中,输入手机,会出来很多类型,按品牌按价格区间按手机种类.
还有2道题我记不住了.
面试:
1.介绍你做过的项目,用到的技术,涉及到的模块,然后从项目中问各种技术实现的细节(为了确保你是真的懂了).
2.看你的试卷,喊你讲解做题的思路,以及这样结果的原因.(考的是各位的java基础知识了,这点是绕不过去的,懂了就懂了啊,只有平时多看书)
3.团购6位验证码以及团购成功后,发送到你手机上的条码的实现方式.(第一个问题我说用随机数+时间来验证.第二个问题老实说,我也没答上来,我说用序列,面试官说序列到后期20位以上的时候,用户体验很差的)
4.淘宝上是如何保证库存和订单之间的数据准确性的.(考点是分布式事务,这个问题我也没答上来,最后他问我有什么问题问他的时候,我就反问的这个问题,面试官人挺好的,给我耐心的讲解了一遍淘宝的实现方式以及
epay的实现方式. 淘宝是通过分布式事物,中间用了一个叫协调者角色的程序,当那边点击购买时,会库存减一,保存一条预扣的状态,但是是个预准备状态,然后做成功后,协调者会在另一个数据库生成订单,然后这个订单也是预状态,等两边都准备好以后,通知协调者,又协调者统一完成这2个数据库的事物,从而达到完成一笔交易的目的,若其中一方失败,则将预扣的数字返回到库存从而实现类似回滚的操作.)
5.索引的原理.能否构建时间索引.时间索引构建后会存在什么问题.(索引原理我是回答的堆表索引的构建原理以及查询原理,但是关于时间索引的问题,我也没回答出个所以然来,看面试官的反馈,好像回答得不够好吧)
6.你们数据库的数据量有多大,(回答:我们是电信方面的系统,表上亿的数据很正常).问:如果保证效率?
(我是如此回答的,各位自行结合自身的情况参考.答:后台J OB程序会定期备份,把生产表数据移走,然后备份表也会再备份一次,如此剃度的备份,保证生产库的数据是最小的.然后备份表采用分区和子分区,加上构建战略索引(分析系统的sql,常用
查询字段构建复合索引,以减少每次查询时对表的访问次数)).
7.SQL注入的原理以及如何预防,并举例.(这个相对简单,网上一搜一大片)
8.使用过Memcache么? 用在项目中哪些地方? (答,在门户主机上使用,缓存session,分布式的时候,统一访问这台主机验证用户session是否存在,来维持回话的状态和实现回话同步.又追问:java代码中如何实现访问门户服务器的这个session池子的? 几年前的代码,确实忘记了..于是坦白的说,记不清楚了 )
这些是主要的问题,当你回答一个大问题时中间还有很多比较碎的追问性质的小问题,总体给我的感觉是,氛围很轻松+愉快的,技术层面上还是需要你真正的理解透彻一些关键技术点,才能做到应付各种追问和给出满意的答案吧.如果只是一知半解想去蒙混过关肯定是不行的,毕竟在支付宝的技术大牛面前,多追问几句,也就把你逼到死角了.
还有一点比较重要的感觉就是,他们比较在意你是否了解当下的一些比较热的技术点,比如淘宝的秒杀,是如何保证高并发下的安全性和性能,新浪微博那种大数据量的发送,怎么就保证正确性和时效性的.
高级面试总结
(1)
(2)
(3)
(4)
(5)
18、
(1)
(2)
(3)
19、
(1)
(2)
(3)
20、
21、
一个设计模式描述了一个被证实可行的方案。这些方案非常普遍,是具有完整定义的最常用的模式。一般模式有4个基本要素:模式名称(pattern name)、问题(problem)、解决方案(solution)、效果(consequences)
常见23种模式概述:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
22、
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
进度报告
项目总结报告