高级软件工程师和架构师的区别(转)
架构师
倾向于 通信 、 通信框架 、队列和 分布式框架运用以及阿里云和微软现有分布式组件的运用。
高级软件工程师
倾向于 C#基础、 多线程、锁和数据库索引 (队列和通信也会问只是会问的浅一些)
研发经理
包含高级软件工程师问的这些外,还会问管理方面的知识
我面试的三家公司分别面试了三个职位,将知识点进行了一个表格整理,分值越高就意味着问的越深,不能百度之百准确,只当参考。
职位 | C#基础 | 通信 | 缓存和队列 | 数据库索引 | 数据库锁事务 | 前端 | 多线程 | 数据结构 | 管理 | 自我介绍 | 大数据方案 | 常用框架 | 项目介绍 | 逻辑题 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
架构师 | 10 | 100 | 100 | 100 | 80 | 0 | 100 | 100 | 30 | 100 | 100 | 50 | 100 | 100 |
研发经理 | 100 | 50 | 70 | 70 | 50 | 0 | 100 | 80 | 100 | 100 | 60 | 0 | 100 | 50 |
高级软件工程师 | 100 | 50 | 70 | 100 | 100 | 50 | 100 | 50 | 0 | 100 | 70 | 100 | 100 | 60 |
知识点细讲
C#基础
主要面些 接口、装箱拆箱、值类型引用类型和线程
可以参考面试基础:http://www.codeisbug.com/Doc/4/63
例如:什么是装箱和拆箱,装箱和拆箱为什么会影响性能。这些属于深问细节,所以要做好防问准备。
通信
主要分为Http协议 TCP协基础知知识,通信框架例如开源的Supersocket RestSharp,微软的WCF和Signalr等等的运用和搭建,
更深入的会问到,例如 什么是粘包和osi七层模型等理论知识。
缓存和队列
例如redis框架使用,Redis有哪些数据类型,主从模式如何实现,常用的队列框架有哪些(RabbitMQ和MSMQ)
队列和缓存的区分是什么?非关系型数据库应用场景又是什么?
队列:适合处理高并发,可以看这篇文章理解队列作用:http://www.codeisbug.com/Ask/11/1070
非关系型数据库:适合简单业务数据亿级左右的数据处理,太多、太少或者业务复杂都不适合
缓存:缓存数据也可以当做高性能队列使用
数据库索引
数据库索引是每次面试必问之题,你要了解索引的分类,索引的存储结构,数据存储结构,如何用SQLServer分析SQL执行计划,聚集索引适用于什么场合,聚集索引和非聚集索引的区别
数据库锁事务
例如会问 数据库的隔离级别,数据库有哪些锁,可以参考:http://www.codeisbug.com/Ask/11/1079
前端
你会使用哪些前端框架,如何适应移动端布局等等,这类会问的比较少
多线程
一般会问什么情况会用多线程、LOCK底层实现,多线程性能优化等
数据结构
这个就去看数据结构与算法的书吧,例如什么是二叉树,不要不懂。
管理
一般会问如何管理好团队,去看一本项目管理的书装逼就够用了。
自我介绍
自已准备好,一般说名字 学历,工作经验,幸趣爱好等。不要太长,10句左右差不多背好去面试。
大数据方案
这个一定要了解阿里或者微软的云框架,除此之外还要知道队列如何处理大数据,分布式缓存等,例如hadoop这些名词要了解,你了解什么分布式中间组件。
常用框架
aufac底层原理,aufac有哪些使用模式,依赖注入和控制反转有什么区别,依赖注入的作用,用过哪些ORM他们各自的优点有哪些等。
项目介绍
一般会问你的项目细节,使用了哪些技术
逻辑题
这些都是用排除法的思路去做,或者结合程序算法