面试刷题10-8

字节跳动六面上岸(算法三面挂),奉上客户端面经
一面:
自我介绍
进程和线程的区别
进程的通信方式,线程的通信方式
线程有哪些锁

http和https的区别
Tcp和Udp的区别
Tcp的拥塞控制和流量控制
算法题:反转链表、二分法计算根号二
为什么转客户端

上面的题目都是经典的必考题。还考了一个浮点数二分

二面:
自我介绍
如何实现Udp的可靠传输

UDP不属于连接协议,具有资源消耗少,处理速度快的优点,所以通常音频,视频和普通数据在传送时,使用UDP较多,因为即使丢失少量的包,也不会对接受结果产生较大的影响。

传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

最简单的方式是在应用层模仿传输层TCP的可靠性传输。下面不考虑拥塞处理,可靠UDP的简单设计。

  • 1、添加seq/ack机制,确保数据发送到对端
  • 2、添加发送和接收缓冲区,主要是用户超时重传。
  • 3、添加超时重传机制。

详细说明:送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。

目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT
虚拟内存、缺页置换、LRU

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片

 

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。

最近最少使用的页面被先换出


内存管理
线程的局部变量如何隔离
访问越界数组会发生什么现象
unicode、utf8的区别

三面:
自我介绍
unicode、utf8的区别
rgb888、rgb565代表什么
了解数据库吗,不同的join方式有什么区别,索引的底层实现
了解设计模式吗
算法题:n个红球m个白球,求所有可能的组合

为什么想转客户端

 

Spring

3. 开始问 Spring Boot 和 Spring 的区别,你觉得 Spring Boot 哪里好。

网络

4. 访问一个网站,比如 www.baidu.com 的时候,是怎么个流程。这个问题我被问了两次,给同学整理要点的时候也整理进去了,可我TM就是没去看,该死。

5. HTTP 1.0/1.1 的区别。长连接是怎么实现的。

心跳检测

数据结构

6. 有哪些数据结构

7. HashMap 的数据结构是什么。

8. 有哪些树;B 、红黑、AVL 树的区别。

9. LinkedList 的数据结构是什么;逆序输出它的时间空间复杂度多少。 O(N)

10. 索引的数据结构是什么;为什么用 B  树,不用其他的树,比如红黑、二叉树、AVL 树。

Java

11. 有哪些创建线程的方式。

12. 三个线程,A、B同时 start,要求 C 在 A、B 运行完之后才运行,求解决方案。

join 方法

13. 线程通信的方式。

互斥锁,信号量,条件变量

14. JVM 的结构模型是什么。

15. 哪些是线程共享的。

16. 内存分为哪几块(指的是新生代这种)

好像就这些了,好像没有说“有什么要问我的”。剩下的再多的也想不起来了。



go切片如何扩容
如何阻止painc
defer延迟顺序
error判断nil会出现的问题
protobuf协议

 


http协议
tcp三次握手  如何保证可靠性

TCP 可靠传输

1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。

2、数据校验

3、数据合理分片和排序:


一个数组 怎么屏蔽里面敏感词汇 复杂度                 Hash?
链表实现LRU
数据库为什么建索引  索引优缺点 什么时候建
悲观锁  乐观锁
里氏替换原则  依赖倒置原则 为什么这样设计
JAVA设计模式
JAVA辣鸡回收机制
hashmap底层实现 put 扩容 什么时候用红黑树 为什么不用数组或者链表而用红黑树

 


1.自我介绍
2.jvm介绍一下,包含哪些;
3.运行时数据区说一下;
4.说一下堆的具体内容,Eden区、survival from 和 survival to什么区别,默认内存比多少,我想修改的话怎么修改;
5.对象怎么分配内存,基于什么原则;
6.GC说一下;

7.手撕代码:不借用其他变量的怎么交换两个变量值;         比较基础的题目
8.手撕代码:不知道链表长度的情况下怎么删除倒数第k个链表(回答先遍历获取长度,不是想要的答案,提示用两个指针,一直纠结步长应该多少,就是没有想到为K...)
9.字符串不借用现有数据结构怎么判断有没有重复字符(数组实现即可)

