其他互联网大厂面试题

1:阿里巴巴Java面试题

2:阿里云Java面试题-实习生岗

3:腾讯Java面试题-高级

4:字节跳动Java面试题

5:字节跳动Java面试题-大数据方向

6:百度Java面试题

7:蚂蚁金服Java面试题-中级

8:蚂蚁金服Java面试题-高级

9:京东Java面试题-中级

10:拼多多Java面试题-电商部

11:商汤科技Java面试题

12:中软国际Java面试题-初级

13:唯品会Java面试题

14:携程Java面试题-高级

15:软通动力Java面试题


下载链接全部大厂面试题及答案PDF

1.int a=10是原子操作吗?

是的。

注意点:

i++(或++i)是非原子操作,i++是一个多步操作,而且是可以被中断的。i++可以被分割成3步,第一步读取i的值,第二步计算i+1;第三部将最终值赋值给i。

mov eax, dword ptr [b]
mov dword ptr [a], eax

既然是两条指令,那么多个线程在执行这两条指令时,某个线程可能会在第一条指令执行完毕后被剥夺CPU时间片,切换到另外一个线程而产生不确定的情况。

2.innodb支持全文索引吗?

5.6版本之后InnoDB存储引擎开始支持全文索引,5.7版本之后通过使用ngram插件开始支持中文。之前仅支持英文,因为是通过空格作为分词的分隔符,对于中文来说是不合适的。MySQL允许在char、varchar、text类型上建立全文索引。

3.innodb支持表锁吗?

支持,补充:普通的增删改 是表锁,加入索引的增删改是行锁,执行查询时不加任何锁的。

4.HTTP短连接怎么变成长连接。

在header中加入 --Connection:keep-alive。

5.调用yeild()会阻塞吗?

阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。

yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行的机会。

6.虚拟机栈是线程共享的吗?

不是。

JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) , VM Stack(虚拟机栈)和Native Method Stack (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为什么我把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来说只发生在Heap上)的原因。

栈区:

每个线程包含一个栈区,栈中只保存基础数据类型的值(比如int i=1中1就是基础类型的对象)和对象的引用以及基础数据的引用

每个栈中的数据(基础数据类型和对象引用)都是私有的,其他栈不能访问。

栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

堆区:

存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 。

方法区:

又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。(两者区别为堆区存放new出来的对象信息,方法区存放本身就具有的类信息)

7.常量存放在JVM的那个区域?

