干开发六年了, 说长不长说短不短, 开发人员可能不是在焦虑中就是在走向焦虑的途中吧. 前些日子更新了一下简历(并未投递), 隔天收到一公司面试邀请, 想了想, 去呗, 看看外面什么情况.
面试官人不错, 可以说是面试官里的段子手. 进来就问我对公司什么想法--外面只坐着两位老兄. 呵呵.
稍作介绍不表.
问, 有没有参与从0开始的项目?
--有, 不过不多
问, 有没有参与技术选型?
--(心说技术选型? 有啥特立独行的技术可选? 因为我面的是.net开发, 那做web不就asp.net mvc, asp.net core mvc? 数据库不就sql server和mysql? 缓存不就redis和Memecached?消息队列不就rabbitmq, activemq, kafka, rocketmq?前端不就react或者vue, anglar?)
--然而我没说, 因为这玩意经不起细说, 等下你问我mysql原理了咋整?问我mysql主从复制, 读写分离了咋整? 问我redis原理了咋整?
--技术选型用的asp.net core mvc, mysql, redis, 负载均衡用的nginx, 没用到消息队列
然而技术选型真有啥了不得的理由吗? 为啥用.net不用java? 为啥非用redis不用Memecached? redis能持久化数据? 到底有多少业务是依赖于redis持久化的数据的? 心里打满问号, 至少我没碰到过, 可能经历太苍白了吧?
问, 解释一下AOP?
--面向切面编程
问, .net里有哪些方式实现AOP?
--(思索中...)asp.net里的controller上可用加filter, .net core mvc里可以用中间件(MiddleWare), C#语言层面支持的 特性 功能, 也可做到AOP
问, 还有吗?
--(思索中...)其它不了解了
面试官就举多几个例: 方法的链式调用是不是可以认为是AOP? WPF里的一个Button的点击事件, 比如鼠标点击, 都分了MouseDown, Click, MouseUp这么几个, 这是不是也是AOP? 一个操作已经切成很多块了.
问, 假设你现在是团队里的高级开发人员, 新进来两个人, 对同一个业务需求做了实现, 你怎么判断这两个人代码的好坏?
--答的太粗糙, for循环里不要查询数据库, 发起网络请求. 代码是否有一定程度的抽象
面试官对这个显然是有自己的想法的, 从以下几点考虑:
- 完成度, 是否完整的实现了业务功能, 有时候, 比如登录功能, 只做了一半, 后面没了.
- 稳定性,
- 安全性
- 维护性, 是否便于阅读, 日志打的位置对不对, 日志是否能详细说明问题?
- 扩展性
- 是否可测试
面试官对这个问题有自己的比较完整的方法, 也可能是带团队带的久了, 自然就有这种积累了? 或者确实是在自己实际工作中慢慢整理出来的? 都有可能.
问, 鉴于你近期的工作中没有太多接触到数据库, 我们稍微讨论一下数据库设计上一的个问题, 数据库主键ID, 什么时候用自增, 什么时候用GUID?
--我回答的可能不是对面想要的, 我说的是我的纠结: 自增的时候, 比如订单和订单详情, 详情表里肯定有一个外键是订单ID, 这种时候如果用自增, 那么插入的时候就要先插入订单获取订单ID, 再详情插入. 而如果用GUID, 就可以同时插入订单和详情, 不需要两次数据库交互.
面试官的想法是, 需要考虑的是不是分布式数据库, 分布式数据库的话, 就用GUID, 因为自增搞不好不同库等下生成的ID都不一样了. 另一个考虑安全性, 比如有一个通告表, 不同人的通告不同, 如果用自增ID, 那么, 在没有做别的权限控制的情况下, 是不是别人通过改url后面的ID就可以看到别人的通告了?所以这种最好用GUID. 还有一个, 比如听到外边某老板吹牛说我们平台现在注册用户好几百万了, 那如果他的用户表是用自增ID, 那我上去注册一个用户, 去我的个人中心, url后面是不是就是用户ID? 一看就知道他是不是在吹牛, 有心人可能就可以用来搞一些别的事了, 比如竞争对手在舆论上揭发你吹牛.
这里其实我可以扛一下, 那如果我自增不是从0开始呢? 然而我没有扛, 扛有啥子意义呢?
职业发展方向有木有?
--架构方向
面试官表示呵呵
面试官表示, 工作时间也不算短了, 平常工作中有没有积累? 能不能形成自己的想法对外输出? 具体的就是能不能以类似PPT的形式提供解决方案, 阐述自己解决方案中的设计思想, 每个细节是为了解决什么痛点, 难点. 比如, 这里要用缓存, 那为什么要用缓存, 给业务带来了什么好处, 哪一端在读缓存哪一端在写缓存?
核心: 对外输出自己的思想是往上走的必要技能, 不管是架构也好, 管理也罢.
以上是记得的大概内容.
讲真, 每天写业务代码的, 确实没有那么多需要去了解那么多, 也没有人要求你输出什么想法给别人, 没有人要求自己, 自己也不要求自己, 过些年, 是不是会越来越难?