总体来讲,这次跳槽不算成功,未及我的预期目标(年薪XX万+
¥),仍需继续努力,发奋图强!
最最最重要的还是经典算法、算法复杂度和Leetcode算法题。
- 仔细想想,也与年初制定的看书学习计划执行不力有关,当时是这么想的:
工作时间学习:Angular7 / MySQL高可用常见的运维内容,业余时间学习:架构,Go,算法,DB,协议,每月主要攻一个主题,不拖泥带水,六月初端午节后开始出去面试,七月底之前定好新司
- 到六月份,发现上面要学的内容几乎都无所进展,于是想当然地认为自己可以胜任“全栈工程师”的角色,当时是这么想的:
前端各框架类库(js,typescript,Angular2,React,Bootstrap4)的熟练运用,rxjs响应式编程 后端各种编程语言技术框架(Python,Django,Tornado,Java,SpringBoot,Golang等)的熟悉和快速上手 数据库原理的熟悉,常用的分布式、高可用架构
- 七月初在匆忙改好CV,还啥都没准备的情况下就出去面试,由于基础不扎实+没有针对性地准备面试题,碰了一鼻子灰,然后连续三四周不断地碰壁,比如下列简单的问题都答得不好:
Python里的字典是怎么实现的,hash碰撞怎么处理的 如何获取一个对象的所有属性和方法 Python里的有序字典实现方式,3.5之后字典是有序的? Python的作用域 MySQL的架构原理,分页,分库分表,如何查询某条记录,SQL查询Groupby,Having SQL是怎么执行的 操作系统,Linux下面的kill是怎么实现的 网络分层,每一层有哪些协议,TCP/IP Https是怎么实现的,怎么建立连接的 Http2有哪些新的东西 携程的数据库是怎么做监控的,读写性能、数据库死活等等 CMDB 工作几年里遇到过哪些难题,我是怎么解决的? 我有哪些亮点,特别擅长精通的领域? 正则表达式 MySQL慢查询怎么去优化,服务变慢了怎么去排查的,举一两个例子 申请DB是怎么部署到集群,具体都做了哪些事情 业务量大了之后分库分表是怎么去分的,怎么去不停机扩容 session的实现原理 cors怎么处理跨域问题 tcp三次握手四次挥手 Python装饰器 快速排序,归并排序 B+树如何实现索引的,联合索引 如何优化索引 Peewee等ORM框架的懒执行 Django框架的middleware Rabbitmq常见面试题 怎么排查慢查询 事务隔离级别 docker常见够用教程 知乎上头条面经面试题 长链转短链面试题全面剖析 常见系统设计题 rabbitmq是怎么保证消息被成功接收的 限流,熔断和降级分别是什么意思 数据库的几种范式 常见的外键约束 Python3的asyncio的事件循环eventloop的原理,Select,Poll,Epoll等等 怎么优化复制延迟的 B树,B+树和红黑树的区别 资产,角色是怎么管理的 携程在用哪些消息中间件 关系型数据库,非关系型数据库和NewSQL的区别和适用场景 Java里的hashmap底层实现的数据结构 Java的内存泄露,垃圾回收的是内存的哪一块 TCP和UDP协议的区别,TCP有哪些机制来保证可靠传输 操作系统得内核空间和用户空间是怎么划分的 快速排序的时间复杂度,最差的情况是啥样的 一亿个数里取前100个最大的数,时间复杂度 Java里的乐观锁悲观锁 设计模式里的代理 时间复杂度和空间复杂度 数据库连接池的实现原理 Innodb和MyIsam存储引擎本质上的区别,索引的走向 Redis相关比较深入的问题 RabbitMQ,Kafka等消息队列比较深入的问题 并发编程里,控制并发访问Hashmap加锁有什么问题,除此之外还有什么更好的解决方法 时间复杂度,斐波那契数列递归实现的时间复杂度,有没有线性复杂度的实现 日常使用的开源软件的源码有哪些研究 Java编译器和Python解释器转换到字节码和机器码的细节区别 做得比较好的项目介绍 对Spring的深入了解 在日常工作中遇到过哪些问题,然后是怎么研读源码解决的 对分布式系统的了解,跨数据中心的延迟多大,怎么应对 分库分表是怎么随着业务量需求的增大来进行拆分的
-
很显然,上面这些问题并不难,只要
好好用心准备
+平时多看几本技术书
+多研读常用组件的源码
,再把算法题刷一刷,这些面试绝大部分都可以拿下 - 后来一个周六,在去参加阿里巴巴中间件团队组织的Dubbo开源大会结束的那天下午,无意中面试了我司“通群科技”,刚起步做工业互联网的创业公司,面试过程虽然未涉及什么技术问题,但感觉还不错,几个老板也都很有诚意,遂决定加入进来,一起奋斗下去。那天听完Dubbo的几个演讲,还想业余时间做以下事情:
学习查看Apache Druid的架构源码,来提供Influxdb的集群方案,优化方案 Zookeeper的学习应用 参加dubbo-go项目的开发 网关是用来做什么的,系统地学习一下+Nginx
-
九月中要离开携程数据库团队时,公司IT部门在推全球化DRC方案(多master,多数据中心),需要分割流量(比如按UID进行分割),确保数据同步时不冲突。感觉这也是目前大公司的技术趋势,值得关注。还有分布式数据库的方案,例如TiDB,精读TiDB设计文档和源码,了解底层机制的话,未来也不愁没饭吃。
- (小插曲)SAP也在我司目前所在的浦东软件园,之前和他们那一个搞Kubernetes源码研发的Boss聊了聊,也好有兴趣去他们那儿捣鼓Kubernetes源码级的事情,而且他们年假有20天,如果能拿个年薪40万+,还不用加班的话,那也是一份美差了,这是他们当时的JD:
研发基于Kubernetes的CI/CD Pipeline,更好的为应用开发团队服务 对接AWS/GCP云接口,为应用开发团队提供数据库、缓存、云存储等服务 保障以Kubernetes为核心的基础设施平台高可用性,及时修复问题 与应用开发团队成员合作,整体联调系统 给应用开发团队传授原生云技术 此职位要求的技能包括但不限于, 良好的英语阅读及沟通能力 扎实的计算机基础,比如数据结构和算法 熟悉Kubernetes及其周边功能,并能对其二次开发 熟悉Golang 熟悉CI/CD 对微服务有深入认识和理解,如stateless,HA,resilience,service discovery,scalibility,security等 熟悉Linux开发环境 熟悉AWS/GCP优先 熟悉Kubernetes Operator模式优先