面试问题搜集及解析

 

计算机网络

 

TCP的三次握手和四次挥手,为什么

TCP拥塞控制

UDP如何实现可靠性传输 

TCP的报文格式

HTTP报文格式

HTTP1.0、1.1、2.0区别

浏览器输入一个网址后执行的全过程

什么是socket

HTTPS 

HTTP 

TCP/IP协议各层数据格式及首部含义

 Internet四层体系结构 

OSI七层模型

NAT协议

TCP与UDP的区别

怎么在ipv4中找一个ip地址

Q:DDos攻击的原理介绍一下 

A:emmm...listen有一个队列,处理连接请求。在收到匿名IP发过来的SYN之后,会在listen队列中存放一个记录,但是队列容量是有限的,当这样的恶意请求过多的时候,listen队列里就塞满了这些无效的连接请求,然后装不下更多的连接记录了,所以就拒绝其他请求了

 

 

操作系统&数据库

 

单例模式(两种)

生产者消费者的同步操作

内存泄漏的具体解决办法.

内核态和用户态的区别

 进程调度算法

如何对数据库的IO进行优化

操作系统为什么要在外存上使用分页技术

 操作系统基本分页存储管理方式

页面置换算法

多线程同步和互斥的实现方法

协程

 进程与线程的切换代价比较

多线程如何确保安全

信号量怎样通信

多线程范围内的数据共享

I/O多路复用

 

死锁,如何解决死锁

死锁?死锁产生的原因?死锁的必要条件?怎么处理死锁?(四个方面)
解析:(1)相互等待资源而产生的一种僵持状态,如果没有外力的干预将一直持续这个状态
          (2)系统资源不足、相互竞争资源、请求资源顺序不当
          (2)互斥、不可剥夺、等待、循环等待
          (3)因为互斥是不可改变的,所以只能破坏其他三个条件中的一个来解除死锁,方法:剥夺资源、杀死其中一个线程

 

 

1、进程和线程的区别?

 

解析:(1)进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元

 

          (2)同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程。

 

          (3)进程的创建调用fork或者vfork,而线程的创建调用pthread_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束

 

          (4)线程是轻量级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的

 

          (5)线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源

 

          (6)线程有自己的私有属性TCB,线程id,寄存器、硬件上下文,而进程也有自己的私有属性进程控制块PCB,这些私有属性是不被共享的,用来标示一个进程或一个线程的标志
 

 

多进程和多线程的使用场景

有哪些方法清除cache中旧的数据

SQL优化,有哪些优化方法

有名管道

I/O多路复用

 浅拷贝和深拷贝

select poll epoll的区别 底层实现原理

协程

怎么保证一个CPU只有一个线程运行

线程的基本组成是什么?

线程分配什么:tcb

线程有什么状态?运行挂起结束状态,有新生状态吗?新生(初始状态)状态?

多线程同步和互斥方法,内核态下有什么方法,回答三个:信号、互斥量、条件遍历

条件变量是什么?

信号量是什么?信号量不是多个资源可以访问统一资源吗?多个时刻可以访问同一个资源

守护进程、僵尸进程、孤儿进程,守护进程的作用是什么?

socket是干嘛的

内存映射是什么

弱类型、强类型、动态类型是什么(C是什么类型的语言,属于动态语言还是静序算法,优点和缺点)

数据库的事务是什么?

一范式二范式三范式是什么?

5种I/O模型

索引,B+树

CAS与读写锁

锁,可重入锁 

线程同步的方式

5、IPC通信方式?

 

解析:(1)管道(匿名管道(pipe亲缘关系的进程通信)、命名管道(mkfifo/mknod))

 

          (2)消息队列:是基于消息的、用无亲缘关系的进程间通信,主要函数:msgget、msgsend、msgrecv、msgctl

 

          (3)信号量:相当于一把互斥锁,通过p、v操作,主要函数:semget、semop、semctl

 

          (4)共享内存:是进程间通信速度最快的,所以用经常是集合信号量或互斥锁来实现同步,shmget、shmat、shmdt、shmctl

 

19.fork、vfork还有clone的区别
 
20.僵尸进程和避免僵尸进程
 
21.惊群效应
 
22.中断的作用
 

27.内存分配原理

 

29.poll和epoll的区别

 

30.epoll中ET模式与LT模式的区别

 

31.数据库事务

 

44.epoll的水平触发和边缘触发

 

 

 

 iOS相关

 

UIViewController的生命周期

OC的界面传值

OC如何实现多重继承

 

 

 

 

 

 

c++11的新标准

多态

析构函数,虚析构函数

hash

 

合并两个有序链表比较快的方法

 构造函数、复制构造、复制操作、移动构造、移动操作

派生类中的构造函数执行顺序

二叉排序树的插入、删除

字符串转double的代码

红黑树

 

设计模式

单链表和双向链表

hashmap原理

数组和指针的区别

new和malloc

vector底层的实现

全局变量和static变量的区别.如果在两个.h文件中声明两个同名变量会怎么样? 如果使用extern 如果没有使用

map set的实现原理

汉诺塔

若汉诺塔的底盘有2种颜色,如何分离它们

给了数据流,求历史记录中的中位数(用2个优先队列)

 对称与非对称加密

 

用O(1)时间复杂度返回当前栈中最小元素

 

 

 

 

存储大量(上亿)的单词,如何在最短时间内找到想要的数据

C语言中局部变量与全局变量在内存中的存放位置

类成员函数中重载/重写(覆盖)/重定义(隐藏)的区别

 

 

 

1000瓶水有1瓶水有毒,老鼠喝一滴就会死,但是需要一周毒发,请问最少需要多少老鼠多少时间才能找到那瓶有毒的水。

 

 

