后台开发面试题整理

编程题目

数据库索引

基本的算法 几个排序的时间复杂度 

项目经历好好准备一下怎么说(看一下)1

改简历 。 2!!!!! 

一遍笔记 。 然后实现排序 。 然后基本的平衡二叉树 epoll select B树 B+ 树 红黑树 的实现

准备socket 多线程 文件流相关的东西 看相关程序

关系型数据库

数据库各种键的概念

MFC实现媒体播放器???看看

Linux相关 

扫描二维码关注公众号,回复: 5819164 查看本文章

设计模式

http协议相关

看项目!!!肯定会问

地址解析过程,dns解析过程

epoll select

B树 B+ 树 红黑树 的实现

各种设计模式

组合索引相关

共享内存的底层是如何实现的,这个没看过,答了一下同步互斥的问题,好像面试官不太满意 

多线程 socket通信 。 多种排序 hashmap与map http协议相关

平衡二叉树AVL 实现尤其是插入删除

直接写让我手写B树。然后手了一个红黑树的构造和归并排序。(归并排序需要考虑全面一点。有边界测试,错误测试,和内存泄漏。)

看一下笔试的题目 3

自己写一下深度优先遍历和广度优先遍历

五层模型每层的叫法以及每层的协议 4

大概过一下之前的面试题目5

剩下的时间开始看算法 。 各种算法 先看BAT的链表,二叉树,字符串 。。。

问了文件系统。

堆排序

希尔排序

重现基本的算法(最后的基数排序还不清楚 这个最后再说 其他的都要实现一下)

数据库差集都是啥

5、select、poll和epoll。

java中整形与字符串的转化 https://www.cnblogs.com/shootercheng/p/6022411.html

归并 

反转二叉树

B+树 与B树的区别 红黑树 平衡二叉树概念

1、链表判断环路和查找连接点;

2、两个栈实现队列,

如何实现多线程并发;

修饰符的作用范围

3、两个串任意合并是否可以成为第三个串。

手写代码,判断两个树时候相同(结构相同,内容相同)

1、linux内核态和用户态,为什么要这么分

2、多重继承为什么会含有多个虚表指针而不是一个?

3、tcp和udp的区别,tcp是怎么做错误处理的?

4、读文件时系统和硬盘会做哪些工作。

const指针常量

知道cookie和session的区别吗?

服务器端接收代码

IO阻塞 同步异步

画出进程的状态转换图

进程间通信的方式。

内核态和用户态的区别

你都知道哪些设计模式?

1、谈项目细节,问的比较深,改进什么的,多并发一类处理,总之往大数据上靠,你怎么解决。

2、写两段代码,一个是打印九九乘法表(简单,主要考代码风格吧),另一个是socket服务端接收代码(这个写的不好,主要考IO阻塞的、问了同步异步)。

3、

4、主要三个服务器方面的问题:

a.从接收包,解包,提内容,存数据库期间会出现哪些异常,怎么解

b.服务器宕机,为什么客户端还是可以工作,实现模型(加额外路由器进行管理);

c.怎么实现多服务器负载均衡。

简答 一共就四道大题:

(1)有一个 vector 容器中,存有 1 亿个 qq 号(不重复),如何快速挑选出其中奇数号码?(Hash)

还有快排和堆排序的原理,接着问,对100w个数据排序的 话,选出最大100个,哪种快些?

Linux递归删除 文件目录的代码实现

int转型为double static_cast

怎么不用循环知道一个数是不是2的n次方?

TIME_WAIT的什么时候出现及其作用

主动断开的一方接收到对端的FIN就进入TIME_WAIT状态

作用:可靠断开,让老的重复的报文段在网络中过期失效,这样在建立的新连接时将不在接受它们

一个有n个数的数组中的数的范围为[1, n],其中有且仅有一个数有重复,找出那个数?

刚开始理解错题目,所以浪费了一些时间,之后经过面试官提醒,纠正了错误。

