上周阿里打电话点面,总共40多分钟,感觉好多点虽然回答了,但是不是回答的太清楚,这里在重新复习下.
由于时间较久,只记得大部分问题,而且顺序可能颠倒,
1. 项目简介
刚开始是让介绍下简历上的项目. 我在简历上写了两个项目, 面试官让我挑一个自己收获最大的来介绍, 介绍中有的我只是说了某个点, 很nice的面试官还会帮我补全.
2. 常用集合 set
先是问我常用的java集合, 我从ArrayList, Map, 异步Map说到同步Map. 然后面试官问我有没有用过Set, 我说在C#中是用过的, 然后面试官直接就换了其他问题. 我觉得这里还是可以展开的, 比如Set如何实现的(基于Map实现的), Set如何确保值的唯一性(对于Map,当key存在Map中时,value会被新的value覆盖,这又牵涉到hashcode和equals,又可以深入).
3. try catch 的作用
这里刚开始从C语言的返回码开始说, 然后说到自己的项目里如何用, 如判断异常然后给用户提示, 让用户知道自己哪里操作违规. 扯着扯着扯偏了, 面试官问我”那么你说的这些C语言的返回码也可以做, try catch相对有什么优点呢?” 才回到正轨. 就是try catch可以让程序逻辑集中在一个地方, 专注于业务的就放在try里面, 不用考虑异常处理; catch就专门用来处理异常, 这样方便开发维护. 其实这里只是大概知道这么个点, 还是很nice的面试官根据我说的点, 帮我组织语言, 超赞.
4. tcp udp的区别, socket的使用
先是问我tcp udp的区别: tcp面向连接, 是可靠的, udp连接不可靠, 不能确保每一帧都能发送到客户端. 当时只答了这一点, 查查还有其他几点: 如tcp基于流模式, 虽然数据包是按包发送, 但是tcp无法按包读取. udp基于数据报模式, 可以按包读取.
然后问socket的使用,我说我原来根据CSAPP里的例子, 写过一个C/S的程序. 然后面试官就又换下一个话题了. 后来想想, 他想问的应该是java中的Socket如何使用.
TCP服务端: 新建ServerSocket实例,绑定端口. 然后调用实例的accep()函数,获得client的Socket实例, 通过client的getInPutStream和getOutPutStream就可以读取写入数据.最后不使用记得关闭client.
TCP客户端: 新建Socket的实例,绑定指定IP和端口,通过实例的getInPutStream和getOutPutStream来写入读取数据.最后记得关闭实例.
UDP服务端: 新建DatagramSocket实例并绑定端口, 然后构建DatagramPacket报文实例,需要接收或发送的消息都在DatagramPacket报文实例中,通过DatagramSocket的receive和accept方法,就可以接收发送DatagramPacket报文.
UDP客户端: 有一个特殊的地方是UDP是可以允许报文丢失的。为了防止报文丢失, 程序阻塞, 所以要设置超时.
详细看这里.
5. 归并排序和分治
面试官问什么是归并排序, 其实就是先分解在合并. 最后问我这个术语叫什么, 一时脑抽, 怎么都想不起来了, 还好面试官很nice的说”没事, 你已经把思想都说出来了, 这个叫分治.” ping值很长的我听过后两秒才恍然大悟, 对, 叫分治.
6. java垃圾回收
java垃圾回收可以释放没用对象,清楚内存记录碎片.
java垃圾回收算法是运行到safe point之后,从全局变量和所有线程的堆栈中将所有有效的对象作为根对象集合,然后从根对象出发将所有的reachable对象都标记上,然后再遍历heap里面所有对象然后把没有标记到的垃圾释放。而且java垃圾回收还涉及到分带思想, 因为多数对象存在时间短, 少数对象存在时间长. 通过分带, 将第一次垃圾回收没有回收的对象移到下一代的子堆中, 而下一代的子堆不用那么频繁的回收垃圾, 节约了垃圾回收时间.
其他常用垃圾回收算法: 引用计算,新建和赋值给其他对象时, 引用加1. 对象出作用域,引用减一.详情见这里.
缺点: 影响性能.
面试官还问了:两个相互引用的如何回收?
当时想了好久, 感觉如果用引用计数, 确实没有办法回收. 后来一想, java中用的不是引用计数来进行垃圾回收, 不存在 island of isolation.
7. JVM参数设置,详情看这里.
-Xms java初始化堆内存大小
-Xmx java最大堆内存大小
-Xss java栈内存大小
8. java 常用框架
SSH: Spring Structs Hibernate
日志记录: Log4j
前端: JQuery
9. 通过哪些途径学习
csdn, stackoverflow, quora, infoQ, 伯乐….
经典书籍
论文
10. 作为非科班,你怎么看自己的竞争力
因为一直对计算机有爱好所以一直持续学习中, 这个可以理直气壮的回答”我一直对计算机有爱好,一直在不断学习,相信自己不比别人差”.