20道BAT面试官最喜欢问的JVM+MySQL面试题(含答案解析)

1. 内存模型以及分区,需要详细到每个区放什么。
JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,
class 类信息常量池(static 常量和 static 变量)等放在方法区
new:
方法区:主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字
节码)等数据
堆:初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要
在堆上分配
栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操
作数栈,方法出口等信息,局部变量表存放的是 8 大基础类型加上一个应用类型,所
以还是一个指向地址的指针
本地方法栈:主要为 Native 方法服务
程序计数器:记录当前线程执行的行号

2. 堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。
堆里面分为新生代和老生代(java8 取消了永久代,采用了 Metaspace),新生代包
含 Eden+Survivor 区,survivor 区里面分为 from 和 to 区,内存回收时,如果用的是复
制算法,从 from 复制到 to,当经过一次或者多次 GC 之后,存活下来的对象会被移动
到老年区,当 JVM 内存不够用的时候,会触发 Full GC,清理 JVM 老年区
当新生区满了之后会触发 YGC,先把存活的对象放到其中一个 Survice
区,然后进行垃圾清理。因为如果仅仅清理需要删除的对象,这样会导致内存碎
片,因此一般会把 Eden 进行完全的清理,然后整理内存。那么下次 GC 的时候,
就会使用下一个 Survive,这样循环使用。如果有特别大的对象,新生代放不下,
就会使用老年代的担保,直接放到老年代里面。因为 JVM 认为,一般大对象的存
活时间一般比较久远。

3. 对象创建方法,对象的内存分配,对象的访问定位。
new 一个对象

4. GC 的两种判定方法:
引用计数法:指的是如果某个地方引用了这个对象就+1,如果失效了就-1,当为 0 就
会回收但是 JVM 没有用这种方式,因为无法判定相互循环引用(A 引用 B,B 引用 A)
的情况
引用链法: 通过一种 GC ROOT 的对象(方法区中静态变量引用的对象等-static 变
量)来判断,如果有一条链能够到达 GC ROOT 就说明,不能到达 GC ROOT 就说明
可以回收

5. SafePoint 是什么
比如 GC 的时候必须要等到 Java 线程都进入到 safepoint 的时候 VMThread 才能开始
执行 GC,

  1. 循环的末尾 (防止大循环的时候一直不进入 safepoint,而其他线程在等待它进入
    safepoint)
  2. 方法返回前
  3. 调用方法的 call 之后
  4. 抛出异常的位置

6. GC 的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用
在什么地方,如果让你优化收集方法,有什么思路?
先标记,标记完毕之后再清除,效率不高,会产生碎片
复制算法:分为 8:1 的 Eden 区和 survivor 区,就是上面谈到的 YGC
标记整理:标记完毕之后,让所有存活的对象向一端移动

7. GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。
并行收集器:串行收集器使用一个单独的线程进行收集,GC 时服务有停顿时间
串行收集器:次要回收中使用多线程来执行
CMS 收集器是基于“ 标记— 清除”算法实现的,经过多次标记才会被清除
G1 从 整体来看是基于“ 标记— 整理”算法实现的收集器,从 局部(两个 Region 之间)
上来看是基于“ 复制”算法实现的

8. Minor GC 与 Full GC 分别在什么时候发生?
新生代内存不够用时候发生 MGC 也叫 YGC,JVM 内存不够的时候发生 FGC

9. 几种常用的内存调试工具:jmap、jstack、jconsole、jhat
jstack 可以看当前栈的情况,jmap 查看内存,jhat 进行 dump 堆的信息
mat(eclipse 的也要了解一下)

10. 类加载的几个过程:
加载、验证、准备、解析、初始化。然后是使用和卸载了
通过全限定名来加载生成 class 对象到内存中,然后进行验证这个 class 文件,包括文
件格式校验、元数据验证,字节码校验等。准备是对这个对象分配内存。解析是将符
号引用转化为直接引用(指针引用),初始化就是开始执行构造器的代码

1. 数据库三范式是什么?

  1. 第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系
    统都满足第一范式数据库表中的字段都是单一属性的,不可再分)
  2. 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足
    第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每
    个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储
    各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。
  3. 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三
    范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关
    键字信息。 >所以第三范式具有如下特征: >>1. 每一列只有一个
    值 >>2. 每一行都能区分。 >>3. 每一个表都不包含其他表已经包含
    的非主关键字信息。