输入一个十进制数,输出一个二进制数

作者:bieliwoen

数据库了不了解,我说不是很了解,然后就给我出了一道SQL语句的题。。。

有三个表,table_a、table_b、table_c,每个表都有一个相同的字段query,

找出其中该字段在table_c出现但是其他两个表都没有出现的?(一脸懵逼……早知道就说不了解好了)

简单说一下范式是什么?

开放性题目:1000个苹果,10个篮子,怎么装才能给定任意一个数,然后用篮子组合成那个数?

1,2,4,8,16,32,64,128,256,489

STL中如何进行内存管理的。

Linux进程间的通信方式。

请说下数据库中事物的特征。

数据库索引有几种类别

HTTP返回码你知道哪些?

虚函数原理

慢重传/拥塞

TCP四次分手

Map 底层构成

 比较两个字符串是否有相同字符

准备校招应该需要认证准备一段时间包括锻炼手写代码能力,熟悉常见的数据结构和算法,完成一些算法题目(刷Leetcode),

特别是动态规划题目

排序的稳定性是什么,什么样的排序是稳定的?

对C++的学习掌握情况怎样?

一个C++程序从编译到运行都经历了哪些阶段?

C++的特点是什么?

C++多态是怎么实现的?

static和const关键字是干什么的?

举例自己熟悉的设计模式,并且解释观察者模式

设计模式在平时应用的情况

tcp udp位于什么层,有什么区别?

linux命令的举例  

一个32位机器上linux进程最大可以申请多少空间?

大端法和小端法指的是什么?在纸上写一个程序进行验证

对java和mysql的询问

C++、设计模式、操作系统、组成原理、Linux、计算机网络

 Map 底层构成

 算法题三个要求时间复杂度最低

  A:  比较两个字符串是否有相同字符

 B:数组里面的子数组含有正数和负数 求子数组和的最大值

关系数据设计。

数据库索引

平衡树的原理是什么

https://blog.csdn.net/fdssdfdsf/article/details/7983861

2、Linux下如何查看网络中服务器状态?

、Linux下TCP服务器都有什么状态?

4、Linux下TIME_WAIT和CLOSE_WAIT区别是什么?

5、知道epoll和select吗?

6、创建一个TCP服务器的步骤是什么?

7、端口是干什么用的?

8、知道哪些排序算法,说一下时间复杂度,快速排序什么情况下时间复杂度最高?

图中的最短路径问题怎么求、迪杰斯特拉算法和弗洛伊德算法的区别有哪些?

0、B树和B+树的区别有哪些?

11、操作系统中的PV操作是做什么用的,能否举个例子?

1、c++虚函数和纯虚函数有什么区别,分别应用在什么场合?

2、子类析构会调用父类的析构函数吗?执行顺序是什么?

3、程序的内存分布。

4、知不知道桶排序和希尔排序,希尔排序和快速排序区别。

5、画出TCP的三次握手,为什么一定要三次,两次会有什么后果?

6、SQL语句,查询两个数据库表中ID相同的信息。

7、STL用过吗?

map和hashmap的区别,查找的时间复杂度分别是多少?

8、手写两道算法题:二分查找和一个很简单的二维数组搜索。

9、场景题:现在要完成一个微博评论的部分,想在用户进入新闻时优先看到自己好友对此新闻的评论,好友可能有多条评论,怎么设计结构。

1、代码在内存中的分布都有哪些区,宏定义存在刚才你说的哪个区域?

堆栈有什么区别啊,堆中的数据会回收吗,malloc和new有什么区别?

2、说一下虚函数表是什么(C++后台开发必问),为什么析构函数都是虚函数,不这样会怎么样?

3、多态和重载都是什么?

4、知不知道现在C++现在发行到那个版本了?C++11有哪些新特性?

5、算法题问了三个,100万数据找top k,判断一个数是不是2的幂,两个单链表有公共节点,找出第一个。

6、TCP三次握手、四次挥手、超时重传。

