顺丰(软件研发工程师)面经
一面 9.20 40min
- 自我介绍
- C/C++的区别
- static的作用
- 抽象类和接口的区别
java中:
含有abstract修饰符的class即为抽象类,abstract 类不能创建实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。 - 抽象类可以实例化吗?
抽象类不能直接通过new去实例化一个对象,那它就是不能实例化,要获取抽象类的对象, 需要先用一个类继承抽象类, 然后去实例化子类。也可以用匿名内部类,在抽象类中创建一个匿名的子类,继承抽象类,通过特殊的语法实例化子类的对象 。 - malloc/new区别
- 空指针、垂悬指针、野指针的区别
- 手撕:1-9全排列
- 堆和栈的区别(内存中和数据结构中)
- 堆排序算法/时间复杂度
- 怎么判断单向链表有没有环
快慢指针(答的不好) - 怎么找出单向链表的中间结点
快慢指针 - 了解跳表吗?
不晓得。。。
注:跳表的原理非常简单,跳表其实就是一种可以进行二分查找的有序链表。
增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。
跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。首先在最高级索引上查找最后一个小于当前查找元素的位置,然后再跳到次高级索引继续查找,直到跳到最底层为止,这时候十分接近要查找的元素的位置了(如果查找元素存在的话)。由于根据索引可以一次跳过多个元素,所以跳查找的查找速度也就变快了。
跳表中的搜索、插入、删除操作的时间均为O(logn),然而,最坏情况下时间复杂性却变成O(n)。相比之下,在一个有序数组或链表中进行插入/删除操作的时间为O(n),最坏情况下为O(n)。 - 常用的排序算法/快排复杂度
- TCP/UDP的区别
- 用到UDP的协议
- HTTP输入URL后的过程
- HTTP和HTTPS的区别、端口分别是多少
- 用过数据库吗?了解三大范式吗?
- 能简单说一下事务吗?
- 反问:主要业务和语言
二面 9.22 45min
emmm...小哥很温柔,我的C++他听不懂,他的数据库我听不懂,但还是尬聊45min......
- 自我介绍
- 了解高并发、多线程吗?
- 之前做过web相关的项目吗?
- 将聊天服务器的项目扩展为聊天室,怎么将一个用户加入/删除聊天室?怎么维护一个用户的好友?
说到了双向队列,哈希表(借用LRU的实现,绝了) - 手撕:判断两个二叉树是否相同
- 手撕:将一个整数转换为二进制,字符串输出
- 事务了解吗?
- 怎么做到一个外面的操作会影响里面的,里面的不影响外面的?
将之前的状态做记录,如果出了故障,则回滚(没听过......) - 反问
- 建议:要扩充知识的广度,不管什么岗位,数据库应该都会用到
三面 9.27 30min
- 为什么转行?
- 对第一份工作的公司/行业/平台/背景有什么想法?
- 介绍一个项目:背景/负责的任务/完成的方式
- 软件部分的呈现是什么形式?
- 为什么用MFC?
- 会觉得和前沿技术脱节吗?
- 对未来3年的规划?
- 开放性问题:双十一单量剧增,平时送货小哥是饱和的,你会如何改善这个情况?
增派新手;加薪;增加调度 - 成长最大的事?最有挫败感的事?
- 反问:业务
同城物流(外卖),供应链,新零售,蓝领的灵活用工,智慧经营
语言:java,go