博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次失败的面试
阅读量:4979 次
发布时间:2019-06-12

本文共 2156 字,大约阅读时间需要 7 分钟。

干开发六年了, 说长不长说短不短, 开发人员可能不是在焦虑中就是在走向焦虑的途中吧. 前些日子更新了一下简历(并未投递), 隔天收到一公司面试邀请, 想了想, 去呗, 看看外面什么情况.

面试官人不错, 可以说是面试官里的段子手. 进来就问我对公司什么想法--外面只坐着两位老兄. 呵呵.

稍作介绍不表.

问, 有没有参与从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循环里不要查询数据库, 发起网络请求. 代码是否有一定程度的抽象

面试官对这个显然是有自己的想法的, 从以下几点考虑:

  1. 完成度, 是否完整的实现了业务功能, 有时候, 比如登录功能, 只做了一半, 后面没了.
  2. 稳定性,
  3. 安全性
  4. 维护性, 是否便于阅读, 日志打的位置对不对, 日志是否能详细说明问题?
  5. 扩展性
  6. 是否可测试

面试官对这个问题有自己的比较完整的方法, 也可能是带团队带的久了, 自然就有这种积累了? 或者确实是在自己实际工作中慢慢整理出来的? 都有可能.

问, 鉴于你近期的工作中没有太多接触到数据库, 我们稍微讨论一下数据库设计上一的个问题, 数据库主键ID, 什么时候用自增, 什么时候用GUID?

--我回答的可能不是对面想要的, 我说的是我的纠结: 自增的时候, 比如订单和订单详情, 详情表里肯定有一个外键是订单ID, 这种时候如果用自增, 那么插入的时候就要先插入订单获取订单ID, 再详情插入. 而如果用GUID, 就可以同时插入订单和详情, 不需要两次数据库交互.

面试官的想法是, 需要考虑的是不是分布式数据库, 分布式数据库的话, 就用GUID, 因为自增搞不好不同库等下生成的ID都不一样了. 另一个考虑安全性, 比如有一个通告表, 不同人的通告不同, 如果用自增ID, 那么, 在没有做别的权限控制的情况下, 是不是别人通过改url后面的ID就可以看到别人的通告了?所以这种最好用GUID. 还有一个, 比如听到外边某老板吹牛说我们平台现在注册用户好几百万了, 那如果他的用户表是用自增ID, 那我上去注册一个用户, 去我的个人中心, url后面是不是就是用户ID? 一看就知道他是不是在吹牛, 有心人可能就可以用来搞一些别的事了, 比如竞争对手在舆论上揭发你吹牛.

这里其实我可以扛一下, 那如果我自增不是从0开始呢? 然而我没有扛, 扛有啥子意义呢?

职业发展方向有木有?

--架构方向

面试官表示呵呵

面试官表示, 工作时间也不算短了, 平常工作中有没有积累? 能不能形成自己的想法对外输出? 具体的就是能不能以类似PPT的形式提供解决方案, 阐述自己解决方案中的设计思想, 每个细节是为了解决什么痛点, 难点. 比如, 这里要用缓存, 那为什么要用缓存, 给业务带来了什么好处, 哪一端在读缓存哪一端在写缓存?

核心: 对外输出自己的思想是往上走的必要技能, 不管是架构也好, 管理也罢.

 

以上是记得的大概内容.

讲真, 每天写业务代码的, 确实没有那么多需要去了解那么多, 也没有人要求你输出什么想法给别人, 没有人要求自己, 自己也不要求自己, 过些年, 是不是会越来越难?

 

转载于:https://www.cnblogs.com/lihan829/p/11137692.html

你可能感兴趣的文章
第六周作业
查看>>
Linux SVN迁移备份的三种方法
查看>>
SpringBoot 配置rabbitmq
查看>>
看书买书
查看>>
团队博客
查看>>
第二章:笛卡尔坐标系统
查看>>
一个用纯CSS实现的下拉菜单
查看>>
【leetcode】 Unique Binary Search Trees II (middle)☆
查看>>
Thinking In Java持有对象阅读记录
查看>>
如何使用Zend Studio配置连接SVN功能
查看>>
GCC选项
查看>>
json拼接含字符串变量的问题
查看>>
前端自动化构建工具 Webpack——3 webpack配置文件的使用
查看>>
MySql入门
查看>>
CSS基础——添加样式
查看>>
浅谈多态机制的意义及实现
查看>>
Oracle数据库添加用户
查看>>
HDOJ 1247 -- Hat Words Trie
查看>>
protobuf 测试 & Makefile example
查看>>
数组排序 和 二分法查找
查看>>