1. 介绍一下实习做的项目
2. 进程地址空间是怎么样的?
3. 堆和栈有什么区别?
1.堆栈空间分配
①栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
②堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
2.堆栈缓存方式
①栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
②堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
4. linux下可执行文件是什么格式?介绍一下这个文件格式
文件可执行是权限问题:x权限表示可执行
5. C++内存模型有什么理解?
C++内存分为5个区域(堆栈全常代 ):
(1)堆 heap :
由new分配的内存块,其释放编译器不去管,由我们程序自己控制(一个new对应一个delete)。如果程序员没有释放掉,在程序结束时OS会自动回收。涉及的问题:“缓冲区溢出”、“内存泄露”
(2)栈 stack :
是那些编译器在需要时分配,在不需要时自动清除的存储区。存放局部变量、函数参数。
存放在栈中的数据只在当前函数及下一层函数中有效,一旦函数返回了,这些数据也就自动释放了。
(3)全局/静态存储区 (.bss段和.data段) :
全局和静态变量被分配到同一块内存中。在C语言中,未初始化的放在.bss段中,初始化的放在.data段中;在C++里则不区分了。
(4)常量存储区 (.rodata段) :
存放常量,不允许修改(通过非正当手段也可以修改)。
(5)代码区 (.text段) :
存放代码(如函数),不允许修改(类似常量存储区),但可以执行(不同于常量存储区)。
6. 介绍一下虚函数表
7. 构造函数可以调用虚函数吗
不可以,虚函数动态绑定。
8. 类的成员函数可以调用delete this吗?需要注意什么
9. 你都了解哪些锁?介绍一下
互斥锁,自旋锁
10. 内存泄露是什么?有什么危害?如何避免?
内存泄露就是系统回收不了那些分配出去但是又不使用的内存, 随着程序的运行,可以使用的内存就会越来越少,机子就会越来越卡,直到内存数据溢出,然后程序就会挂掉,再跟着操作系统也可能无响应. 接着你就按重启了
11. 介绍一下智能指针
12. 智能指针怎样线程安全?
13. 概率题:游戏中男女玩家比例9:1 男性玩家创建男性角色的概率为0.4 创建女性角色的概率为0.6 女性玩家创建男性角色的概率为0.1 创建女性角色的概率为0.9 那么已知一个角色是女性,问其玩家是女性的概率?
考察贝叶斯公式
P(女性|创建女角色) = P(创建女角色|女性)*P(女性)/ P(创建女角色)
= 0.9 * 0.1 / (0.9 * 0.6 + 0.1*0.9)
二面 34min
1. 介绍实习做的项目,有什么难点,有什么考虑?
2. python中range和xrange有什么区别?
3. python传参*和**有什么区别?
4. web server里长链接怎么做的?
基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。
5. mysql中怎么查看查询性能?
6. epoll et和lt有什么特点?
水平触发和边缘触发,水平触发如果有数据没读完,会一直提醒,边缘触发只会提醒一次
7. nagle算法了解吗
Nagle算法简单的讲就是,等待服务器应答包到达后,在发送下一个数据包。数据在发送端被缓存,如果缓存到达指定大小就将其发送,或者在上一个数据的应答包到达,将缓存区一次性全部发送【若发送应用进程要把发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都缓存起来。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。只有收到对前一个报文段的确认后才继续发送下一个报文段。当数据到达较快而网络速率较慢时,用这样的方法明显的减少所用的网络带宽。Nagle算法还规定,当到达的数据已经达到发送窗口大小的一半或已达到报文段的最大长度时,就立即发送一个报文段。这样做,就可以有效的提高网络的吞吐量】
8. shutdown()和close()有什么区别?
自我介绍
介绍自己的项目
项目难点,怎么解决的(2333不会说,就说自己实习的一些小问题)
Java里的集合类型,说了ArrayList、LinkedList、HashMap的底层
介绍自己那个电商项目,啥都没多问2333
String和StringBuffer的区别
String是final类不能被继承且为字符串常量,而StringBuilder和StringBuffer均为字符串变量。String对象一旦创建便不可更改,而后两者是可更改的,它们只能通过构造函数来建立对象,且对象被建立以后将在内存中分配内存空间,并初始保存一个null,通过append方法向StringBuffer和StringBuilder中赋值。请看如下示例代码:
String str = "abc";
System.out.println(str);
str = str + "de";
System.out.println(str);
述代码先创建一个String对象str,并赋值abc给str,然后运行到第三行,JVM会再创建一个新的str对象,并将原有str的值和de加起来再赋值给新的str。而第一个创建的str对象被JVM的垃圾回收机制(GC)回收掉。所以str实际上并没有被更改,即String对象一旦创建就不可更改。所以Java中对String对象进行的操作实际上是一个不断创建并回收对象的过程,因此在运行速度上很慢。
而StringBuilder和StringBuffer的对象是变量,对变量的操作是直接对该对象就行更改,因此不会进行反复的创建和回收。所以在运行速度上比较快。
StringBuilder(非线程安全)
StringBuffer(线程安全的)
UDP和TCP的区别,以及和Http的区别
UDP无连接,不可靠,基于数据报文
TCP连接,可靠,基于字节流
HTTP应用层协议
对Spring AOP的理解
对Spring Cloud的理解
算法题:一个小球从100米高空掉下来,每次弹起之前一半长度,求第10次落地时经过的距离
100+50+50+25+25+12.5+12.5.
1 2 3
算法题:最长不重复子串 Leetcode原题
写个SQL,表中有班级字段、分数字段,查询出班级和班级的平均分数。
(美团电话一面凉凉)-tyz
1.操作系统了解么(痛点)
NIO
进程线程区别
进程是操作系统资源分配的基本单位,线程是操作系统调度的基本单位
2.网络了解多少(...)
OSI七层说一下
物理,链路,网络,传输,应用
get与post区别说一下
在提交参数的时候,get参数在url上,post参数在数据段中
还知道哪些HTTP方法
head,put,DELETE,OPTIONS,TRACE
HTTP状态码说一下
100,200,300,400,500
子网掩码清楚么
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。 [1]
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在广域网上。
TCP与UDP说一下
Cookie与Session
Session 是服务器用来跟踪用户的一种手段,每个 Session 都有一个唯一标识:Session ID。当服务器创建了一个 Session 时,给客户端发送的响应报文就包含了 Set-Cookie 字段,其中有一个名为 sid 的键值对,这个键值对就是 Session ID。客户端收到后就把 Cookie 保存在浏览器中,并且之后发送的请求报文都包含 Session ID。HTTP 就是 Session 和 Cookie 这两种方式一起合作来实现跟踪用户状态的,而 Session 用于服务器端,Cookie 用于客户端。
3.Linux了解么(...)
说下查看CPU内存的指令
df -h查看linux系统各分区的使用情况,要明确linux系统和windows系统分区的不同。
free -m 查看linux系统内存使用量和交换区使用量,如图所示。
4.java包了解多少,util,juc啥的
hashMap与hashTable区别
HashMap线程不安全,HashTable是线程安全的。HashMap内部实现没有任何线程同步相关的代码,所以相对而言性能要好一点。如果在多线程中使用HashMap需要自己管理线程同步。HashTable大部分对外接口都使用synchronized包裹,所以是线程安全的,但是性能会相对差一些。
二者的基类不一样。HashMap派生于AbstractMap,HashTable派生于Dictionary。它们都实现Map, Cloneable, Serializable这些接口。AbstractMap中提供的基础方法更多,并且实现了多个通用的方法,而在Dictionary中只有少量的接口,并且都是abstract类型。
key和value的取值范围不同。HashMap的key和value都可以为null,但是HashTablekey和value都不能为null。对于HashMap如果get返回null,并不能表明HashMap不存在这个key,如果需要判断HashMap中是否包含某个key,就需要使用containsKey这个方法来判断。
算法不一样。HashMap的initialCapacity为16,而HashTable的initialCapacity为11。HashMap中初始容量必须是2的幂,如果初始化传入的initialCapacity不是2的幂,将会自动调整为大于出入的initialCapacity最小的2的幂。HashMap使用自己的计算hash的方法(会依赖key的hashCode方法),HashTable则使用key的hashCode方法得到。
hashMap多线程会出现啥问题
线程不安全
ConcurrentHashMap如何实现线程安全
synchronized与ReentrantLock
说几种常见的Exception.....
5.做过web小项目么(一直在补基础..好久没看了)
表单防止重复提交
乱码产生原因,解决乱码
filter与interceptor有啥区别
6.jvm
常见垃圾收集算法
jvm内存模型
7.数据库
索引
索引数据类型
b+树怎么存储的
聚合索引怎么排列索引顺序
乐观锁悲观锁
delete/drop/truncate的区别
8.数据结构
单链表判断有环(一紧张差点..)
树常见遍历(可能看我太菜不知道问啥了...)
1000万数据排序
大文本中都是单词,逗号隔开,统计单词出现次数
年会抽奖,保证公平(可以用Random)
8.补时长
最近看的啥书,有啥收获
平时怎么学,看博客啥的么
看开源项目么
最后讲一件事说下自己的优点(这个我真的词穷了..电话面试脸红)
总结:
问的不难,还是自己菜,网络操作系统咋补...
一面面经:时长40分钟
操作系统 内存部分(虚拟地址怎么找到物理地址)
swap分区
为什么用虚拟地址
linux怎么查看内存情况
free-h
进程的堆栈里面放的什么
栈存放零时变量,函数参数
快排 归并排序
口述算法 最长回文子串
三次握手
syn攻击
解到tcp3次握手之后呢,我们说一下syn攻击是怎么回事吧。syn其实就是在进行到第二阶段结束后,此时服务器不是已经发送了syn消息和synack消息了吗,这服务器真是个老好人啊,由于tcp3次握手机制,它得等着终端那家伙给它反馈synack消息啊,所以吧,服务器得分配一定的资源等着终端那家伙啊。可是呢,这终端比较坏,不但不回复synack包给服务器,反倒搞一大堆第一阶段的syn请求消息。这下服务器可不好过了啊,得腾出好多好多资源给终端留着啊,最后可能就把自己搞死了。这就是所谓的syn攻击啊,又称为ddos攻击。
多态
hashmap hashtable
线程状态(blocked waiting timed_waiting)
jvm内存分配
== equals hashcode
数据库隔离级别
脏读 幻读
二面面经:时长22分钟
感觉面试官不是搞Java,很多问题都是由我自己讲,都是谈理解。
说说对并发的理解
synchronized 和 lock
说说juc你认识的工具类
爬楼梯问题
mysql连接对象问题
长事务
mvcc
change buffer
项目
你是本科生还是研究生
你愿意来成都吗
实习干些什么
三面
8月13日 10:00 34分钟
说下你用到哪些框架
说说对spring mvc 和spring cloud的理解
你是实践过dubbo的序列化框架改用protobuf吗
说一下tcp 和 udp
tcp的time wait 和 close wait
close wait是第二次挥手之后,time wait最后一次挥手等待一段时间
说一下拥塞控制
怎么控制滑动窗口的大小
(还有个滑动窗口的题,有些记不清,当时也没答上了,就不说了,怕误导大家)
如果服务器端已进入close状态,客户端还处于time wait 状态,占用着端口,怎么解决
查看tcp连接数的命令
linux你知道哪些命令
linux 中 ‘|’的作用是什么? 管道
查看tcp连接数的命令
当前系统的性能遇到了瓶颈,如何去定位问题
内存泄露怎么定位
说说你调优jvm的方向
说说jvm gc的特点,你的理解
你在校做的项目给你了什么收获
项目的大小,使用人数之类的。。。