面试题演练8-15

--自我介绍
--N个数中选出M个最大的数,时间复杂度

topK问题, 用堆,时间复杂度O(NlogM), 快排的方法,时间复杂度O(N)
--有用过gdb调试吗?Debug模式下断点的原理

GDB调试原理——ptrace系统调用, 这个问题比较难
--常量区,逻辑地址与物理地址

常量区:存放常量(程序在运行的期间不能够被改变的量,例如: 10,字符串常量”abcde”, 数组的名字等)
--unordered_map,map的内部实现及性能比较

前者底层是Hash表,后者底层是红黑树,前者全是O(1), 后者全是O(log(N))
--函数实现一般放在cpp中,stl的模板类函数实现为什么放在头文件中?

一般模板写的函数都放在头文件中
--tcp三次握手

**第一次握手:**客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;**第二次握手:**服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;**第三次握手:**客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。


--手写HashMap,可选要求:模板实现,线程安全,防内存泄露。

手写HashMap,这道题偏难,需要提前准备一个模板。

1.进程与线程的区别与联系

根本区别进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程。

2.常用的Linux命令
6.MySQL基础
7.Redis的基本数据类型,如何保持一致性,如何进行持久化

String 字符串, Hash,List,Set,ZSet
8.HashMap中 null:null 的键值对是否能存入


9.Set和List的区别

Set不允许重复


10.TDD的推行情况,如何保证开发能够推行TDD
12.Restful API的特点,与传统URL的区别
13.Session和Cookie的区别

Session保存在服务端,Cookie保存在客户端
15.智力题:有两个鸡蛋,如何最快的试出100层楼中刚好那一层扔下鸡蛋会碎

 


 

2.学到数据结构,常用的有哪些,

比较简单

3.数组和链表的差别,进行频繁插入和删除用哪个

4.如何进行查找,二分查找,还有其他的吗(hash,b树,当时没想起来,之后又补充的)

5.树有哪些树,说下B树的实现原理(如何分裂节点

B树偏难

7.栈和堆的区别

8.给了千万级数据,怎么进行查找(答:hash,多级hash,类似java的HashMap

9.说到HashMap,说下在java中的实现原理,线程安全吗,线程安全的有什么(hashtable,concurrenthashmap)

Java 的HashMap原理是高频面试题,Java容器有线程安全的版本

10.list都有哪些,ArrayList和LinkedList的区别

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)

11.java的这些内存都是怎么分配的,jvm模型

12.类加载,双亲委托加载

13.java的 == 和equals方法的区别。

java中的“==”操作符是专门用来比较两个变量之间的值是否相等

equals方法是用于比较两个独立对象的内容是否相同

14.用的java版本1.8,和1.7有什么区别(不知道。。说了concurrenthashmap的区别,他就让具体说一下

15.都有那些琐,说两个synchronized和 ReentrantLock,问怎么实现的,答得不好

16.能介绍你一个你的项目吗,问答网站项目 blabla

17.因为你这是基于BS模型,服务器是啥(tomact)它在项目中起到的作用(监听端口,接受请求)

18.用过其他的服务器吗,tomcat底层怎么实现的!这个问题没听说过。。

Web服务器原理

19.http请求,就说到了get和post的区别

get是从服务器获取数据,post是发送数据到服务器。

get参数通过URL传递,post参数放在Request body中。
所以:get比post更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
所以:get的url可以存为书签,post的url不可以存为书签。

GET请求在URL中传送的参数是有长度限制的,而POST没有。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

GET请求会被浏览器主动cache,而POST不会,除非手动设置。

GET在浏览器回退时是无害的,而POST会再次提交请求。

GET产生一个TCP数据包;POST产生两个TCP数据包。(在Firefox中post只发送一个)
解释:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
--------------------- 
最重要的是答出参数传递的区别

20.用到了Redis,都用来储存什么,还了解那些缓存结束,这个没回答好

21.Redis都有哪些数据结构

22.mysql都有哪些引擎,说了innodb和myIsam,问我还知道其他的吗。。根本不知道

23.你用了springboot,为什么要用它(我也不知道其他管理整合ssm的框架了)

 

 

先说说文件操作吧,给你一个保存key-value的文件,怎么读取

说了普通的读取文件,字符串识别,好久没用Property,之后给提示了

给你一个int类型的值,怎么转化为String

项目中的异步队列怎么实现的,然后问到了处理消息失败怎么办,没考虑全面

线程池相关(答的不好)

HashMap的实现原理,问到扩容,可以是1.5倍吗

ConcurrentHashMap的实现原理,1.7和1.8的区别

为什么转行,在学习过程中遇到的最大的困难是什么?

有遇到过OOM吗,怎么解决的,具体说下JVM怎么造成OOM的

linux查看一个文件末尾几行的命令(tail)

怎么查看含有某个关键字的几行(grep),具体怎么写命令

给你一个文件里面有好几列,怎么用命令统计某一列的和(不会。。)

远景一面(已过,50分钟左右)

看你非科班的,都学过那些计算机的课

这道题目硬编,把自学的都说一遍

HashMap实现原理,1.7和1.8的区别

说一下B+树

GC算法,都了解那些,有没有看过GC的log(没有。。)

线程池,有哪几个参数,这几个参数的理解(没回答好)

有哪几种实现多线程的方法

JUC的哪些类用过,atomic,主要利用volatile和CAS,CAS会有什么问题

再问synchronized关键字怎么实现的(1.8的改变,锁的升级)

JVM内存都哪几块

对Spring的IOC的理解

看你简历写的有良好的编程习惯,那abc_def这个命名有什么问题

什么是死锁,有没有在实际项目中遇到(自己写过demo)

那怎么去观察死锁的,比如用java命令(没有。。)

看你简历了解高并发策略,知道哪些

项目用了Redis做缓存,听说过Redis穿透,Redis雪崩吗(没有。。)

数据库引擎,两种引擎的区别和实现原理

Left join 和right join的区别

给两张表 100行和50行,left join后有多少行?如果有一行重复呢(??不太懂)

数据库索引的种类(给忘了)

知道哪些排序算法

这道题比较简单

给你很大的数据量几个G,怎么找出前10大的(用一个最小堆保存,遍历一遍)

top K问题

两个栈实现队列

一个栈入队,另一个栈出队

  • 有什么问题问我

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值