最近准备跳槽,这今天作者约了好几场面试,都为网上视频面试,今天就来和大家聊聊面试中的那些事。
根据自己的简历审视,不会的一定不要写
首先,正常的面试官上来肯定都会让你来做一个自我介绍的,不用太长,一分钟足够,介绍自己的学校,学历,专业,以及简要介绍自己的技术,然后步入正题。
第一道:介绍一下你了解的数据结构,不仅仅只局限于Java?
答:(不仅仅局限于Java看的我一脸懵逼,硬着头皮回答)常见的数据结构包括集合跟数组以及链表,其中数组是固定的,而集合是可变的,数组储存的必须是同一个数据类型,而集合则不然,常见的集合类:
Map接口和Collection接口是所有集合框架的父接口:
1.Collection接口的子接口包括:Set接口和List接口(List有序容易插入,set无序容易增加删除)
2.Map接口的实现类主要有:HashMap(JDK1.8之前HashMap由数组+链表组成的,1.8后红黑树)、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
3.Set接口的实现类主要有:HashSet(无序,唯一)、TreeSet(有序,唯一)、LinkedHashSet等
4.List接口的实现类主要有:ArrayList(Object数组,优点:顺序添加,随机访问)、LinkedList(双向循环链表,优点:增加删除)、Stack以及Vector(Object数组,线程安全)等(综合来说,在需要频繁读取集合中的元素时,更推荐使用ArrayList,而在插入和删除操作较多时,更推荐使用LinkedList。)
第二道:我看你的项目中用到了多线程以及定时任务,能讲一讲是怎么使用的嘛?
答:(项目多线程是二次开发封装好的,所以并没有太深的了解)
1.由于算是自由发挥,首先创建线程的四种方式
2.线程的run()和start()有什么区别?
3.五种状态?()
4.sleep和wait的区别(sleep不释放锁,wait释放锁;wait方法被调用后,线程不会自动苏醒,需要别的线程调用notify或者notifyall方法唤醒,而sleep方法执行完后,线程会自动苏醒,或者设置超时时间自动苏醒)
5.唤醒线程的方法,以及区别(notify(唤醒一个处于等待的线程)和notifyall(唤醒所有等待的线程))
第三道:数据库优化方面的,用过那些优化?
答:对查询进行优化,要尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引
应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
应尽量避免在where子句中使用or来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描
对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。
第四道:介绍一下redis,你平时的使用场景?
答:简单介绍结构,以及缓存热点数据(allkeys-lru从所有数据集中挑选最近最少使用的数据淘汰;最常用的热点数据缓存策略)
其他的不会,redis用的比较少,但上网搜索了几种常见的用法,可以了解下
第五道:Springboot常用注解,以及区别SSM的不同(脑残问题耶)
第六道:linux以及docker常用命令,能说几个嘛?(自己私下了解)
第七道:平时开发中遇到过哪些异常?(正在了解)
下面就开始问项目经验了(略)