周三,迷迷糊糊的去某公司面试,有些问题好久都没有好好思考了,结果被问的好没有准备,还有些被鄙视的感觉,回家后越想想越觉得操蛋。
为什么很多公司都会问一下Concurrent包里的东西呢!
Concurrent包无非就是几点:原子性、乐观锁实现的一些线程安全的容器(多半人会问你他与普通容器有什么区别或者为什么他就安全了,刷题也经常见到的吗)、线程池问题、一些容器的物理结构是啥比如:linkedlist、arraylist、hashmap、concurentHashmap、treemap (用红黑树)等等
很多人还喜欢装牛逼似的问一下:一些大文件如何的处理问题,思想就是分批、批量,看你对堆内存是否注意到,对文件中占用的byte等等问题是否估量到;或者用到jdk中一些access文件读取或者内存映射方面的;居然有人问我json序列化的东西还。
mysql:方面会问你一些sql执行效率的问题,索引分布情况,最后引到索引上B-tree等结构;牛逼一点会问问四级事务等等;主从问题中,如何应对数据不一致的问题,简单策略当发现有写操作,自动将查询的流量转达到主库上面,设置超时时间,再回到从库上面;数据库的灰度迁移等问题;
redis方面,会问为啥好,我操,遇见这种问题,我直接想拖鞋拍死他;因为他key-value结构呗,nosql库,速度快,并且里面许多好的数据结构很多场景下面非常适合;redis持久化,为作为缓存,提供可靠保障,这些特点刷题就知道;真正好不好,也许只有看源码的或者用过之前不好用的一些缓存库做个对比,才能真正体会到;缓存失效问题,如何减少缓存震荡,最常用的一致性hash没看过啊。
还用top命令时候,右上面那三个值是啥,我去,这种问题简直傻逼极致,作为一名优秀 的rd这些指标是一直关注的,不用google直接百度就一大堆,记住了这些是啥意思,就表明很了不起吗,只能说明你记性好,其他啥也说明不了;当时我就想反问他,top命令里面主要看哪几个参数,你记性好,每个参数你都讲讲。。。。
还讨论我们系统中订单的问题,遇见各种超时或者未知的响应怎么处理;我们没有什么网页http响应状态的3位数字代码(放在1年前或者2年前,我也许关心这个),我们的状态码是自己定义的从1000一直到2060的状态及其内容,定制化的接口层面的状态码(这属于场景不一样,你不能总拿你的场景下的思维方式,思考我们的问题吧);我们对这种异常的处理,分轻重缓急与客户端沟通处理的;订单状态问题,可以被动接受通知,也可以主动的拉去状态,并且里面产生的流水,是由我们公司和支付方和内容提供商三方商定确定,哪些是坏账,哪些是可忽略账单,程序上面也有相应的体现。
这些问题,都是我刚进入互联网这个圈子的时候关注的,现在只记得一个轮廓,详细的,基本都忘却了,这是实在话,临阵不磨枪,基本就这样。不过从另一方面,也说明了学尔时习之,不亦乐乎。
目前关心的是:
调用模式如epoll的触发机制 或者 nio的调用策略 ;还有就是为什么,系统或者一些模型引入了这些,明显资源的消耗降低了,cpu消耗降低了,系统整体的吞吐量能够承受的很大;还有就是Linux中引入的这些东西,减少了io和mem的占用,cpu的消耗;利用有限的cpu和内存、带宽,在保证服务稳定可靠的前提下面,使自己的系统能够承载更多的量;
推荐一篇文章讲也许不是很细,但是许多都是亲身经历过的,还是体会挺深的:
http://www.kuqin.com/shuoit/20150225/344884.html 徐汉彬:高并发Web服务的演变——节约系统内存和CPU
还有就是不停的审视,自己项目中使用到的那些设计模式,是否有更好的调整或者组合;能够达到代码整体调用逻辑的最优化,和设计的最优化;合理调整jvm参数,同时优化代码,减少 gc 频率;和jvm 中逃逸的处理。
至于算法方面,只关心世界上最快 的排序算法;还有就是解决一些算法问题的思路,数学归纳法,很值得推崇,高中数学和大学的高数总觉得没用,其实看了人家MIT教授的算法课程,学会用数学的思维去思考编程方面的问题;我觉得对于许多中国的理科生,很有启发性。因为中国的理科生,都是海量做题练出来的,底子都不错。
根据自己四五年的经验,越发的感觉这是一门 工程学,需要很多小组去协作和沟通,才能完成的一门工程;不是什么技术活(感觉它有什么牛逼的技术,那是因为你对它还不足够的了解),很多都是一种经验或者积累,见得多了,就淡然了;自己有时候还是不太淡然,甚至小激动,因为我有一颗 上进和勇敢 的心。