那天我投了鹅厂 (春招实习生)
第二天收到面试邀请,下午17点开始
准备了一天,结果我突击的知识点 就没用上三个
然后就可想而知了,第一次面试,咱也没经验.导致我已经一个月不敢投简历了
面试官挺好的,主要是自己太菜了哎
(英语渣渣)
开始吧!
上传一份自己的简历
开始,先自我介绍一下吧!
吧啦吧啦巴拉
为什么想来深圳!
吧啦吧啦吧
平时有什么兴趣爱好!
看书和运动
看什么书呢?
比如文学类的,名著,专业技能等,最近在看的是 <Java并发编程之美>
(盲猜这个时候面试官在看我的简历)
看这本有什么收获呢?
比较晦涩难懂,同时也来拓了眼界
能具体来说说吗?,哪里晦涩难懂?,你是怎么弄懂的呢?
(总结可得,当面试官问你的时候你应该答的全面,而且具体,最好举例子,不要像这次一样问一点,答一点)
当时紧张的一批,哪还记得这些东西,慌得感觉手都是抖的
吧啦吧啦吧拉巴拉
好的,大概了解了,那我们开始正式的聊吧!
1 . 你对c++了解多少,来说说你对面向对象的理解?
我认识的c++是大一的时候的入门课程,了解的并不深入
- 面向对象是将现实中很多具体的事物进行抽象化,提取出共有的属性和行为进行封装使用的一种方式,是相对于面向过程而言的
面向过程与面向对象的区别:
来自百度百科
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 [2]
可以拿生活中的实例来理解面向过程与面向对象,例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。 [2]
如果是面向对象的设计思想来解决问题。面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。 [2]
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。
2 . 来说说java中的面向对象的特征:
(应该在上面回答的时候就带上外加每个特征的解释)
封装,继承,多态.
-
封装: 是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象调用,对不可信的类或者对象进行信息隐藏。
-
继承: java只支持单继承(可以使用继承多个接口进行实现),C++才支持多继承(面试官可能是C++工程师,我答单继承,他重复问了两遍)它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。子类拥有父类的所有功能,同时可以拥有自己的特色功能.
-
多态: 是同一个行为具有多个不同表现形式或形态的能力。比如龙生九子,各不相同,就是多种形态了,即不同子类实现父类的核心代码不同,但是形参和名称必须相同
3 .来说说Hashmap你了解多少? ( 貌似面试 必问 开门题 )
- hashmap是由entry数组+链表+红黑树 组成的结构,每一个entry中都包含一个k-v的键值对,链表的作用是用来解决hash冲突的(hash冲突指的是:把当前元素的关键字 通过某个函数(这个函数就是hash函数)映射到数组中的某个位置,通过数组下标一次定位就可完成操作,但是当两个不同的元素通过hash算法万一的到两个相同的,地址就产生了hash冲突),当产生hash冲突后则将插入的数据放到对应的数组下的链表中,当链表的长度超过8的时候就将链表转化为红黑树,利用的是红黑树快速增删改查的特点提高HashMap的性能
4 .HashMap是线程安全的吗?(后面问,怎么变成线程安全的?)
- hashmap不是线程安全的,如果想用线程安全的可以使用
1.ConcurrentHashMap(抗卡润特hashmap)使用分段式锁(不了解,不建议说)来实现线程安全,只锁住需要修改的部分
2.使用Collections(抗来客醒)类的synchronizedMap(省课赖得Map)方法包装一下,返回的是map对象了,但是是线程安全的了,
Map map =Collections.synchronizedMap(new HashMap());
5 .可以说说红黑树吗?有什么特点?使用场景是什么?(我就说了四个基本特征,百度居然是五个 /ll ,其他的问的我就不会了,我感觉问了hashmap 你肯定会带出红黑树,肯定也会问了喽)
- 节点是红色或黑色。
- 根是黑色。
- 所有叶子都是黑色(叶子是NIL节点)。
- 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
- 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点(简称黑高)。
6 .数据结构会哪几种?( 我 … )
7 .那你再说说红黑树与B+树的区别?(后面又问为什么数据库要用B+树)
- 上链接吧红黑树与B+树
- B+树是适应文件系统而产生的数据结构,只有叶子节点存储数据,就像在win打开一个文件一样的结构所有的父节点都是存储路径的作用.
- B+树只需要去遍历叶子节点就可以实现整棵树的遍历.而且在数据库中基于范围的查询是非常频繁的,而B树不支持这样的操作
到这基础问题算是问完了,然而我 答的最多的就是我不会,不知道,忘记了.
可惜可惜我的鹅厂啊,过几天去投小米和阿里.哎
我感觉他的问题应该是按照什么标准来问的
盲猜 : 自我介绍 + 基础知识 + java基础 + 数据结构 + 算法 + 网络协议问题 + 简历中的项目问题 + 简历中提到的了解的知识 + 其他学习的东西 + 是否参与XX开源项目 + 浏览什么网页(干什么) + 你还有什么要问我的吗? + 下一位
休闲娱乐一下:在电脑上QQ聊天使用 /ll 就会出现流泪的表情,有兴趣的可以去表情包里看看相应的快捷键的输入方式是啥!