【面试回顾一】20220509-Java中级15K-小厂-不通过
-
问:Java的数据类型有哪些?
- 答案: 基本数据类型包括整数型byte、short、int、long,浮点型float、double,字符型char,布尔型boolean;引用类型包括类class,接口interface,数组等
-
问:ArrayList和LinkedList的区别?
-
答案:
- ArrayList的实现是基于动态数组,LinkedList的实现是基于双向链表
- 对于随机访问,ArrayList优于LinkedList
- 对于插入和删除操作,LinkedList优于ArrayList
- LinkedList比ArrayList更占内存,因为LinkedList的节点还需要存储两个前后元素的引用
-
-
问:操作较多的情况下用ArrayList还是LinkedList?
- 答案: 在非首尾的增加和删除操作,LinkedList要比ArrayList效率要高,因为ArrayList中间和头部增删,会涉及数组元素位置的移动,效率比较低
-
问:HashMap底层原理?
-
答案:
- JDK8中HashMap的底层结构是数组+链表+红黑树,数组下标为哈希算法后的hash值,数组中的元素为使用链地址法处理哈希冲突的链表,当链表长度大于一定时将自动转换为红黑树,反之长度小于一定数量时红黑树会自动转换为链表,原因是过长的链表查询速度慢,而在一定长度条件下红黑树查询速度比链表快。
- 存入数据时调用数据的key值的hashCode()方法得出hash值,通过哈希算法将hash值转换成数组的下标,如果该位置为空则直接添加元素,如果不为空则用数据的key与该位置的链表中每个元素进行equal比较,所有比较返回false则在链表最后添加元素,如果其中一个比较返回true则该链表节点将被新元素替代
-
-
问:SpringCloud(Netflix)有哪些组件?
- 答案: 服务发现Netflix Eurek、负载均衡Netflix Ribbon、断路器Netflix Hystrix、网关Netflix Zuul、配置中心Spring Cloud Config、权限控制Spring Cloud Security等等
-
问:Mysql有哪些性能调优方式?
- 答案: 选取最适用的字段属性、尽量把字段设置为NOTNULL、使用连接(JOIN)来代替子查询、使用联合(UNION)来代替手动创建的临时表、使用事务、使用外键、使用索引、优化查询语句等等
-
问:Mysql什么情况下会索引失效?
- 答案: 使用select *时、索引列上有计算时、索引列用了函数、语句中查询的条件值与字段类型不同时、like左边包含%时、使用or其中一个字段没有加索引时、使用not in或not exists时、使用order by没有加where时等等
-
问:声明式事务什么情况下会失效?
- 答案: 配置开启事务注解的方法不是public、同一个类中发生了内部方法自调用、异常被捕获、异常回滚类型错误等等
-
问:缓存穿透和击穿的区别?
-
答案:
- 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层,缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失去了缓存保护后端存储的意义
- 缓存击穿是指在某些Key属于极端热点数据,且并发量很大的情况下,如果这个key过期,可能会在某个瞬间出现大量的并发请求同时回源,相当于大量的并发请求直接打到了数据库
-
-
问:分布式锁的原理?
-
问:数据幂等性怎么处理?
- 答案: 防重表、token令牌机制、先查询后判断、悲观锁或乐观锁、分布式锁等等
写在最后
面试反馈为基础不足,对技术没有热爱,薪酬15k是中级和高级的分水岭,工作年限不能直接反应水平,未来也会进入高级层次,应该对技术原理多研究学习。
接近两年未进行过面试,这一次面试也没有好好准备,只是写完简历就去面试了。面试完回想起来日常工作中只顾着处理业务,对工作中用到的技术只是浅尝即止没有深入研究,遇到一些难题解决完后也没有总结文档进行沉淀积累,面试中最后问我工作中遇到什么坑我都忘记大部分了。
本文中面试题的答案都是网上搜索总结得出,不一定准确,各位读者看完问题自行搜索答案即可