7、Linux现在发行到哪个版本了?你一般用Centos还是Ubuntu啊,为什么?

8、Linux下查看内存使用命令是什么?查看负载的命令是什么?

9、SVM怎么分类的,有哪些核函数,如何优化SVM?

树、图、贪心、dp没问

一个文件有100w行,每行是一个长度为20的字符串(由a-z中的字符组成),内存大小为8Mb,问重复次数最多的字符串是哪个?

一个正方形,去掉左上角的1/4后余下的图形怎样均分成4个大小,形状相同的图形?

后台服务器每分钟会给客户端发送总共约10w个心跳检查包,每个心跳包的往返时间在0-100ms之间,求每分钟内这些心跳包的八十分位数(将往返时间从小到大排序,排在第80%的数,这个中位数的概念类似)?

第一个题目我先将文件通过hash分到10个小文件中,然后用hash_map来统计各个字符串出现的重复次数。面试官说可以,然后说我现在只要找出重复次数最多的那个字符串的重复次数,不需要找出具体是哪个字符串。问我有没有更好的方法。然后我想了想,如果不要保存字符串的话,直接将每个字符串都hash到整数空间,然后进行统计次数,内存差不多是8Mb,面试官听了说可能会出现冲突的情况的一些细节。

第二道题目想了一会没想出来,后面面试官提示说这次是技术面试,不是要你瞎蒙,要分析,分析可能更容易找到答案。我再想了想还是没有想法,然后面试官就说算了。回到学校后想了想,和同学讨论了下,其实很简单,当时面试时没有把思路放开啊!

第三道题目我特意跟面试官确认了心跳包的往返时间是在0-100ms之间,有了这个信息这个题目就好解决了,只要开大小为100的数组a来做计数器,对0-100ms之间的每个时间都统计对应的心跳包的数量。求八十分位数只需要从头遍历数组a,找到对应的第80%个位置的往返时间就ok了。

TCP协议三次握手过程,传输报文中处理请求连接信息还有哪些信

TCP和UDP优缺点,分别适用于什么场合? 

如果让你设计微信视频,你会选择什么协议?如何实现 

TCP/IP编程服务器端主要调用哪些接口 

select/poll/epoll的区别 

recv函数的返回值及其意义 

3.计算机操作系统 

进程之间通讯有哪几种方式? 

管道通讯有哪些限制? 

这几种通讯方式中那种方式比较好? 

进程和线程的优缺点,各适用于什么场合? 

4.C++ extern 关键字的作用 

extern "C"的作用 

map和hash_map的区别 

hash_map内部是如何处理冲突的

sizeof(A) sizeof(B) 如果B继承于A,二者大小关系如何 

基类的析构函数必须为虚函数吗? 为什么? 

strcpy strncopy 哪个更安全 实现strncpy 

不用临时变量实现strlen 

const关键字的作用 

violate关键字作用 

一个双向链表,中间有一个节点value为1,在其后插入一个节点,如何做,写出思路 

2.stl

vector内存增长方式 

vector list 区别 

map 数据结构 

红黑树与普通avl树的区别

tcp终止链接几次挥手 画出这四次过程,我写出了具体的状态转化过程,面试官追问,TIMEWAIT状态没有会有什么影响,主要答被动终止的一方会出现持续等待导致系统资源浪费。面试官继续问,持续时间多长以及为什么 

linux中查看网络连接状态用什么命令,netstat,具体参数,我答-a配合管道metstat -a|grep TIME_WAIT,可以更优 

还知道哪些其他linux命令,比如查看cpu状态以及另外一个我不会也忘记了。 

接着问了会不会gdb,面试官问设置断点用什么命令b,查看变量用什么p 

Http协议端口号,这个问题一下子懵了,其实很简单80 

如果一个cpu有八个核,多进程比较好,还是多线程比较好,我回答了根据线程实现方式不一样有所区别,内核级线程适合用多线程,用户级线程适合用多进程 