方法区: 又叫静态区,跟堆一样,被所有的线程共享。它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机 (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。

8.所有的对象都分配到堆中吗?

答:不一定。

9.CopyOnWriteArrayList是线程安全的吗?

答:是的。

CopyOnWriteArrayList使用了一种叫写时复制的方法,当有新元素添加到CopyOnWriteArrayList时,先从原有的数组中拷贝一份出来,然后在新的数组做写操作,写完之后,再将原来的数组引用指向到新数组。创建新数组,并往新数组中加入一个新元素,这个时候,array这个引用仍然是指向原数组的。​​​​​​​当元素在新数组添加成功后,将array这个引用指向新数组。

CopyOnWriteArrayList的整个add操作都是在锁的保护下进行的。这样做是为了避免在多线程并发add的时候,复制出多个副本出来,把数据搞乱了,导致最终的数组数据不是我们期望的。

public boolean add(E e) {//1、先加锁final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();int len = elements.length;//2、拷贝数组Object[] newElements = Arrays.copyOf(elements, len + 1);//3、将元素加入到新数组中newElements[len] = e;//4、将array引用指向到新数组setArray(newElements);return true;} finally {//5、解锁lock.unlock();}
}

由于所有的写操作都是在新数组进行的,这个时候如果有线程并发的写,则通过锁来控制,如果有线程并发的读,则分几种情况:

如果写操作未完成,那么直接读取原数组的数据;

如果写操作完成,但是引用还未指向新数组,那么也是读取原数组数据;

如果写操作完成,并且引用已经指向了新的数组,那么直接从新数组中读取数据。

可见,CopyOnWriteArrayList的读操作是可以不用加锁的。

CopyOnWriteArrayList 有几个缺点:

由于写操作的时候,需要拷贝数组,会消耗内存,

如果原数组的内容比较多的情况下,可能导致young gc或者full gc

不能用于实时读的场景,像拷贝数组、新增元素都需要时间,

所以调用一个set操作后,读取到数据可能还是旧的,

虽然CopyOnWriteArrayList 能做到最终一致性,但是还是没法满足实时性要求;

CopyOnWriteArrayList 合适读多写少的场景,不过这类慎用

因为谁也没法保证CopyOnWriteArrayList 到底要放置多少数据,

万一数据稍微有点多,每次add/set都要重新复制数组,这个代价实在太高昂了。

在高性能的互联网应用中,这种操作分分钟引起故障。

CopyOnWriteArrayList透露的思想

读写分离,读和写分开
最终一致性
使用另外开辟空间的思路,来解决并发冲突​​​​​​​

10.数组越界问题

一般来讲我们使用时,会用一个线程向容器中添加元素,一个线程来读取元素,而读取的操作往往更加频繁。写操作加锁保证了线程安全,读写分离保证了读操作的效率,简直完美。

如果这时候有第三个线程进行删除元素操作,读线程去读取容器中最后一个元素,读之前的时候容器大小为i,当去读的时候删除线程突然删除了一个元素,这个时候容器大小变为了i-1,读线程仍然去读取第i个元素,这时候就会发生数组越界。

测试一下,首先向CopyOnWriteArrayList里面塞10000个测试数据,启动两个线程,一个不断的删除元素,一个不断的读取容器中最后一个数据。

public void test(){for(int i = 0; i<10000; i++){list.add("string" + i);}new Thread(new Runnable() {@Overridepublic void run() {while (true) {if (list.size() > 0) {String content = list.get(list.size() - 1);}else {break;}}}}).start();new Thread(new Runnable() {@Overridepublic void run() {while (true) {if(list.size() <= 0){break;}list.remove(0);try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}}}).start();}

11.Java接口可以多继承吗?

12.(byte)300==(byte)100+(short)200?

13.操作系统具有进程管理,存储管理,文件管理和设备管理的功能,下列有关描述中,哪一项是不正确的? (A)

14.this和super正确的是(C):

15.引用计数法是JVM GC算法吗?

16.能在try{}catch(){}finally{}结构的finally{}中再次抛出异常吗?

17.HTTP2新特性?

18.索引可以将随机IO变成顺序IO吗?

19.transient修饰的变量是临时变量吗?

20.高、中、低三级调度。

21.TCP第四次挥手后为什么要等待2MSL后才断开链接?等待时间为什么是2MSL?

22.进程有那些状态,并简单描述一下?

23.创建NIO客户端代码

24.获取一个类的class实例的方法有那些?

下载链接博主已将以上这些大厂面试题整理成了一个面试手册,是PDF版的

百度Java面试题及答案(2022最新版)相关推荐

  1. java面试题及答案2022,java2022最新面试题及答案

    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一.Java 基础 1. JDK 和 J ...

  2. Java面试题及答案整理( 2022年最新版,持续更新)

    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全~ 这套互联网 Java 工程师面试题包括了:MyBatis.ZK.Dubbo.EL.Redis.MySQL. ...

  3. 通往大神之路,百度Java面试题前200页。

    转载自 通往大神之路,百度Java面试题前200页. 基本概念 操作系统中 heap 和 stack 的区别 什么是基于注解的切面实现 什么是 对象/关系 映射集成模块 什么是 Java 的反射机制 ...

  4. 百度java面试题(一)2020整理

    百度后端面经2020 一面-2019/09/19 自我介绍 syncronized 各种使用,加static和普通的区别:volatile的作用,还讲了java内存模型,不用会如何 ThreadLoc ...

  5. Java面试题及答案2019版(上)

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...

  6. Java面试题以及答案精选(架构师面试题)

    整理中....未整理完 大家好,本人面试基本 "笔试死".问"基础死"."Java常识死"那一类型的....面试的过程中也从曾经被" ...

  7. 最新Java面试题及答案整理(下)

    上一篇:2019年最新Java面试题及答案整理(上) 51.类ExampleA继承Exception,类ExampleB继承ExampleA. 答: 有如下代码片断: try {throw new E ...

  8. 2019年最新Java面试题及答案整理(下)

    转载自:https://blog.csdn.net/qq_41701956/article/details/86699263 上一篇:2019年最新Java面试题及答案整理(上) 51.类Exampl ...

  9. java面试题及答案2020 大汇总

    java面试题及答案2020 先收藏后点赞,以后更新及时看 文末后续更新答案,持续更新 java面试题大汇总 百度第一篇 一面 2018/9/11 来自于牛客网 1.手写ArrayList 2.手写进 ...

  10. java面试题2019 答案

    Java 面试随着时间的改变而改变.在过去的日子里,当你知道 String 和 StringBuilder 的区别(String 类型和 StringBuffer 类型的主要性能区别其实在于 Stri ...

最新文章

  1. TVM darknet yolov3算子优化与量化代码的配置方法
  2. 那些年,我们见过的 Java 服务端乱象
  3. python文字识别库_python做文字识别一行代码都不用!
  4. Eureka获取注册信息
  5. Openssl 嵌入式arm移植笔记
  6. Android开发/源码资源汇总
  7. https://www.ptc.com/en/industry-insights/state-of-augmented-reality
  8. 超标量体系结构_计算机体系结构——以多发射和静态调度来开发ILP
  9. word设置多级标题样式及编号
  10. TOM邮箱|选出好用的邮箱让你事半功倍
  11. 矩阵补全(Matrix Completion)和缺失值预处理
  12. 史上最详细How to Use Time Information Effectively Combining with Time Shift Module for Lipreading文章记录
  13. TFN全新推出的全功能 手持式频谱分析仪 RMT系列 不仅可干扰定位 还可路测
  14. 乐pro3 android8.0,乐视Pro3 安卓7.1.2 魅族Flyme6刷机包 最新6.8.3.20R紫火版 于20180510更新...
  15. python中if有几种使用方式_在 Python 中可以使用 if 作为变量名。 (2.0分)_学小易找答案...
  16. 《MATLAB 神经网络43个案例分析》:第3章 遗传算法优化BP神经网络——非线性函数拟合
  17. 计算机应用项目中 属于科学计算应用领域,下列计算机应用项目中,属于科学计算应用领域的是(    )...
  18. 纯jsp实现数据库的连接和验证登录
  19. 08:Calling Extraterrestrial Intelligence AgainMOOC程序设计算法基础期末第八题
  20. matlab作卷积的公式,卷积相关公式的matlab代码

热门文章

  1. 雨课堂计算机基础与应用大一,雨课堂试卷批量导入Word模板.doc
  2. 计算机专业毕业论文题目大全集
  3. 杨辉三角的几种 Python 实现方法
  4. opencv学习十二(车牌识别)
  5. 电子信息工程跨保计算机、生物医学工程保研经验分享~
  6. 蒙特卡洛模拟 matlab实例,蒙特卡洛模拟的简单例子
  7. python实现sip协议_SIP协议的常见命令 - HouWeiGui的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. eclipse翻译插件,支持最新版eclipse 2022-09
  9. MATLAB 正态分布点云配准(NDT)
  10. 嵌入式系统开发项目管理