2. 有哪些数据库优化方面的经验?

  1. 用 PreparedStatement, 一般来说比 Statement 性能高:一个 sql
    发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。
  2. 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,
    那在设计数据库时就去掉外键。
  3. 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等
  4. UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结
    果集中不包含重复数据且不需要排序时的话,那么就使用 UNION
    ALL。 >>UNION 和 UNION ALL 关键字都是将两个结果集合并为一
    个,但这两者从使用和效率上来说都有所不同。 >1. 对重复结果的处
    理:UNION 在进行表链接后会筛选掉重复的记录,Union All 不会去除
    重复记录。 >2. 对排序的处理:Union 将会按照字段的顺序进行排
    序;UNION ALL 只是简单的将两个结果合并后就返回。

3. 请简述常用的索引有哪些种类?

  1. 普通索引: 即针对数据库表创建索引
  2. 唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值
    必须唯一,但允许有空值
  3. 主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的
    时候同时创建主键索引
  4. 组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。
    即将数据库表中的多个字段联合起来作为一个组合索引。

4. 以及在 mysql 数据库中索引的工作机制是什么?
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更
新数据库表中数据。索引的实现通常使用 B 树及其变种 B+树

5.MySQL 的基础操作命令:

  1. MySQL 是否处于运行状态:Debian 上运行命令 service mysql
    status,在 RedHat 上运行命令 service mysqld status
  2. 开启或停止 MySQL 服务 :运行命令 service mysqld start 开启服
    务;运行命令 service mysqld stop 停止服务
  3. Shell 登入 MySQL: 运行命令 mysql -u root -p
  4. 列出所有数据库:运行命令 show databases;
  5. 切换到某个数据库并在上面工作:运行命令 use databasename; 进入
    名为 databasename 的数据库
  6. 列出某个数据库内所有表: show tables;
  7. 获取表内所有 Field 对象的名称和类型 :describe table_name;

6.mysql 的复制原理以及流程。
Mysql 内建的复制功能是构建大型,高性能应用程序的基础。将 Mysql 的数据
分布到多个系统上去,这种分布的机制,是通过将 Mysql 的某一台主机的数据
复制到其它主机(slaves)上,并重新执行一遍来实现的。 * 复制过程中一
个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将
更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志
可以记录发送到从服务器的更新。 当一个从服务器连接主服务器时,它通知主
服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生
的任何更新,然后封锁并等待主服务器通知新的更新。 过程如下 1. 主服务器
把更新记录到二进制日志文件中。 2. 从服务器把主服务器的二进制日志拷贝
到自己的中继日志(replay log)中。 3. 从服务器重做中继日志中的时间,
把更新应用到自己的数据库上。

7.mysql 支持的复制类型?

  1. 基于语句的复制: 在主服务器上执行的 SQL 语句,在从服务器上执行
    同样的语句。MySQL 默认采用基于语句的复制,效率比较高。 一旦发
    现没法精确复制时,会自动选着基于行的复制。
  2. 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执
    行一遍. 从 mysql5.0 开始支持
  3. 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法
    精确的复制时,就会采用基于行的复制。

8.mysql 中 中 varchar 与 与 char 的区别以及 varchar(50) 中的 50 代表的涵
义?

  1. varchar 与 char 的区别: char 是一种固定长度的类型,varchar 则是
    一种可变长度的类型.
  2. varchar(50)中 50 的涵义 : 最多存放 50 个字节
  3. int(20)中 20 的涵义: int(M)中的 M indicates the maximum
    display width (最大显示宽度)for integer types. The maximum
    legal display width is 255.

9. 表中有大字段 X (例如:text 类型),且字段 X 不会经常更新,以读为
为主,将该字段拆成子表好处是什么?

如果字段里面有大字段(text,blob)类型的,而且这些字段的访问并不多,这
时候放在一起就变成缺点了。 MYSQL 数据库的记录存储是按行存储的,数据
块大小又是固定的(16K),每条记录越小,相同的块存储的记录就越多。此
时应该把大字段拆走,这样应付大部分小字段的查询时,就能提高效率。当需
要查询大字段时,此时的关联查询是不可避免的,但也是值得的。拆分开后,
对字段的 UPDAE 就要 UPDATE 多个表了

10.MySQL 中 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现)
的?

InnoDB 行锁是通过给索引上的索引项加锁来实现的,这一点 MySQL 与
Oracle 不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB 这
种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB 才使用行级
锁,否则,InnoDB 将使用表锁!

原文地址:https://blog.51cto.com/14442094/2427523