知不知道共享内存是什么 

5.数据库  这方面没怎么问,不知道是不是跟我一面有关系 只问了用过那些数据库

有三张扑克牌,其中有一张中奖100块 

问题一,随机抽取一张牌中奖概率是多少1/3 

问题二,先随机抽取一张牌,然后拿走一张一定不是100的那张,再将你手中的牌和剩下的一张牌交换,中奖概率是多少2/3

https://www.cnblogs.com/perfy576/articles/8939791.html

hashmap底层实现原理

hashmap存储结构怎么样,怎么处理的hash冲突,当查询时,其时间复杂度怎么样

说说spring mvc的流程

说说线程和进程的区别

线程和进程都可以并发吗

wait sleep的区别,并说明使用场景,wait sleep都会释放cpu资源吗

线程如何产生死锁,介绍一个场景

怎么避免死锁的产生

用过线程池吗?说说为什么要用线程池?都知道什么线程池?

如果让你设计数据库,你会想到那些优化

你刚才说了索引,说说索引类型和怎么实现的吧

问你一个关于索引的问题一个组合索引,a b c那么 a b c, a c ,a b哪个可以使用该组合索引。

一个表有用户id.和用户成绩,怎么找到成绩前10的人。

数据库中char和varchar2的区别,和使用场景。

看你项目使用了restful请求,简单介绍一下。

你做的项目有没有日志系统,类似于登录日志等。是怎么实现的。

你的项目都部署在什么服务器上。

刚才说你部署在腾讯云上,就是linux了,说一些你常用的linux命令。

linux中如何查看一个端口是否被占用,被那个进程占用。

http的默认端口是80,怎么将它改为8080端口。

linux中vim怎么统计文件的行数。

linux中怎么查看内存使用情况和cpu的使用情况。

你做项目的时候遇到过那些http状态码,你都是怎么处理的。

在项目中用到过设计模式吗?假设一个场景使用工厂模式

说说不经过第三个变量,怎么将两个变量交换。

说说jvm的gc,gc算法,gc收集器

介绍一下redis。这是在你的项目中用到你才学的,还是自己主动了解的。

如何在不加锁的情况下实现多线程安全访问一个数据结构?当时没有答上来,后来想了想,应该使用观察者模式,一个线程负责修改,剩下的线程读取就行了。优先级用读优先或者写优先。

接下来,面试官看我简历上写熟悉C++,便问我有没有用过标准库,知不知道底层实现。于是我便将map,set的实现以及vector的动态内存分配回答了一下。 

还有一道判断两个链表有没有交点的题。给出的答案是把链表头尾相连,转化成判断是否有环。面试官表示太麻烦,问有没有更好的思路。其实答案很简单,直接判断最后一个结点是否相同就行了。当时太紧张,面试官提示了一下,仍然没想到这个答案orz。 

Linux下一个程序最大能开多少内存

因为简历上写用过Linux系统,所以面试官问了一些Linux下的常见命令:如何查看CPU和内存使用率(top),如何查看内存泄漏(top命令查看,看哪个进程开启后内存使用率一直攀升),如何查看网络状态(netstat)。 

面向对象的特点(继承封装多态),又问我多态怎么实现,我就回答了通过虚函数和继承实现,顺便回答了虚函数的实现原理。还问了virtual关键字的用途,也回答了。

最后一个问题,dynamic_cast和static_cast的区别和用途,没回答上来。。

https://blog.csdn.net/qingzhuyuxian/article/details/81100411

https://blog.csdn.net/github_39273626/article/details/81417056

https://blog.csdn.net/li_wei_quan/article/details/81221586

第一题是写找逆序数的算法,第二题是计算磁盘大小(最后一个小问是结合B+树的), 算法题第一道是按格式输出字符串,第二道是关于完全二叉树的(这道题我直接放弃了)。

猜你喜欢

转载自blog.csdn.net/idiot2B/article/details/88935556