海康威视研发一面
2021/9/23 海康威视一面
自我介绍
巴拉巴拉
就自己某个项目重点介绍。(我不入流的练手小项目一堆)
技术面
数据类型
八种基本类型
int取值范围
封装类
封装类与封装类,封装类与基本类型比较。
注意Integer在[-128,127]和这个区间之外是有区别的。在这个区间之内,Integer类型是IntegerCache.cache[x],这是一个静态类,所以可是使用==,在这个范围之外是Integer类型是直接new Integer(x)
jdk1.8之后的lamnda表达式会不会写?我不会写,我只在python里写过lamnda。
hashmap
hashmap
counrrenthashmap
要求从源码上解释。
如果两个同样的put相同的key,会发生什么?
。我瞎猜的说了一堆,但实际上是会报异常
线程池
线程池工作原理
为什么要使用线程池
工作队列
线程池运行中,突然电脑关机了,内存数据都会丢失,开机后怎么办?
我开始说了写备份到内存,其实就是持久化,但是这个不行,不可能时时刻刻写。
然后我就突然灵光乍现想起redis里的AOF,我就说记录任务队列,开机后回滚重新再执行一次就好了。面试官指导说我这个有点对,说是消息队列的一些框架的内容,分布式队列,但我消息队列我只知道是个什么东西,其他一无所知。
锁
sychronized介绍一下
数据库
复合索引最左匹配,以及从源码上讲为什么要最左匹配
我只知道最左匹配,但我不知道原理
如果使用delete删除,是真的把这个记录删除了吗?
我没答出来。这个考的其实是mysql三种事务日志类型,redo log(重做日志)和binlog(归档日志),回滚日志(undo log)。其中undo log保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。所以使用undo log可以回滚。
一个字段要求存的是不带符号的int,那怎么存负数?
我是说要么增加一个字段,要么用类似100001这种leetcode算法里经常出现的这种用法,我也不确定对不对
自增id为什么会用完,用完了怎么办?
因为删除操作不会改变自增id,自增id会一直增长,如果频繁删除和新增,那很快就会到达限制
用完了的话就只能更新,不能新增。这个我真不知道,我心里嘀咕是不是类似uid那样新造个类型的字符串id出来,但我没说。
如果数据库有100条值,数据库引擎会使用索引搜索吗?
因为innodb数据库引擎有个机制是,会对sql语句优化后会判断是用索引查找还是全盘扫描比较快,如果数据库殷勤认为全盘扫描更快就会使用全盘扫描,但100算不算少我就不知道了。反正我是这么说的
like语句什么时候能用什么时候不能用?
第一个就是%,那么会和通配符在一起导致%失效。还有就是text很长时也不行。当然这个我没答上来。
扩展
你是怎么学的这些知识?
我说我从网上看的,包括一些源码和一些别人写的文章
最近看了什么书?准备接下来学习什么内容?
因为发现今天问的很多问题其实都是因为并发造成的,所以我说对并发这块再了解了解
总结
面试体验还是很nice的,面试官是一个30岁的白白净净的大哥。
我中间为了形象好点换了个高清的外接摄像头,因为笔记本是八年前买的,内置相机画质很差。
面试官还是希望你是系统学习java知识的,所以会问你是怎么学习的,而不是恶补面经。
比较在意源码上的理解,也希望我能在源码上讲一下,我倒是看了不少源码,但是真的忘记了。
问的过程中会有引导,个人感觉还是一方面希望你能想起来,一方面是可以在引导中自己思考加学习吧。。。
使用的钉钉视频。
希望进二面吧。