好几天前发生的事情了,还是想写一篇文章来记录一下
孩子还没断奶,在公司母婴室吸奶的一个伙伴儿,
“你是搞开发的是吧,我们有招聘Java,你来试试吧“
我内心戏是这样的:“好好地摸鱼呢,不想去,哪儿有现在清闲啊,出去到哪儿逃得了996,拿时间和生命换取金钱不值得”
”我们公司适合养老,我不懂技术啊,你去试试吧,反正又没什么损失“
加了她微信,说让我给她发简历,犹豫了一整天,没发,第二天中午又遇见了,又催我给她发简历,这下不好再拒绝了,试试就试试吧,又没啥损失,谁又会跟钱过不去呢
从内心决定试一试的那一刻开始,审视自己的简历,看写的东西,
之前都看过,可是忘了百分之八十,什么样的脑子能记得住那么多面试官突如其来的炮轰
死就死吧,卸下了心理的负担,既然有机会,就不能白白浪费,拼命地往脑子里塞之前看过的内容,什么多线程,线程池分类策略,IO,NIO, CopyOnWriteArrayList,CountDownLunch,CycleBarrier,AQS,事务隔离级别,spring的原理,bean加载过程,CAS,Redis基本结构,redis原理,分布式问题,Java虚拟机垃圾回收,类加载,mysql索引,索引数据结构……
时间一分一秒的过去,终于要上战场了,提前准备了之前的设计图,准备忽悠一番
那个小设计之前看懵懵懂懂,现在看设计到的点还不少呢,什么多线程协作,什么负载轮询(负载最低优先)算法等等
蹭蹭蹭,到了楼下的会议室门口,通知hr我到了,没多久,一个圆圆的面试官来了,
你先填下表,答个题,半小时后我再过来
“哎哟我去,还答题,手写代码那得啥功力,快捷键搞的sychnorized都不会拼写了”
定睛一看,第一题如下图
“这是考排序算法呢,懵逼~~”
第二题:
用递归打印等边三角形
“嗯,还是算法,写不出来的一批”
第三题:
“恕我功力尚浅,这是考啥呢,遍历下这坨,计数器加一加”
第四题:
终于看见个简单的,person表 personId,姓名,年龄,电话号码,
adress地址表 addressId personId 地址,
查全部人的地址信息
Select p.姓名,p.年龄,p.电话,a.地址 from person p left join Address a on p.personId = a.personId
第五题:
查询里Salary里salary第二大的值
Salary
Id ,salary
思路:先查最大的排除,再查个最大的
select (select Salary from Employee where Salary < (select Salary from Employee order by Salary DESC limit 1) order by Salary DESC limit 1) as SecondHighestSalary
半个小时结束了,面试官来了,我先开始好像显得不礼貌,等对方先开口吧,
你跟我们不是一个业务体系?
嗯,确实业务方向不匹配,我也清楚
那还聊吗?
聊聊吧
那你先介绍一下你做的这个项目吧
“XX系统是用什么框架,完成了什么功能的一个中间系统”
内心:“这系统确实没啥好讲的,就是个批处理,拉数据,整理,推数据完了”
要不要跟他介绍我准备的图,还没来得及接话,对方开口了,
用redis,说一下怎么用的,缓存穿透是什么
嗯,这个项目里就用缓存存了一些经常访问的数据,缓存穿透主要是缓存没值,直接打到了数据库上,还有个概念缓存雪崩,这个怎么解释呢,就是,啊不知道怎么描述,只可意会不可言传中,其实在《亿级流量Java高并发与网络编程实战》看到过,没记住,这嘴提他干啥
redis怎么存数据的
RDB快照和AOF两种方式,RDB就是一段时间咔嚓存一个文件,AOF怎么描述呢,就是实时的追加文件内容
mysql优化有了解么
嗯,平时就是注意加索引,和注意一些索引失效的问题,通过SQL执行计划可以看用没用索引,
索引的数据结构是b+tree,
这个还有mysql存储引擎,innodb引擎,innodb引擎支持事务,myisam不支持事务
还有其他区别吗?
脑袋空白中,其他什么区别??
那你写个sql吧,查询表里编号重复的记录
嗯,先count一下,找出来count大于1的记录就行了啊
嗯,我写一下,天天对着电脑屏幕知道咋写,白纸上都不知道写出来的能不能运行,select count(code) group by code having ~~~
hashmap初始容量多少
“见鬼”我记得是16,
Hashmap1.7是数组加链表,1.8加入了红黑树,只可意会不可言传中,认怂
hashmap扩容怎么做的
“见鬼,看过我也忘了,谁没事写业务代码天天把这个记着,注定与高薪无缘,我搞不动了”
hashmap怎么迭代
迭代器迭代啊
还有呢?
这是考啥呢,脑袋继续空白中,我都多长时间没写过代码了,确实不是个合格的程序员,惭愧
java虚拟机垃圾回收机制清楚吗?
嗯,主要是分代算法,标记清除,复制算法,还有个标记啥来着,还有一些就是通过对这算法用了多线程,新生代,老年代,永久代,新生代一般用复制算法……&¥%%……&¥
es有用过?
见鬼,我写它干啥,就记得一个倒排索引了,看过的什么 缓存 内存调整的都忘美国了
你这答的一半一半吧,我们领导那里肯定过不去,今天就先这样吧
凉凉喽
两三天过去了,一直耿耿于怀,没占主场,失败了,肠子都悔青了,
谨以此文来告诫即将准备参加面试的朋友们吧
为什么准备的东西,一个也没说,springIOC ,AOP
还没说呢,多线程还没开始白活呢,sychronized,lock,线程安全,线程池,IO我还没说呢,粘包半包也没聊呢
一直想知道:
大佬们怎么办到的?
JVM那些参数平时老改吗?
在办公室里扯扯皮,写写增删改查,复制粘贴下SQL,没事开开会,闲了看看源码这些才是日常不是吗?
也没听见谁讨论JVM参数怎么调整会更合理,资源利用率会更高
也没看见谁在代码里写了位运算
也没看见谁在写代码时用了hashmap源码
甚至连生产环境参数如何设置的可能都没权力知道
平时写红黑树吗?左旋,右旋
平时写归并排序?还是希尔排序?
不是管他3721直接Collections.sort()?
不是Ctrl+C 加上Ctrl+V外加个点和换行吗?
一肚子疑问,好想见见高层的世界,
每写一段代码都要考虑考虑时间复杂度,空间复杂度,
考虑考虑虚拟机工作的时候会因为这种写法导致占内存多,
而不是为了赶工期能不出bug就阿弥陀佛了
是做好设计图纸,画好流程图,考虑好每一个极端情况,再下手写代码?