如今是个人人争相奔跑前进的时代,没人不希望更上一层楼,就编程而言,都希望到一流互联网公司去一显身手。
但是,跃跃欲试的大多数绝对会在面试中败兴而归,比如他们会碰到如下问题:
......
Java方面看过哪些源码?线程池用过吗?有哪些参数?拒绝策略是?
Redis,如果RDB和AOF同时开启,默认使用哪种方式恢复?为什么?
背一下网络模型,http在那一层,tcp在哪一层?tcp有什么特性,怎么保证可靠性?
CountDownLatch在底层是如何实现的?
你们的项目是如何分表分库的?
进行过JVM调优吗?
......
问题不一而足,但整体上都显得高端,像是问车工机床是怎么设计的为什么这样设计,或是问司机汽车的刹车系统是怎么设计的,其刁钻多令准备不足的面试者冒冷汗。
面试者除了应届生,大多都是在一线摸爬滚打多年才敢向顶流公司投简历的,但他们大多在一面就铩羽而归呢?看看他们日常做得多的就知道原委了:
配置是照着官方文档来的,80%没问题,还有20%可以通过询问同事或是在网上找到;
大多数软件如Redis、Mq、NoSQL都有专人配,他们知道怎么用就好;
一部分主要日常业务是从控制器到SQL语句的通达任务,这种任务是程式化、缺少变化而又乏味的,加上配套的PostMan和Junit测试,那更是乏味。但由于这是业务主要通道,是要保证一丝不苟的。所以担当者即使知道干这样的活一个月和干十年,在技术水平上没有实质性的提升,他也得干得让人挑不出毛病。但一个人即使毫无差错的干了十年,他也没脸在简历里写这个,只会去写一堆所谓技术名词。
另一部分日常业务是数据的合法性检验,除了正则式能解决的之外,大多数是业务数据检查,这需要理顺业务规则。这种事情很耗时耗力,但在面试中几乎不能作为谈资,因为技术含量确实不高。
第三部分日常也是是图表和报表,这两种东西需要的数据量大,程序员经常是各种查,各种拼接和各种组合,好似复杂,但底层还是SQL+基本数据结构+基本几何运算,也不大能端上台面。
再就是不断的沟通和业务上无端的探索修改,这也颇耗精力心血,有时真感觉是命运对生命的无情播弄,面试官能爱听这个?
别人经历我不知道,就我个人所见而言,程序员四大日常活动尽皆在此,不出其外。因此我以前有个论断,就是一个实现了基本功能的游戏,其内部编程技巧,也远高于大多数Web应用。这句实话还不能和面试官提,这帮人自负的很,又喜欢滥用手中权力,感觉被鄙视了立马就让你的面试泡汤。
虽然这些日常事务很累很苦,也常加班,但本质上是低技术水平下的多次重复,在面试中可能可以博得同情,但不会得到欣赏。
有些程序员从面试中得到教训,于是买书看刷题练手,能好一些,但接下来的障碍就出现了:
你缺乏互联网的实际经验!
就因为你日常业务吞吐量不大,你接触不到面试官提到的哪些问题的实用场景,因此对他们的问题表现得很懵逼......
不知其他人怎么样,我当时感觉大脑一震,觉得面试要完!果然完了之后,冷静下来想一想,发现不进去就没有亲身体验,但没有真实体验就不让你进去,你陷入了两难境地。
从这一点上来说,程序员要不断上升也不容易,有些东西不是个人投时间投钱能解决得了的。
当然解决办法也有,首先可以曲线救国,即进不了淘宝,可以进比淘宝业务量小一个数量级的练手,不行再小一个数量级,踏实地一步步来;其次是成为特定领的专家,虽然这个也会遇到实操的瓶颈,但至少可以做到纸上谈兵不被刁难住;其三精通C,能拿他做通用软件,比如Redis,Ngix之类,这事一成收益是很大的,但也有很大可能是幸存者偏差。目前我能想到的就是这些。
如今是个人人争相奔跑前进的时代,你想歇歇都会有股无形的力量在背后推着你走,如果碰壁了,迷茫了,想想自己的人生规划也好。
END