这次面试上来就给我甩了3道算法题给我整懵了,果然平时还是要多刷几道算法题。。。
1、判断一个int是否为回文数,回文数定义为首位置和末尾一样,如1234321,123321,要求10分钟内完成。
2、判断二叉树是否为平衡二叉树,要求10分钟内完成。
3、请实现LRU缓存类,要求10分钟内完成。
4、有64匹马,一个赛场 8个跑道, 要比赛决出前4名,问充分必要条件最少需要多少场?
这边文章讲的很清晰,感谢博主:64匹马,8个赛道,找出前4名最少比赛多少场? 做题的时候思路不清晰,在剩下9匹马的时候想不明白,没有分类讨论。
5、如何判断两个链表是否重合?
说实话对于这个问题不是特别理解,如果是相交就比较好判断,重合的话除了一个个结点比较我没想到更优的解法。
6、MySQL中的主从同步,外连接和内连接的区别,group by的作用?
1、主从同步
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行(MySQL的默认同步方式)的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
2、外连接和内连接的区别
具体可看这篇文章:Mysql的左外连接丶右外连接与内连接的区别
- 内连接,显示两个表中有联系的所有数据;
- 左外连接,以左表为参照,显示所有数据;
- 右外连接,以右表为参照显示数据;
3、group by的作用
写得很详细的文章:MySQL中group by的作用
7、SQL语句:查找一个表中某一列最大的值。
select max(列名)from 表名
8、快速排序的时间复杂度以及好处
快速排序的平均时间复杂度为O(n log n),它的好处是原地排序(只需要一个很小的辅助栈),也被称为性能最好的排序算法。这里上篇关于快速排序和堆排序的比较的文章:为什么说快速排序是性能最好的排序算法?
9、TCP和UDP的基本区别?TCP如何做到可靠传输?TCP的拥塞控制?
TCP和UDP的区别:
- 基于连接与无连接
TCP面向连接,在发送数据前需要通过三次握手建立连接,而UDP是无连接的,所以不用建立连接。 - TCP较UDP更可靠
TCP提供可靠的服务,也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按顺序到达;UDP尽最大努力交付,不保证可靠交付。 - 流模式与数据报模式
TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,UDP是面向报文的,并且,UDP没有拥塞控制,因此网络拥塞不会使源主机的发送速率降低(对实时应用很是有用,如IP电话,实时视频会议等) - 开销与资源的使用
TCP首部开销20字节,UDP的首部开销小,只有8个字节。并且,TCP要求的资源较多。 - 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
- TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
TCP如何做到可靠传输?TCP的拥塞控制?
实在是太菜了,多学学人家:TCP如何做到可靠传输?拥塞控制:当网络拥塞时,减少数据的发送。发送方有拥塞窗口,发送数据前比对接收方发过来的即时窗口,取小,以控制发送方的速率,最终达到降低整个网络的拥塞程度。而TCP主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
10、三次握手和四次挥手?其中客户端经过几次状态的变化?
11、redis有几种数据类型?分别是什么?
redis存储的是:Key,Value格式的数据,其中Key都是字符串,而Value有5种不同的数据结构,分别是String、hash、list、set和sortedset。
关于面试官对后端开发学习的建议:
1、Linux一定要学好。
2、网络编程要学好,经典的书籍要看。
3、TCP/IP,卷一,卷二,卷三。
4、多学习开源项目,可以帮助你迅速提升。
5、学一个东西应该要先会用,然后再去深究细节。