时间: 2024-08-01 21:50:51

20道BAT面试官最喜欢问的JVM+MySQL面试题(含答案解析)的相关文章

求职Python开发,面试官最喜欢问的9个问题【附答案】

0. 概述 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了一些Python面试官经常问的问题,供大家参考学习. 相信大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发.爬虫.django.数据挖掘等,零基础到项目实战的资料都有整

走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串

原文:走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串 对大量数据进行查询时,可以应用到索引技术.索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有效地使用索引可以提高数据的查询效率.大家面试初级.中级或者高级程序员的时候应该大部分都会被问到这样一些问题,你了解索引吗?你知道索引的分类吗?你知道这些索引的区别吗?你如何去创建有效的索引.本章让大家学会反问面试官 hold住全场. --_____-- 友情客串 最近面试的文章比较火 客串一下 我只

一线大厂面试官最喜欢问的15道Java多线程面试题

前言 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得更多职位,那么你应该准备很多关于多线程的问题. 他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.现在引用Java5并发包关于并发工具和并发集合的问题正在增多.那些问题中ThreadLocal.Blocking Queue.Counting Semaphore和ConcurrentHashMap比较流行. Java多线程面试题及

2019年面试官最喜欢问的28道ZooKeeper面试题

前言 ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效.功能稳定的系统提供给用户. ZooKeeper 面试题 1. ZooKeeper 是什么? 2. ZooKeeper 提供了什么? 3. Zookeeper 文件系统 4. ZAB 协议? 5. 四种类型的数据节点 Znode 6. Z

求职Python开发,面试官最喜欢问的几个问题

关注公众号「Python专栏」,后台回复:简历模板,获取给大家准备的价值99元的程序员简历模版11份. ![Python专栏二维码](https://img-blog.csdnimg.cn/20190228220401806.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTIzNjU4Mjg=,size_4,color_FFFF

面试官最喜欢问的CAS还不会?怎么和他吹牛?!一文带你搞懂CAS

后端开发中大家肯定遇到过实现一个线程安全的计数器这种需求,根据经验你应该知道我们要在多线程中实现?共享变量?的原子性和可见性问题,于是锁成为一个不可避免的话题,今天我们讨论的是与之对应的无锁 CAS.本文会从怎么来的.是什么.怎么用.原理分析.遇到的问题等不同的角度带你真正搞懂 CAS. 为什么要无锁 我们一想到在多线程下保证安全的方式头一个要拎出来的肯定是锁,不管从硬件.操作系统层面都或多或少在使用锁.锁有什么缺点吗?当然有了,不然 JDK 里为什么出现那么多各式各样的锁,就是因为每一种锁都有

Java面试官最爱问的volatile关键字

在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用volatile关键字作为切入点呢?为什么爱问volatile关键字 爱问volatile关键字的面试官,大多数情况下都是有一定功底的,因为volatile作为切入点,往底层走可以切入Java内存模型(JMM),往并发方向走又可接切入Java并发编程,当然,再深入追究,JVM的底层操作.字节码的操作

python web为什么要学数据结构与算法面试官为什么总问那几个算法和线性表二叉树

算法是什么? 举个简单的例子 当年刘景生病危刘琦被卷入继位之事 无奈求助于诸葛亮 以上古兵书为由 邀孔明阁楼相谈.... 诸葛亮曾说 那部阵书开篇就是阵法源自于心法 所以古代军师进步也是看兵法 算法也是同理 虽然我们作为web后端开发人员 但是每天所见所闻日子久也就适应了. 但是想要再进一步 两种方法 一 多看高质量代码 二 看算法 我们作为web开发可能算法运用的不是很多 每天也就是写接口调接口和产品经理撕 但是算法最重要的地方是会帮你扩充你的逻辑思维 可能刚看算法的人认为太难了我真学不来 举

2019年必须掌握的29个微服务面试问题(含答案解析)

这29个微服务面试题基本涵盖了方方面,希望对你有所帮助! 一.什么是Spring Cloud? 在微服务中,SpringCloud是一个提供与外部系统集成的系统.它是一个敏捷的框架,可以短平快构建应用程序.与有限数量的数据处理相关联,它在微服务体系结构中起着非常重要的作用.以下为 Spring Cloud 的核心特性: 版本化/分布式配置. 服务注册和发现. 服务和服务之间的调用. 路由. 断路器和负载平衡. 分布式消息传递. 二.什么是Spring Boot? Spring boot是微服务面