记录大佬面经第三周

                                                  第一天

中移在线Java面经

  1. spring boot和ssm的区别是什么?

    解:boot提供了内置的tomcat,starter依赖简化构件配件,不需要xml文件,其中最重要的是starter依赖,

    1.Springboot 将原有的 xml 配置,简化为 java 注解

    2.使用 IDE 可以很方便的搭建一个 springboot 项目,选择对应的 maven 依赖,简化Spring应用的初始搭建以及开发过程

    3.springboot 有内置的 tomcat 服务器,可以 jar 形式启动一个服务,可以快速部署发布 web 服务

    4.springboot 使用 starter 依赖自动完成 bean 配置,,解决 bean 之间的冲突,并引入相关的 jar 包(这一点最重要)

  2. 怎么搭建springboot环境
  3. 了解事务吗 springboot中怎么使用事务
  4. springboot怎么进行测试
  5. Redis的数据类型

       解:略

  1. Redis怎么实现hash

解:redis的哈希对象的底层存储可以使用ziplist(压缩列表)和hashtable。

  1. Hashmap底层原理
  2. 如何解决hash碰撞
  3. 说一说gc
  4. Zookeeper主要干什么
  5. Hbase主要存储什么数据
  6. Hbase数据的生命周期
  7. 数据库平常使用什么
  8. 数据库引擎用过什么

解:对访问者来说,数据库引擎就是SQL语句的解释器。

(1)、ISAM引擎:是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。

ISAM的主要不足之处在于,它不支持事务处理、不支持外来键、不能够容错、也不支持索引,MyISAM还使用一种表格锁定的机制(表级锁)

(2)InnoDB:InnoDB要比isam和myisam引擎慢,innoDB为mysql表提供了acid事务支持,系统崩溃修复能力和多版本并发控制的行级锁,该引擎提供了行级锁和外键约束,所以InnoDB是事务型数据库首选的引擎。采用B+树实现,索引与数据存储在同一文件中。InnoDB表空间的最大限制为64TB,innoDB的表限制基本上在64TB左右

  • 存储结构:innoDB使用共享表空间存储方式时,所有数据存在一个单独的表空间里面,而这个表空间是由很多个文件组成的,一个表可以跨越多个文件存在,InnoDB表空间的最大限制为64TB。
  • 存储空间:InnoDB存储引擎为在主内存建立其专用的缓冲池来缓存数据和索引,所以需要更多的内存和存储。
  • 索引与数据:引(Index)是帮助MySQL高效获取数据的数据结构。MyIASM和Innodb都使用了树这种数据结构做为索引。
  • 更改索引方式:create table mytbl(id int primary key,name varchar(50)) type=MyISAM
  1. 数据库怎么调优
  2. 知道什么设计模式
  3. 单例设计模式有几种哪种不安全
  4. http2.0和http1.1的区别
  • 解:多路复用:HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级

  • 头部数据压缩: 在HTTP1.1中,HTTP请求和响应都是由状态行、请求/响应头部、消息主体三部分组成。一般而言,消息主体都会经过gzip压缩,或者本身传输的就是压缩过后的二进制文件,但状态行和头部却没有经过任何压缩,直接以纯文本传输。随着Web功能越来越复杂,每个页面产生的请求数也越来越多,导致消耗在头部的流量越来越多,尤其是每次都要传输UserAgent、Cookie这类不会频繁变动的内容,完全是一种浪费。
  • 服务器推送:

    服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。

           为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。

  1. 为什么http2.0能在一个TCP连接上发送多个请求

解:如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。

  1. TCP如何保证可靠传输
  2. TCP重传机制?
  3. TCP三次握手里有哪些状态
  4. 栈和队列的区别
  5. 怎么构造栈?
  6. 线程池的所有参数
  7. 线程池饱和策略有哪些
  8. Java锁的类型
  9. 非公平锁和公平锁哪个性能更好

解:公平锁中,多个线程抢锁时,获取到锁的线程一定是同步队列中等待时间最长的线程。而非公平锁中,多个线程抢锁时,获取锁的线程不一定是同步队列中等待时间最长的线程,有可能是同步队列之外的线程先抢到锁。

公平锁和非公平锁的性能是不一样的,非公平锁的性能会优于公平锁。为什么呢?因为公平锁在获取锁时,永远是等待时间最长的线程获取到锁,这样当线程T1释放锁以后,如果还想继续再获取锁,它也得去同步队列尾部排队,这样就会频繁的发生线程的上下文切换,当线程越多,对CPU的损耗就会越严重。