数组实现Hash表?
10. 求字符串最长连续不重复子序列(实在没思路)
11.反问环节
12.如果过了能来实习吗;
前面漏掉的问题还有什么时候会触发full gc,还有线程有哪几种状态。

 

这个题目比较简单,Leetcode刷少了。。。

 

 



哈啰单车java开发一面面经
38min
自我介绍
如何做那个项目,你得工作,数据库如何去设计的?
重写和重载的区别?
返回值不同的重载,可以吗?为什么?

不可以
equals和==
arraylist和linkedlist的不同?为什么arraylist快?
hashmap了解吗?说一说
hashmap多线程中为什么会发生死循环?

object的有哪些方法?
volatile了解哪些?它是如何实现你说的可见性?
用volatile修饰的a,多线程调用a++会不会出现问题?为什么?

会,不保证原子性
类中两方法,一个public synchrnoized修饰,一个publis static synchrnoized修饰,两线程分别调用,会出现正常还是死锁还是?


get和post有哪些区别?
spring中@autoware和@resource的区别
数据库中MYISAM和InnoDB的区别?
为啥用b+树而不用b树

题:n*m矩阵,每行每列都有序,查找某个数

 


 

二面:

自我介绍吧

说一下项目吧

mysql索引实现原理   B+树和B树的区别

给你出个算法吧 给你一个字符串ip地址  需要把他转换成int类型  然后要再能转回来

先把字符串ip转化32位无符号整数。
 

你是软件工程专业的是吗  学过算法吧  来一道算法题做做

a='abcdsfasdfa'
b='abcsdfews'
求两个字符串的公共子串最大长度? 最长公共子串

我不是太会,就跟他说我可以用动态规划求一个数组的不连续递增子串

最长上升子序列

 

Java线程池有几个类型   有一个参数是拒绝策略有几个参数

 

 

说一下事务的隔离级别

 

Read Uncommitted(读取未提交内容)

       在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)。

Read Committed(读取提交内容)

       它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别 也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。

Repeatable Read(可重读)

       这是MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。不过理论上,这会导致另一个棘手的问题:幻读 Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的幻影行。InnoDBFalcon存储引擎通过多版本并发控制(MVCCMultiversion Concurrency Control)机制解决了该问题。

Serializable(可串行化) 

       这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。



熟悉Linux吗  说一下常用的指令 

 

你用java多长时间了?  我说两年   熟练吗?
我说还行  我知道一些原理
volatile关键字的意义?


熟悉JVM吧  说说我main方法new了一个类  并调用他的run方法   JVM中都发生了什么
表示我只会到类加载  就把类加载给他说了一下  后面的就不会了

java官方给提供了几种线程池  他们各自的作用

线程池的拒绝策略?

mysql事务的隔离级别?

mysql的引擎都有什么? 各自的特点?


接下来四道题
1.有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。


2.给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。

3.实现观察者模式。

4.有一个机器人的位于一个 m × n 个网格左上角。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。
问有多少条不同的路径?

 

美团的本科生面试比较简单

 

 

深信服(一面+二面+三面+HR面):

一面:

自我介绍

hdfs读写原理

HA高可用

情景:我备份了元数据,当整个集群崩溃,只剩下几个datanode的时候,是否可以恢复?

zookeeper原理  干什么的  在大数据生态下有什么用

HashMap实现原理

集合框架中线程安全的类有哪些

JVM内存模型

Hadoop1.x和Hadoop2.x的区别

Kafka的弊端

Java垃圾回收

 

二面:

自我介绍

项目

接下来就是引导我说一个我从来没听过的知识

Kafka如何实现幂等性,如果是要你实现,你怎么实现?

DStream和DStreamGraph的区别(SparkStreaming的知识)

之后面试官让我去看Kafka蓄水池机制(真的很长)

三面:

自我介绍

如何实现线程安全?(Java锁机制)

Kafka的幂等性?(这个幸亏二面的面试官考我了,我回去特意看了一下)

HR面:

自我介绍

自己的优缺点

期望薪资

还有什么要问我

 



一面9.8
先问了项目方面的知识,听不太懂面试官描述的什么意思。记得一个问题:如果前端反应一切正常,但是数据库没有相应动作,问我一般怎么排查?我说的打断点。。面试官说生产过程中不能打断点,可以看日志。感觉他要放弃我了,就开始问基础。