找出链表中环的入口节点

 

腾讯现场一面补充:

tcp的滑动窗口

udp怎样确保不丢包(kcp)

手写快速排序

找出二叉树的最长路径

 

腾讯现场复试补充:

加密算法(明文、暗纹、对称、非对称加密) 

 

 

 

阿里一面补充知识点:

单链表的翻转

直播技术

TCP的拥塞控制

 

 酷家乐一面补充:

http协议

分词技术

分布式存储

 

WPS一面补充:

栈内存和堆内存的区别

static和const的区别

map的自定义key值怎样排序

 

 

 

 

 

解决hash冲突的几种方式

排序算法及相应的复杂度,稳定性

static的所有应用场景

函数栈帧

用C实现C++的特性

哈夫曼动态压缩

泛型编程

STL库常用接口

面向对象的特性

df底层/原理是什么,是干什么的,百分比计算是怎么算的

一个文件被删除了,没有被释放是什么原因呢?

 

给你一个50亿的整数让你找出中位数(分治法 和 位图法)

sql语句

二叉搜索树

 

密码加密MD5

N个红白蓝三种小球,乱序排在一起,两两交换,要求从左至右排序成红白蓝

二维数组,行递增从左至右,列从上到下递增,给一个数,求出该数的位置

线程同步的方式

B+树

 

 

 

 

 

如果一个函数传入一个对象,那么这是浅拷贝还是深拷贝?

如果使用的是引用或指针不会发生拷贝,如果传入的类没有实现拷贝构造函数则是浅拷贝,如果实现了拷贝构造函数则看实现的拷贝构造函数是浅拷贝还是深拷贝。

 

C语言里的指针是什么?

首先它是一个变量,里面存的是所指向的内部数据类型或对象的地址。取内容可以获得这个数据或对象。

 

实际上指针不一定是变量,也有常量指针,不过一般都说指针是指针变量的简称。所以上述表达没有什么问题。

 

形参实参的区别

形参指的是外部调用的时候传入的参数,实参是函数在处理内部所使用的参数

 

为什么C++开发时用来做基类的类的析构函数一般都是虚函数?

这样做是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。

 

 

 

 

 

 

1. sizeof和strlen的区别

 

2.一个int大概多大?
32位4个字节,64位8个字节
 
3.map with mutex和sync.Map的区别
 
4.sizeof和strlen的区别
 
5.多个进程同时监听一个UDP端口会怎么样?
 
6.++i和i++的区别?
 
7.
进程的内存结构?
A:内核、栈、动态链接库、堆、静态区、代码段、保留区
 
8.
Q:静态变量和全局变量在哪个区?
A:静态区……
 
9.
Q:++i和i++的区别?
A:++i效率比较高。
 
10.
Q:空类的大小?
A:1byte
 
11.引用和指针的区别?
 
 
13.在一个字符串中找到一个子序列
 
14.怎么判断两个链表是否交叉
 
15.怎么找若干个子串中任意两个子串的的最长公共前缀
 
16.怎么实现一字节对齐
 
17.怎么实现无锁循环队列
 
18.手撕代码:一颗二叉搜索树,找出树中的第k大节点
 
 
 

 

28.AVL树、B+树、红黑树

 

 

 

 

32.

  (1)多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载

    (2)动态绑定怎么实现?(就是问了一下基类与派生类指针和引用的转换问题)

    (3)类型转换有哪些?(四种类型转换,分别举例说明)

    (4)操作符重载(+操作符),具体如何去定义,?(让把操作符重载函数原型说一遍)

    (5)内存对齐的原则?(原则叙述了一下并举例说明)

    (6)模版怎么实现?

    (7)指针和const的用法?(就是四种情况说了一下)

    (8)虚函数、纯虚函数、虚函数与析构函数?(纯虚函数如何定义,为什么析构函数要定义成虚函数)

    (9)内联函数(讲了一下内联函数的优点以及和宏定义的区别)

    (10)const和typedef(主要讲了const的用处,有那些优点)

    (11)排序算法有哪些?快速排序怎么实现的?最好时间复杂度,平均时间复杂度

    (12)链接指示:extern “C”(作用)

    (13)c语言和c++有什么区别?(大体讲了 一下,继承、多态、封装、异常处理等)

33.c++中四种类型转换机制?

34.strcpy函数的编写?

35.虚函数,虚函数表里面内存如何分配

36.类的封装:private,protected,public

37.二叉树查找最近公共祖先

38.实现简单二叉树类,实现插入,删除和前中后序遍历

39.tcpdump

40.动态库和静态库的区别

 

45.一个公交站在1分钟内有车经过概率是p,问3分钟内有车经过概率 1-(1-p)^ 3

  

 

 

网络:

 

浏览器输入一个网址后执行的全过程

什么是socket

HTTPS 

HTTP

TCP/IP协议各层数据格式及首部含义

 

操作系统:

 

多线程同步和互斥的实现方法

协程

 进程与线程的切换代价比较

多线程如何确保安全

 

 C++:

 

智能指针

如何在main函数之前执行操作

C++类成员变量初始化顺序

C++静态类型成员变量的初始化顺序

Vector容量倍增

封装、继承、多态的理解

能否在构造、析构函数中抛出异常

引用和指针的区别

输出自身的程序

 

 

 

区别问题:

栈内存和堆内存的区别

信号量与条件变量的区别

引用与指针的区别

sizeof和strlen的区别

TCP和UDP的区别

static与const区别

 

 

 

 

posted @ 2018-04-14 22:19  Kiven#5197  阅读(463)  评论(0编辑  收藏  举报