ReentrantLock的内部类Sync继承了AQS,分为公平锁FairSync和非公平锁NonfairSync。ReentrantLock默认使用非公平锁是基于性能考虑,公平锁为了保证线程规规矩矩地排队,需要增加阻塞和唤醒的时间开销。如果直接插队获取非公平锁,跳过了对队列的处理,速度会更快

  1. 为什么非公平锁性能更好
  2. BIO、NIO和AIO的区别
  3. 平衡二叉树和红黑树的区别(在脉脉上被吐槽最多的红黑树)
  4. 在平衡二叉树和红黑树上查询时的查询算法,哪个效率更高
  5. 为什么MySQL索引用B+树
  6. 用B+树做索引的缺点
  7. MySQL数据库关键字执行顺序
  8. 一个具体的索引优化问题,没听懂

 

                                                         第二天

阿里一二面

1会那些操作系统

Linux会一点

说一下操作指令,怎么看cpu,看进程,看端口

解:top

查看进程:ps -ef | grep java 表示查看所有进程里 CMD 是 java 的进程。ps -aux | grep java,  -aux 显示所有状态

查看端口:netstat –apn

2 操作系统进程间通信

解:管道,消息队列:它相比于管道,不止只能传输字节流,也没有缓冲区大小的限制。它独立于进程存在,进程终止时,消息队列及其内容并不会被删除,它实现了消息的随机读取。套接字(socket):与其它通信机制不同是,套接字可用于不同机器间的进程通信,即可用于网络之间的进程通信。信号量:信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。它是一个计数器,用来控制多个进程对共享资源的访问,常作为一种锁机制,实现进程间的同步和互斥。(JUC的Semaphore的设计思想来源吧)。共享内存:

3 追问了一个信号相关的问题,我不知道了。

其中,信号量又存在着两种操作,分别为V操作与P操作,V操作会增加信号量 S的数值,P操作会减少它。

具体的运作方式如下:

    初始化,给与它一个非负数的整数值。
    运行 P(wait()),信号量S的值将被减少。企图进入临界区块的进程,需要先运行 P(wait())。当信号量S减为负值时,进程会被挡住,不能继续;当信号量S不为负值时,进程可以获准进入临界区块。
    运行 V(又称signal()),信号量S的值会被增加。结束离开临界区块的进程,将会运行 V(又称signal())。当信号量S不为负值时,先前被挡住的其他进程,将可获准进入临界区块。
 

4 io多路复用,说一说

5 面向切面编程,说一说那些场景

6 说说面向切面编程

解:通俗讲, AOP思想就是把中间的非主流程的代码(比如:验证、事务管理、缓存、日志记录等), 横向抽取出来放在一个公共的类中, 也就是切面.可以通过Spring框架来配置该切面,可以让spring把这些非主流代码插入到任何地方。

7 给一个场景,有很多方法,找出耗时长的方法

8 spring的@autowired的作用

9 mybatis和hibernate的区别

10 C,C++了解吗(不了解)

11 python用过吗

没有,我用过matlab(笑)

12 java类加载器哪几种

12 java垃圾回收器

我先说了垃圾回收算法--垃圾收集器--比较CMS和G1。英文名词可能念的不是很标准。

13 配置过java启动设置吗

没有,我只用过-xms等指令改过JVM参数,和jinfo看参数

说说-XMS,除了-XMS,你还用过哪些指令

-XMX  -XSS  -XMN

14 说说java保证线程间同步的方法

Synchronize,reentrantlock,volatile,原子类。。。

15 说说倒计时器和循环栅栏的区别

16 说一说为什么要有JIT

https://blog.csdn.net/qq_36042506/article/details/82976586

17 平时怎么学习的

18 mysql聚簇索引和非聚簇索引

19 左外连接和内连接的区别

20 数据库的读写分离的作用

21  hash和一致性hash的区别,为什么要用一致性hash

https://blog.csdn.net/bntX2jSQfEHy7/article/details/79549368?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

22 spring boot。。。(不了解)

多线程:CurrentHashMap类的数据结构和原理,使用ThreadLocal管理变量的原理,什么是future(不会)

23 消息中间件了解吗,说说为什么要用消息中间件

24 项目中的缓存不一致怎么解决的

https://www.cnblogs.com/rjzheng/p/9041659.html

25多线程:CurrentHashMap类的数据结构和原理,使用ThreadLocal管理变量的原理,什么是future(不会)

