@lzb1096101803
2016-03-22T22:29:00.000000Z
字数 780
阅读 393
面经
没有自我介绍,直接进入正题
一堆数字里面继续去重,要怎么处理?放入hashset
hashset怎么实现?底层是hashmap
hashmap如何实现?数组加链表
别人知道怎么实现的,故意构造相同的hash的字符串进行攻击,怎么处理?
转为红黑树,jdk8中
那jdk7怎么办?好像我答了可以自己实现
如果要去除后还要有序?可以将key放对象,一个字段是顺序,一个字段是真正的值,按照顺序号拿即可。。。后来面试官说可以用LinkedHashMap
对线程安全怎么看?说到内存模型
为什么要实现内存模型?因为要在不同系统中形成统一,不对内存直接进行操作。。。面试官说是什么L1,L2寄存器,X86不会什么的。这个内存是虚拟的内存。,,,
如何让线程安全?加入synchronized
如果要你做一个防火墙,有10万个黑名单,有可能会增长达20万个,一个数据包过来,如何匹配?先进行排序,然后再二分查找。或者放到数据库,利用语句筛选,底层是B树。
数据库的实现比自己实现B树快?不是,数据库可能会进行其他的优化
二分查找复杂度是?LogN
GET和POST的区别?扯到REST风格,,什么长度限制。。。面试官说实际上是GET可以用于加入购物车,分享链接,放入历史记录什么的,GET可以被人索引到。。。
谷歌搜索是POST的
用面向过程可以实现面向对象吗?
面向对象三大特性:封装继承多态
Java和C++都有
对C,有C库,最多称得上是封装,但是不具有其他两个特性。而且C有结构体,可以看做是对象
但是类库并不是真正的封装,我认为C库只是对操作系统底层进行封装,而真正的面向对象是对业务逻辑进行封装,比如Java可以直接用List,或者Set,对单独的开发而已,不用关注具体实现,而C并没有这些实现
那是不是不能面向对象?不是,我们可以自己封装一些List,Set给别人用