hashmap,hashtable,concurrentmap的实现;


数据库隔离级别,以及解决的问题;
mysql数据库默认隔离级别,哪个隔离级别可以解决幻读;

 

事务隔离级别

脏读

不可重复读

幻读

读未提交(read-uncommitted

读取提交内容(read-committed

可重复读(repeatable-read

()

串行化(serializable


为什么可重复读可以解决幻读;
索引的数据结构有哪些,分别适用于什么情况;
b树与b+树的区别;
redis是单线程还是多线程;

有多线程的情况吗;
什么时候会fork出新线程;
怎么保证fork新线程的时候数据一致;
写了两个算法题,比较简单忘记了。还有一些问题也忘记了。后面的基础知识基本能答出来,面试官觉得我基础很好(其实是运气比较好,他问得正好那最近复习到了),问我有哪些offer,跟我说快手待遇很好之类的。

二面9.10
可能看了前面面试官的评价,没有问我项目。
计算机网络的每一层作用,协议及相关问题一边回答一边问,比较细也比较基础;
出了一个关于return的题,问return什么,就是考察return的时候会将数据保存起来,finally后面的动作不影响return的结果。
为什么不建议连表操作;
select */count(1)/id from table 得到的结果;
出了几个关于连表操作的题,具体的忘记了;
又问了数据库隔离级别相关问题;
数据库传播属性;
jvm动态代理与cglib的区别;
出了两个算法题,第一个比较简单,第二个判断一个字符串最多能删除一个字符,能否变成回文串;
有些问题忘记了,不过感觉很喜欢问数据库方面的知识呀。
三面9.17
问了一些项目相关的,听不懂。。
可能看到前面面试官的评价就没问项目了,聊了一下人生理想,问了一些基础知识。让我写了两个懒汉式线程安全的单例模式。我写了一个双重检查,一个静态内部类。问我怎么实现延迟加载和线程安全的。
这一面技术比较少,然后说后面hr会再跟我聊一下。
hr面9.19
问我对面试官的印象,想去的城市,目前几个offer等常规hr面问题。

 


 

京东提前批(深水备胎)

8.13 14智能供应链一二面,8.28HR面,9.5HR要身份证,同部门同岗位的正式批已经发意向书,而我却还是没有收到,现在不抱有希望了,深水备胎。

一面

  1. 项目构成
  2. 作为项目组长怎么分工的
  3. 采用什么开发
  4. 讲讲volatile,可见性举个例子
  5. 你说你了解juc,你说说juc,举个例子       Java并发编程
  6. ArrayList和LinkedList
    1. 说了增删改查的时间复杂度
    2. 面试官说ArrayList增加时间复杂度真的是O(1),,有个值保存了下标,下次增加直接插入
  7. 设计模式,项目中运用了吗
  8. 说说你的优势吧
    1. 说了自己喜欢看基础,面试官说那是底层,是加分项,
    2. 应该重运用,不能纯理论
  9. 最后问了面试官建议,让我多运用运用,底层是加分项,首先得基础好

8.13 智能供应链部一面

  1. 自我介绍
  2. jvm内存模型,GC
  3. 类加载机制
  4. ClassLoader的分类
  5. JDK1.8新特性,主要问了流Stream
  6. hashmap
  7. 聊聊框架,SpringBoot,spring,springmvc三者关系
  8. spring AOP
  9. 基于spring的应用,我想让这个程序启动之后,然后再打印一个log,或者一个定时任务,这个怎么实现
  10. AOP 两种代理的区别,什么时候用
  11. mybatis的一个接口,一个xml文件,执行SQL语句是怎么实现
  12. synchronized和volatile
  13. maven的scope有几种
  14. MySQL优化
  15. Redis的数据类型
  16. 项目经验,登录页面怎么做的,越细越好
    1. 后台怎么获取到登录人的
      • 我说了requestparam,好像不是很好
  17. cookie和session

8.14 智能供应链部二面

  1. 项目
  2. 根据项目负责的一些点提新的需求让我设计
  3. MySQL索引B+树问题,为什么B+

主要就是项目问的多

贝壳找房(三轮面过后挂)

至今提前批的现场面,流程快,每轮面试间隔就5分钟,屁股都没有坐热,面完之后,自我感觉挺好的,问的也不难,9.4问HR结果,挂了
8.24:

一面:

  1. 自我介绍
  2. 项目
  3. 手撕反转链表
  4. Java基础你还了解哪些
    1. 我说了多态的两种形式
    2. 看过ArrayList和LinkedList源码
  5. AOP
  6. tcp三次握手
  7. 索引你用过吗
  8. 高并发知识你了解什么
    1. 说了synchronized、ReentrantLock、volatile
      • volatile的原理知道是什么吗?
        1. 我说了JMM,面试官说不是
  9. 线程池几种你了解过吗
    1. 说了几种线程池
      • 继续问我线程池的区别,线程池参数的各自含义
      • 什么时候才会达到最大线程数
  10. GC说一说吧
  11. 类加载机制

二面:感觉很重业务运用

  1. 自我介绍
  2. 抽象类和接口的区别
    1. 能不能用一个设计模式来说明
    2. 设计模式你都了解哪些
  3. int和Integer区别
  4. Session和cookies的区别
  5. HTTP在哪一层
    1. 我说了应用层
  6. HTTP的状态码说一说
  7. OOA,OOD,OOP是什么说一下
  8. 数据库的乐观锁和悲观锁了解吗
    1. 如果给数据库加行级锁,怎么操作
  9. 索引了解吗
  10. 高并发说一说吧
    1. 我说了synchronized、volatile、ReentrantLock
  11. 说说你的优点和缺点吧
  12. 你认为最开心和最难过的事是什么
  13. 你认为有什么书对你影响比较大,不限类型
  14. 有什么想问我的

HR面:

  1. 你感觉前两轮面试如何
  2. 你家里人对你工作的看法
  3. 想去什么公司
  4. 了解贝壳吗
  5. 优缺点
  6. 为什么不考研
  7. 能提前来实习是吧
  8. 有什么想问我的

阿里(二面挂):

菜鸟网络内推

8.22:一面:

  1. 全程就撕项目,提新的需求给方案
  2. tcp udp区别
  3. session和cookie区别

8.26:二面:

  1. 哈夫曼树原理
  2. 一致性哈希算法
  3. UDP不可靠会丢包,为什么还用它
  4. 后面就是开始聊人生了,具体忘记了

8.28:拒信:

多益网络(挂)

7.17一面:

  1. 自我介绍

  2. 互联网加班怎么看?

  3. 项目

  4. 给定一个正整数n, 输出1到n的所有排列
    输入 3
    输出
    123, 132, 213, 231, 312, 321

  5. 用什么语言开发?

  6. 如果让你建议小白学习Java,你推荐看什么书?

    1. Java核心技术卷和视频相结合
  7. Java的缺点,跟c++和c比?

    1. Java比c++慢
  8. 排序算法,哪些是稳定的

  9. 解决哈希冲突的方法?

  10. 有其他公司的offer吗?

    1. 没有,目前就投了多益
  11. 做了我们的IQ测试,感觉如何,感觉难不难,是不是提前时间完成的

Bigo(二面挂)

9.2一面:

  1. 自我介绍

  2. 分代收集算法

  3. 什么参数能够调整新生代的比例?

  1. 如何一个程序频繁的发生Full GC,有什么办法改善这个情况?

  2. 标记-清除和标记整理区别?

  1. 程序发生内存泄漏,你会怎么去查这个问题?
  1. 讲一下hashmap的数据结构吧
  1. ConcurrentHashMap
  1. Java如何实现线程池

  2. Java实现线程同步有哪些方式?

  3. 原子类你用过吗?

    • 用过,AtomicInteger,底层是用的CAS实现的
    1. CAS怎么实现的
    2. CAS本质性实现原理是什么?
    3. 是这样的,但是不是我想问的,哈哈哈(邪恶的笑)
  4. 进程和线程调度算法?

  1. 讲讲数据库吧,数据库引擎
  1. select count(*) form 表 用哪个引擎快一点
  1. 组合索引是a,b,select 语句 where b = 1 and c = 2
  1. like 走索引吗
  1. 邪恶一笑,where a = 1 ,b = 2 OR b =3 走索引吧
  1. 如何查看慢查询
  1. 如何查看SQL语句的每一个查询计划,就是每一步消化多少毫秒
  1. 你自己还可以讲一下其他SQL语句优化

  2. Redis基本数据类型

  3. 发现服务器上TIMEWAIT(我听成摊位)状态的TCP过多是什么问题?

  4. 说说项目吧,不用太详细,讲一个难点吧

9.12二面:

  1. 根据前序中序生成树
  2. 还有一个算法题忘了
  3. 线程池参数,execute(),里面那个是实现了什么接口
  4. 单例模式
  5. 设计题:在控制层,记录访问次数,每次访问,count++,我说这个不安全,加锁可以保证安全,他说还有其他的吗

滴滴(目前没有收到结果,也没有二面)

9.16:一面(1小时20分钟)

  1. Java集合说一说吧set ,list,map都问了一遍

  2. TreeSet和HashSet区别

  1. hashmap和concurrenthashmap

  2. 线程池用过没,线程池的参数什么意思,每个都问了一遍

  3. 拒绝策略说一说

  4. synchroBlockQueue 到底可以存几个

  5. 锁用过没

  1. 锁的什么方法你用过
  1. lock和tryLock区别
  1. lock的公平锁和非公平锁的怎么实现的(源码级别),不限于概念

  2. 类加载机制,不是类加载几个过程

  3. 如果多个类加载器加载同一个类,会出现什么情况

  4. tomcat的加载过程

  1. spring的生命周期,不是bean
  1. AOP

  2. ASM怎么实现cglib

  3. mybatis的插件用过没,

  1. 项目,

    ​ 背景:暂存数据,每一次把用户填写的数据暂存到数据库,暂存字段,0暂存,1正式存

    1. 如果实现a用户暂存数据1,b用户暂存数据2,实现a下次只能看见数据1,

      给car表加一个操作人字段,每次判断

    2. car表怎么设计的,

      id,车牌号,xxx,xx,暂存标记

    3. car表主键是什么

      主键id

    4. 主键id有什么规则吗?

      自增长

    5. 如果一个车牌号重复了,添加的时候怎么处理的

      每次填入的时候,都会在数据库里查询一下,判断是否有

    6. 如果4个人同时填入车牌号为888的车,怎么处理这个问题

      叭叭叭半天,给添加这个操作加锁,给判断重复车牌号方法加锁,

    7. 加锁为消化资源,你考虑一下在数据库进行操作吧

      叭叭了隔离级别,说了mysql默认隔离级别(可重复读)

      此时感觉不对了,没有get到点上了

    8. 隔离级别是解决什么问题的啊

    9. 并发的时候问题,脏读,幻读,不可重复读等问题,

    10. 隔离级别什么时候才出来啊?

      不知道

      这个点没有回答好

  2. 数据库索引,索引类别

    唯一索引,聚簇索引,非聚簇索引

  3. 聚簇索引和非聚簇索引区别

  4. 二叉树和B+树的区别

  1. 那如果把二叉树弄成,所有数据都存在叶子节点呢
  1. 那如果平衡二叉树呢
  1. 怎么减少IO操作的
  1. 磁盘上所有文件都是B+树存储吗?
  1. 磁盘上怎么存储这些数据的

  2. 你了解什么文件格式

  1. Linux操作系统了解过吗
  1. Linux命令用过哪些
  1. Linux根目录下有哪些文件夹
  1. 手撕翻转树,递归+递推

  2. 手撕最小路径和

网易互娱(目前没有收到结果,也没有二面)

9.26 一面:27分钟

  1. 自我介绍

  2. 面向对象聊聊吧

  3. 构造函数能不能继承

  4. Java基本类型

  5. 那基本类型的比较用什么进行比较的啊,是否比较

  6. 对象比较呢

  1. 对象的比较是用的什么原理比较吗

  2. hashcode了解过吗

  3. 简单介绍一下list和set的区别吗

  1. 查找大量数据里是否存在某一数据
  1. 优化高效的办法
  1. 项目

  2. MySQL语法,海量数据分页吧,用什么实现

  1. MySQL常见的引擎,两者区别

  2. 查询效率来说,哪个快一点

  1. MySQL用的什么版本,5.5和5.7版本的一个区别
  1. 平常用到json吗?

你可能感兴趣的:(算法)