Java面试题精选
jdk
┌──────────────┬───────────────────────────────────────────────────────┐
│ │ │
├──────────────┼───────────────────────────────────────────────────────┤
│ │ │
├──────────────┼──────────┤
│ │
├──────────────┴──────────┘
┏━━┳━━━┓
┃ ┃ ┃
┣━━╋━━━┫
┗━━┻━━━┛
1. JDK 和 JRE 的区别
JDK: Java Development Kit 的简称, 提供了 Java 的开发环境和运行环境.
JRE: Java Runtime Environment 的简称, Java 运行环境, 为 Java 的运行提供所需环境.
具体来说: JDK 包含了 JRE, 同时包含了编译 Java 源码的编译器 Javac, 还包含了很多 Java 程序调试和分析的工具.
简单来说: 如果只要运行 Java 程序, 只需要安装 JRE 就可以了. 如果还需要编写 Java 程序, 就需要安装 JDK.
2. == 和 equals 的比较
== 对于基本类型是比较值, 对于引用类型是比较引用.
equals 默认情况是比较引用, 但是很多类重写了 equals 方法, 如 String、Integer 重写成了值比较.
7. String、StringBuffer 和 StringBuilder 的区别
┌──────────────┬─────────────────────────────────────┐
│String │ 不可变的对象. 每次操作都会生成新的 │
├──────────────┬─────────────────────────────────────┤
│StringBuffer │ 非线程安全的, 单线程使用. │
├──────────────┬─────────────────────────────────────┤
│StringBuilder │ 线程安全, 多线程使用. │
└──────────────┴─────────────────────────────────────┘
10. String 类的常用方法
┌──────────────┬────────────────────────┐
│ indexOf() │ 返回字符索引
├──────────────┼────────────────────────┤
│ charAt() │ 返回索引处字符
├──────────────┼────────────────────────┤
│ replace() │ 字符串替换
├──────────────┼────────────────────────┤
│ trim() │ 去除字符串两段空白
├──────────────┼────────────────────────┤
│ split() │ 分隔字符串成数组
├──────────────┼────────────────────────┤
│ getBytes() │ 返回字符串的byte数组
├──────────────┼────────────────────────┤
│ length() │
├──────────────┼────────────────────────┤
│ toLowerCase()│ 转小写字母
├──────────────┼────────────────────────┤
│ toUpperCase()│ 转大写
├──────────────┼────────────────────────┤
│ subString() │ 截取字符串
├──────────────┼────────────────────────┤
│ equals() │ 值比较(已重写)
└──────────────┴────────────────────────┘
31. 迭代器
迭代器接口提供遍历任何 Collection 的接口. 迭代器允许调用者在迭代过程中移除元素.
35. 并行(Parallel) 和 并发(Concurrent)
┌──────────────┬─────────────────────────────────────────────────┐
│Parallel │ 多个处理器或多核同时处理多个任务
├──────────────┼─────────────────────────────────────────────────┤
│Concurrent │ 多个人物在同一个 Cpu 核上, 按细分的时间片轮流交替执行.
└──────────────┴─────────────────────────────────────────────────┘
114. ORM
ORM(Object Relation Mapping) 对象关系映射, 把数据库中的关系数据映射称为程序中的对象.
167. ACID
┌───────────────────────────────────────────────────────────┐
│ Atomicity 原子性; 一个事务 如果过程中发生错误, 会 整个回滚(Rollback), 就像没有执行过一样.
├───────────────────────────────────────────────────────────┤
│ Consittency 一致性; 在事务结束后, 数据库的完整性没有被破坏. 写入的数据完全符合所有的约束、触发器、级联回滚等
├───────────────────────────────────────────────────────────┤
│Isolation 隔离性;
│ 数据库允许多个并发事务同时对其数据进行读写和修改的能力,
│ 隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致.
│ 事务隔离可以分为不同级别: 读未提交、读提交、可重复读和串行化
├───────────────────────────────────────────────────────────┤
│Durability 持久性
└───────────────────────────────────────────────────────────┘
173. 事务隔离级别
配置在 mysql.ini中
┌──────────────────────────────────────────┐
│transaciton-isolation = REPEATABLE-READ │
└──────────────────────────────────────────┘
可配置的值:
a) READ-UNCOMMITTED 未提交读; 最低隔离级别,事务未提交前,就可以被其他事务读取(会出现幻读、脏读、不可重复读)
b) READ-COMMITTED 提交读; 一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读)
c) REPEATEABLE-READ 可重复读; [默认级别]保证多次读同一个数据时, 其值和事务开始时的内容是一致的,禁止读取别的事务未提交的数据(会造成幻读)
d) SERIALIZABLE 序列化; 代价最高的最安全的隔离级别,可以防止脏读、不可重复读、幻读
脏读: 一个事务能够读取到另一个事务中还未提交的数据. 比如,某个事务尝试插入数据A, 此时该事务还未提交,然后另一个事务读取到了这个记录A.
不可重复读: 同一个事务内,多次读取同一条数据,而每次读取到的值可能不同.
幻读: 一个事务内同样的读取条件,读取到的数据个数不一样,原因是被另一个事务删除或新增了符合条件的数据.
更多 https://www.cnblogs.com/balfish/p/8298296.html
174. MySql中的引擎
a) InnoDB: 提供了对 ACID 事务的支持, 还提供了行级锁和外键约束.
由于锁的粒度小, 写操作不会锁定全表,所以在并发高的场景下会提升效率.
b) MyIASM: mysql的默认引擎,不提供事务的支持也不支持行级锁和外键.
插入和更新操作时会锁定整个表,所以会导致效率降低.
如果表的读操作远远多于写操作时,并且不需要事务支持时可以优先选择 MyIASM.
175. MySQL 的表级锁和行级锁
MyIASM 只支持表锁, InnoDB 支持表锁和行锁,默认为行锁.
a) 表级锁: 开销小,加锁快,不会出现死锁.锁的粒度大,发生锁冲突的概率最高,并发量最低.
b) 行级锁: 开销大,加锁慢,会出现死锁.锁的粒度笑,发生锁冲突的概率小,并发读最高.
176. 乐观锁和悲观锁
a)乐观锁:
每次拿数据的时候都认为别人不会修改,所以不会上锁,但提交更新的时候会判断一下期间有没有人更新这个数据.
数据库的乐观锁需要自己实现一下,在表字段中加一个version字段,每次修改成功增加1,每次修改的时候对比一下之前的version和现在的version是否一致,如果不一致就不修改了,这就是乐观锁.
b)悲观锁:
每次拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想拿这个数据就会被阻止,直到这个锁被释放.
177. MySql 问题排查
a) 使用 show processlist 命令查看当前所有的连接信息
b) 使用 explain 命令查看 sql语句的执行计划
c) 开启慢查询日志
178. MySql 性能优化
a)为搜索字段创建索引
b)避免使用 select *,列出要查询的字段
c)垂直分割分表
d)选择正确的存储引擎
179. Redis 使用场景
a)记录帖子点赞数、点击数、评论数
b)缓存近期热帖
c)缓存文章详情信息
d)记录用户会话信息
180. Redis 常用功能
a)数据缓存
b)分布式锁
c)支持数据持久化
d)支持事务
e)支持消息队列
181. Redis和 MemCache的区别
a)存储方式不同:
MemCache把数据全部存在内存中,断电后会挂掉;
MemCache数据不能超过内存大小;
Redis 有部分存储在硬盘中,能保证数据的持久性.
b)数据支持类型:
MemCache对数据类型的支持相对简单;
Rdies支持的数据类型要多得多.
c)底层模型不同
d)value值大小:Redis最大可以达到1Gb; MemCache只有1Mb;
183. Redis 中的缓存穿透
a)缓存穿透:
指查询一个一定不存在的数据,由于缓存中找不到时需要从数据库查询,查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库中查询,造成数据库的鸭梨.
比如:查询 id 为-1的,id不会有为-1的记录.
b)解决方案:如果查询结果为空,也放入缓存中,只不过设定的缓存过期时间较短,比如设置为60秒.
183-2. Redis 中的缓存雪崩
指在某一个时间段时,缓存集中过期失效.
栗子一:
双十一零点,发生了一波抢购,在短时间内集中的把商品数据放入了缓存,并设置缓存过期时间为1小时.
凌晨一点的时候,这批商品数据就过期了,访问查询就落到了数据库上.
解决方案: 不同类商品设置不同的缓存周期.同类商品加上随机因子.这样可以尽可能的分散缓存过期时间.
栗子二:
比较致命的缓存雪崩是缓存服务器某个节点宕机或断网.对数据库造成的压力是不可预知的,很可能瞬间把数据库拖垮.
183-3. Redis 中的缓存击穿
指某一个 key 非常热点,不停的有人访问这条数据,在这个 key 过期的瞬间会击破缓存,直接请求数据库.
解决方案:
让这条缓存永不过期??
183-4. GoLang 中使用 Redis
184. Redis 支持的数据类型
string、list、hash(字典)、set(集合)、zset(sorted set -- 有续集合)
这些数据类型都支持push/pop、add/remove及取交集并集差集等操作,而且这些操作都是原子性的.
185. 保持 Redis 缓存和数据库数据一致
a)合理设置缓存的过期时间
b)新增、更改、删除数据库操作时同步更新 Redis,可使用事务机制来保持数据的一致性
186. Redis 持久化
Redis 的持久化有两种策略:
a)RDB(Redis Database) 指定的时间间隔对数据进行快照存储.
b)AOF(Append Only File) 每收到一个写命令都通过 write 函数追加到文件中.
189. Redis 实现分布式锁
Java面试题精选的更多相关文章
- java面试题—精选30道Java笔试题解答(二)
摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...
- 阿里、华为、腾讯Java技术面试题精选
阿里.华为.腾讯Java技术面试题精选 2017-10-27 19:30技术/腾讯/华为 JVM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据读 ...
- Java面试题精选(二)线程编程、数据库理论和Jdbc部分
—— 线程编程.数据库理论和Jdbc部分内容 —— 数据库的开发应用想必是我们日常所碰到最多的知识点了,大致可分为:oracle.MySQL.SQL Server.Hadoop. NoSQL. ...
- Java面试题精选(三) JSP/Servlet Java面试逻辑题
-- JSP/Servlet Java面试逻辑题 -- 很显然,Servlet/JSP的WEB前端动态制作的重要性比HTML/CSS/JS的价值高很多,但我们都知道他们都是建立在HT ...
- Java面试题精选(一)基础概念和面向对象
-- 基础概念和面向对象 -- 全程将为大家剖析几大部分内容,由于学习经验有限,望大家谅解并接受宝贵的意见: 基础概念部分 ★★ : 常出现的高频率单词的区别理解(异常. ...
- java面试题—精选30道Java笔试题解答(一)
下面都是我自己的答案非官方,仅供参考,如果有疑问或错误请一定要提出来,大家一起进步啦~~~ 1. 下面哪些是Thread类的方法() A start() B run() C exit() D getP ...
- Java面试题精选,大型网站系统架构你不得不懂的10个问题
作者:JavaGuide(公众号) 下面这些问题都是一线大厂的真实面试问题,不论是对你面试还是说拓宽知识面都很有帮助.之前发过一篇8 张图读懂大型网站技术架构 可以作为不太了解大型网站系统技术架构朋友 ...
- 从1.6W名面试者中收集的Java面试题精选汇总(内附知识脑图)
本篇的面试题是接之前读者的要求,发出来的. 首先,声明下,以下知识点并非全部来自BAT的面试题. 如果觉得在本文中笔者总结的内容能对你有所帮助,可以点赞关注一下. 本文会以引出问题为主,后面有时间 ...
- 【笔试题】精选30道Java笔试题解答
转自于:精选30道Java笔试题解答 精选30道Java笔试题解答 1. 下面哪些是Thread类的方法() A. start() B. run() C. exit() D. getPriority( ...
随机推荐
- 【npm】利用npm安装/删除/发布/更新/撤销发布包
什么是npm? npm是javascript的包管理工具,是前端模块化下的一个标志性产物 简单地地说,就是通过npm下载模块,复用已有的代码,提高工作效率 1.从社区的角度:把针对某一特定问题 ...
- 【BZOJ3193】 [JLOI2013]地形生成
BZOJ3193 [JLOI2013]地形生成 Solution 第一问不是很简单吗? 直接计数就好了. 第二问思考无果看了看hyj神仙的代码,发现可以dp求解. 具体可以看代码(其实主要是我说不清楚 ...
- MariaDB 数据类型与运算符(4)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)
组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...
- svn重新安装后报You need to upgrade the working copy first错误
问题来源 最近重新安装了操作系统,安装了一个最新版的svn,提交代码的时候报了一个错误:You need to upgrade the working copy first,!网上找了很多解决办法,都 ...
- 基于alpine用dockerfile创建的nginx镜像
1.下载alpine镜像 [root@docker43 ~]# docker pull alpine Using default tag: latest Trying to pull reposito ...
- [Umbraco] 入门教程(转)
如在页面上显示Helloword. 设计:在umbraco里,最基础的一个概念是文档类型(document type),每个文档其实可以看成一个页面类型.比如我们要创建的两个页面,每个页面都需要显示自 ...
- nodejs&mongo&angularjs
http://www.ibm.com/developerworks/cn/web/wa-nodejs-polling-app/
- (转)Python Mixins 机制
原文:https://github.com/dengshuan/notes/blob/master/techs/python-mixins.org https://blog.csdn.net/u012 ...
- python获取动态网站上面的动态加载的数据(初级)
我们在处理一些网站数据的时候,有时候我们需要的数据很多都是动态加载的,而不都是静态的,以下以一个实例来介绍简单的获取动态数据,首先申明本人小白,还在学习python中,这个方法还是比较笨拙的,但是对于 ...