中原银行线下一面
写面筋,攒人品,skr~
面试
- 个人介绍
- 对我个人介绍和简历上问(还问了我ACM是个什么是要写算法的吗…这个属于含金量很高的吗…)
- 介绍一个最近做的或者技术含量比较高的项目(说了一个我做的比较多的,但是我做的数据可视化偏前端+后端)
- 这个项目有哪些难点
- 后端哪一块比较好,我们可以聊一聊(说了自己在看Java基础)
- 集合那块你哪里比较好一点(说正在看,在看HashMap、HashTable)
- 那HashTable为什么是线程安全的(因为HashTable中的很多方法实现了synchronized关键字)
每个操作数据的方法都进行同步控制之后,由此带来的问题任何一个时刻只能有一个线程可以操纵Hashtable,所以其效率比较低。
- 那为什么他的线程安全比较重量级,不是轻量级(这里可能是想问为啥效率不高吧)
因为表中存的很多数据,很可能多个线程都要同时使用,但是因为是synchronized的,所以同一时间只能有一个线程使用,效率不高。
- 那为什么concurrentHashMap比HashTable好(说了concurrentHashMap内部是以段为单位的,每个段就是一个HashTable,是线程安全的和锁分离的)
为什么ConcurrentHashMap可以多线程访问呢?是因为ConcurrentHashMap将Map分段了,每个段进行加锁,而不是想Hashtable,SynchronizedMap是整个map加锁,这样就可以多线程访问了。ConcurrentHashMap默认运行16个线程同时访问该map。但是我们可以通过一个函数来设置增加或减少最大可运行访问的线程数目。
-
对读写锁有了解吗(不知道)
-
多线程场景下我们要注意哪些方面(说了脏读啥的…结果面试官说那是事务,太尴尬了)
线程退出、异常处理、同步方式
- Linux查看端口号(不会,只会进程号)
lsof -i:端口号 or netstat -nltp | grep 端口号
- Java基础哪块掌握的比较深,ifelse问谁都会,你能比别人有优势,你哪一科比较好(程序设计)
- 现在Java基础或者别的跟面试相关的亮点,聊嘛(我说了把自己最近看的聊下吧,然后说自己在看Collection的一些实现类)
- 那ArrayList中add方法让我实现怎么实现,自己写一下(写了点伪代码,把逻辑写了下。分第一次添加和非第一次添加,放不下时后进行1.5倍扩容(Vector是2倍扩容),但是有可能是放一整个结合,当扩容后仍放不下时,我们直接定义扩容为添加后的长度。如果这个超过了之前设置的MAX值(接近Integer.MAX_VALUE),那么干脆直接设置为Integer.MAX_VALUE)
- 都不是线程安全的,多线程环境下怎么办(不会)
- 建议快速把(简历)写的这些东西掌握,要不然过不了下一轮
反问
19. 基础知识掌握后,还有什么提高:不只是基础,还要有一定深度,要知道原理。像mysql、spring什么的都没有找我聊
这次应该算是过了吧,唉,总共聊了有十五六分钟的样子
文中有哪些不对的,也请朋友们进行评论区留言,谢谢