解:抛弃了1.7的分段锁的设计,而采用了CAS + synchronized来保证并发安全性。

 static class Node<K,V> implements Map.Entry<K,V> {
        final int hash;
        final K key;
        volatile V val;
        volatile Node<K,V> next;

put方法

  •     根据key.hashCode()计算出hash值
  •     通过key定位出node,(桶为空)如果为空表示当前位置可以写入数据,利用循环CAS写入,(在链表或红黑树上 )如果不为空,()则利用synchronized锁写入数据,如果数量大于TREEIFY_HRESHOLD则要转化为红黑树。
    https://blog.csdn.net/programerxiaoer/article/details/80040090

 

                                                     第三天

CVTEJava后端开发一面面经

秒杀怎么设计实现的

Redis在其中充当什么角色用到的数据结构

我自己又说了缓存雪崩,穿透,击穿

Dubbo的实现原理(我说了挺长时间,有十分钟把)

解:

Redis的rbd和aof的区别

解:rdb:在指定的时间间隔内将内存中的数据集快照写入磁盘,Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方
式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失。Rdb 保存的是dump.rdb文件。命令save或者是bgsave触发或者配置文件中默认的快照配置(满足多少秒更改次数)。在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。

aof:以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据。Aof保存的是appendonly.aof文件。修改默认的appendonly no,改为yes。恢复:重启redis然后重新加载。相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb。appendfsync everysec    异步操作,每秒记录   如果一秒内宕机,有数据丢失

使用rbd和aof能不能恢复所有数据

Mysql的索引原理

为什么用b+树

B+树和哈希表的区别(答得不是很好)

Mysql的事务

数据库隔离级别

数据库中的锁,意向锁,分段锁

MySQL锁机制

Spring的ioc容器原理作用

讲讲spring的ioc的怎么实现?

Springboot自动装配原理

Hashmap讲讲

红黑树和链表那个增加快

Linkedlist和arraylist的区别

Volatile关键字

Jmm

为什么用这个关键字原理,禁止指令重排的单例模式

Sync关键字的锁升级过程

为什么1.6优化后锁效率会提高

Tcp为什么进行三次握手

https://blog.csdn.net/sinat_36629696/article/details/80740678

Tcp握手如果数据传输延迟会怎么办

 

链表逆序,时间o(n),空间o(1)

 

第四天

中国移动

进程和线程的区别;

解:一句话:进程是资源分配的最小单位,线程是CPU调度和执行的最小单位。
进程切换和线程切换有什么区别;

解:进程切换与线程切换的一个最主要区别就在于进程切换涉及到虚拟地址空间的切换而线程切换则不会。因为每个进程都有自己的虚拟地址空间,而线程是共享所在进程的虚拟地址空间的,因此同一个进程中的线程进行线程切换时不涉及虚拟地址空间的转换。
操做系统为进程分配了哪些资源;


进程间通讯的方式有哪些;

 

通常PCB应包含如下一些信息:
1、进程标识符 name
      每个进程都必须有一个唯一的标识符,可以是字符串,也可以是一个数字。
2、进程当前状态 status
     说明进程当前所处的状态。为了管理的方便,系统设计时会将相同的状态的 进程组成一个队列,如就绪进程队列,等待                进程则要根据等待的事件组成多个等待队列,如等待打印机队列。
3、进程相应的程序和数据地址

           以便把PCB与其程序和数据联系起来。
4、进程资源清单

              列出所拥有的除CPU外的资源记录,如拥有的I/O设备, 打开的文件列表等。
5、进程优先级 priority
      进程的优先级反映进程的紧迫程度,通常由用户指定和系统设置。
6、CPU现场保护区 cpustatus
      当进程因某种原因不能继续占用CPU时(如等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将                 来再次得到处理机恢复CPU的各种状态,继续运行。
7、进程同步与通信机制

              用于实现进程间互斥、同步和通信所需的信号量等。
8、进程所在队列PCB的链接字

              根据进程所处的现行状态,进程相应的PCB参加到不同队列中。PCB链接字指出该进程所在队列中下一个进程PCB的首                 地址。
9、与进程有关的其他信息

              如进程记账信息,进程占用CPU的时间等。
最近在看什么书

成绩 有没有挂科

好了你挂断吧

 

                                                                   第四天

拼多多一面:

编程题:堆排序

回顾笔试题目

TCP/IP协议
三次握手,四次挥手
TCP和UDP的区别
TCP拥塞控制算法
https://blog.csdn.net/qq_41431406/article/details/97926927
线程和进程的区别
分段和分页内存管理

JVM

组合索引的字段顺序
MySQL的MVCC
解:MVCC是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号(system version number)。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。

下面看一下在REPEATABLE READ隔离级别下,MVCC具体是如何操作的。

  • selec

InnoDB会根据以下两个条件检查每行记录:

  1. InnoDB只查找版本早于当前事务版本的数据行(也就是,行的系统版本号小于或等于事务的系统版本号),这样可以确保事务读取的行,要么是在事务开始前已经存在的,要么是事务自身插入或者修改过的。
  2. 行的删除版本要么未定义,要么大于当前事务版本号。这可以确保事务读取到的行,在事务开始之前未被删除。

只有符合上述两个条件的记录,才能返回作为查询结果

  • insert

InnoDB为新插入的每一行保存当前系统版本号作为行版本号。

  • delete

InnoDB为删除的每一行保存当前系统版本号作为行删除标识。

  • update

InnoDB为插入一行新记录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识。
保存这两个额外系统版本号,使大多数读操作都可以不用加锁。这样设计使得读数据操作很简单,性能很好,并且也能保证只会读取到符合标准的行,不足之处是每行记录都需要额外的存储空间,需要做更多的行检查工作,以及一些额外的维护工作.

具体mvcc更为具体

线程池的原理和运用
AQS

软件工程学过吗?

Spring的AOP
SpringBoot和SpringMVC区别在哪
SpringMVC原理

缓存穿透、缓存击穿、缓存雪崩都指什么?三者有什么区别,和缓存失效有什么区别

知道什么机器学习监督学习算法?
写过机器学习算法吗?
怎么写的?模型是自己训练的吗?

二面,搜索部门的面试官:

面试官迟到,联系HR以后才来面试,显然面试前未查看简历,似乎是被误当成社招面试了,面试时不断走神,面试体验差。

编程题:LRU缓存(社招高频题,Leetcode 146)

Java 9的垃圾回收器有什么新变化?
为什么放弃永久代?

解:

1、现实使用中易出问题。

  由于永久代内存经常不够用或者发生内存泄露,爆出异常 java.lang.OutOfMemoryError: PermGen 。

    字符串存在永久代中,容易出现性能问题和内存溢出。

    类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。

2、永久代会位GC带来不必要的复杂度,而且回收效率偏低。

而元数据中:由于类的元数据分配在本地内存中,元空间的最大可分配空间就是系统可用内存空间。因此,我们就不会遇到永久代存在时的内存溢出错误,也不会出现泄漏的数据移到交换区这样的事情。最终用户可以为元空间设置一个可用空间最大值,如果不进行设置,JVM会自动根据类的元数据大小动态增加元空间的容量.

Java 11里垃圾回收器有什么变化?
GC调优的原理、方式和步骤

Java反射怎么用?
为什么通过Class实例可以获取class信息

解:

为什么数据库中常用B+树而不是平衡二叉树,而为什么其他一些地方用平衡二叉树不用B+树

平衡二叉树和红黑树,面试官自己对此理解似乎也不是很清楚

LSM树是什么
 

Linux上编程时常用的命令

 

HR面面试官应当也是搞技术的,让我介绍了掌握的技术、做过的项目,不过没有再就技术方面多问。

技术面和HR面都过了,但是最终挂了,没有通过审批。原因不明,HR称保密,拒不透露。猜想可能是因为二面面评不好、第一学历不够(211,水硕只看第一学历)。

 

 

                                                 第五天

某大厂凉经

还有别的问题忘了,面试的时候有点紧张,自己基础也不是太好,还是要多加学习。

1.进程与线程的区别
2.TCP3次握手4次握手,为什么不是2次,为什么不是3次?
3.TCP/UDP在哪一层,ip在哪一层
4.TCP/UDP的区别
5.接口和抽象类的区别,什么是重载,什么是重写
6.事务是什么

解:百度百科中解释:指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。

官方语言:事务是一组不可再分割的操作集合(工作逻辑单元),是数据库操作的最小工作单元。
7.事务的ACID是什么,事务的隔离级别,脏读幻读说一下。
8.链表和数组的区别,如果大量插入,选择哪个更好呢?
9.项目为什么选用dubbo,不用SpringCloud?(因为我SpringCloud不会 红火火恍恍惚惚)
10.微服务的网关,主要做什么?
11.ES为什么MySQL要快?(倒排索引)
12.Mybatis原理是什么?(不会,我只会crud)

见黑马笔记
13.redis常用数据类型,用过排序的set吗(zset),zest怎么实现的?(跳跃表+字典)
14.redis问题了解吗?讲一下redis的缓存穿透
15.缓存穿透如何解决?(缓存无效key和布隆过滤器)
16.布隆过滤器原理是什么,或者说它是如何解决缓存穿透问题的(位数组+hash)。
17.synchronized 互斥吗?synchronized 升级过程(偏向(ThreadLocal)->自旋(CAS)->重量锁(操作系统提供))
18.GC相关问题,垃圾回收算法知道哪些?(主要说分代)
19.G1是采用什么算法?(不是分代吗? )


20.青蛙跳台阶变种(dp或者数学推导),链表倒数第N个节点(双指针)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值