讲一下你学的专业课?
计算机专业的 5 门核心课:数据结构、计算机网络、操作系统、计算机组成原理、数据库,以及软件工程的核心课:软件工程导论、UML,编程语言:C# 系列等
讲一下你了解的设计模式?
单例模式、工厂模式、装饰者模式、代理模式、原型模式、建筑者模式 —— 不清楚的概念不要说
解释一下装饰器模式?
从定义上来说:装饰器是动态的将新的功能添加到对象上。
通常由四个角色:被装饰者/主体(Component)、装饰者(Decorator)、具体主体(ConcreteComponent)、具体装饰者(ConcreteDecorator)。
装饰者和被装饰者为 抽象类,在装饰者与被装饰者为 聚合 关系。在装饰者实现类中我们可以对被装饰者/主体 的方法进行 装饰(包装成我们想要的具体方法)
解释一下软件工程中的耦合?
不同功能模块写在一起,导致某处出现问题时整块代码受影响。
讲一下你学习的编程语言?
C、C#、Java、JavaScript 等。
解释一下面向对象的语言的特点?
封装 —— 封装具体实现的细节,只对外提供必要的接口。
继承 —— 对于公有的特性可以抽象成父类,子类可以继承父类的属性和方法,提高了代码重用性
多态 —— 子类可以重写父类的方法,对于同一个父类方法,不同的子类可以有不同的实现。
快速排序的原理?
快速排序也是分治算法的一种体现,但是是自顶向下的。我们每次默认最末尾数(其他数也可,放置末尾即可)为当前排序数据的中间值,将大于它的放在右边,将小于放在它左边,最后将中间值放置中间。
当左右分好,再将左右也分区排序重复这一步骤,直到最后区间为 1 时左右都为有序,快速排序完成。—— 实际上是改造后的插入排序
解释一下索引?
数据库提高快速查询数据的一种技术。替代原有低效的遍历查询
根据数据库底层数据结构来划分有两种索引:
- 哈希索引。底层数据结构为「哈希表」,可以在常数级时间查询数据,但是不适用于数据大量重复的字段。 —— 同一个索引值,只会对应一条数据
- B树索引。底层数据结构为「B+ 树」,支持区间查询,但是查询效率相比 哈希索引 略低。是 MySQL 数据库中默认的索引方式。
编程学习中遇见的问题如何解决?
如果是一项新技术,会先在豆瓣上看一下有哪些好评比较高的书,去阅读进行系统性的学习。
日常遇见的问题也会在 StackOverflow、优快云 或者 掘金 等网站上查找对应的解决方案。
具体实现问题,会在 GitHub 以及相关社区查看对应的源码和帖子。
对于移动开发的看法——安卓和 IOS?
前端框架的不断发展,跨平台能力不断加强,同一个项目 web 只需要开发一个版本,而 安卓和 IOS 需要开发多个版本,应该会更偏向于 web 开发。
公司的开发需要的主要是业务代码,而你希望的是更深入的技术,你如何看待这个问题?
先完成公司业务代码,个人技术的深入学习可以在工作之余选好有兴趣的方法进行研究,而且一家成熟的公司,对于员工的技术发展肯定有所考虑。
对于未来几年的职业规划?
向 web 后端深入学习,希望能够成为一名合格的全栈工程师
还有什么要问的?
鉴于我今天的表现,如果后面有机会和师兄你一起工作这段时间可以准备一些什么。
总结
结合上一次的 电话一面 可以看出电话面主要考察的还是简历上所罗列的知识,所以在投递简历时 一定要将你的技术栈写详细,引导你的面试官向你所熟悉的方面提问。
而校招中考察的不仅有你 对基础知识的掌握 更有你对自己 个人职业规划 的思考。思考清楚 为什么要选择这个岗位/职业?在 3-5 年的工作后你希望成长到怎样的高度。
扎实的技术才是面试收获心仪 offer 的不二法门,你可以欺骗别人,但欺骗不了自己,加油!