
java面试题
二王一个今
一个相信自己的菜鸟
展开
-
Java面试题(30)-java中如何避免死锁
2、避免死锁在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁。3、检测死锁允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉。2、请求与保持条件一个进程因请求资源而阻塞时,对已获得的资源保持不放。3、不剥夺条件进程已获得的资源,在未使用完之前,不能进行强行剥夺。4、循环等待条件若干进程之间形成一种头尾相接的循环等待资源关系。1、预防死锁通过设置一些限制条件,去破坏产生死锁的必要条件。4、解除死锁该方法与检测死锁配合使用。...原创 2022-07-28 21:21:06 · 947 阅读 · 0 评论 -
Java面试题(29)-java分为什么区,每个区都是干嘛的
2、堆(heap)被所有的线程共享,存放对象示例以及数组,java堆是GC的主要区域。1·、方法区(method)被所有的线程共享,方法去包含所有的类信息和静态变量。3、栈(stack)每个线程包含一个栈区,栈中保存一些局部变量等。4、程序计数器是当前现成执行的字节码的行指示器。...原创 2022-07-28 21:14:03 · 216 阅读 · 0 评论 -
Java面试题(28)-HashMap和Hashtable的区别
HashMap在多线程环境下线程不安全,Hashtable线程安全,如果要使用HashMap的话就可以使用concurrent并发包下的concurrentHashMap。HashMap的扩容方式都是以2的幂次进行扩容的,而Hashtable是以原容量的2倍+1进行扩容的。,HashMap允许存储null值,Hashtable不允许存储null值,否则会报控制指针。HashMap不包含contains方法,Hashtable不包含contains方法。Hashtable继承的Dictionary类。...原创 2022-07-28 16:39:03 · 277 阅读 · 0 评论 -
Java面试题(27)-谈谈垃圾回收机制(GC)
新生代这边用到的垃圾清理算法是复制算法,那么新创建出来的对象都会被保存在幸存者这里,那么在垃圾回收的时候,会用到可达性分析,判断哪个需要被清理,并进行标记,然后把没有标记的复制到from区域,然后将幸存者和to区域的所有对象全部删除,清除完之后会把from和to区域中的内容调换,也就是上一轮清理的幸存者到了to区域,然后这两个幸存者的年龄加1,。标记整理呢,就是想删除哪个,就对其标记,然后删除,然后对内存结构进行整理,这样就没有内存空洞了,好处就是没有内存空洞了,问题就是多了整理这一步,速度比较慢。...原创 2022-07-24 22:52:57 · 387 阅读 · 0 评论 -
Java面试题(26)-缓存三大问题雪崩,击穿和穿透
和总的来说,这三个问题都是因为高并发导致的那么雪崩就是因为海量请求,导致缓存宕机,然后间接导致数据库和程序代码都崩坏。总结导致程序中的各个环节连锁崩溃,就是雪崩。那么解决的方法,就是比如说在我们的网关做,或者或者使用别的方法进行,比如关键词就是,这个就是针对单个功能进行多次请求,比如双十一,或者12306这种会在瞬间有多次请求,那么正好在这个时间点,了,导致本来应该缓存处理的请求,到了数据库的层面,直接了,就是我们的击穿。解决办法呢也是可以通过解决的,或者。......原创 2022-07-24 22:24:35 · 1154 阅读 · 1 评论 -
Java面试题(25)乐观锁和悲观锁
但是,如果修改回来对比的时候,发现快照和现在的数据不相同,那么就证明在我们修改这个数据的时候,有别的乱臣贼子修改了这个数据,那么我们也是有脾气的,我们就不做修改了,直接报错,或者重试。),然后再去进行操作,等操作完成之后,拿快照和现在的数据进行对比,如果快照和现在的数据相同,就证明在这期间没有别人过来修改这个数据,那么我就可以进行更新操作了。乐观锁呢就不一样,乐观锁就和悲观锁相反了,人家比较自信,人家就不锁,但是,人家也不傻,他会生成一个类似于快照的东西(这个生成类似于快照的东西,就是用到了我们的。...原创 2022-07-24 22:01:55 · 342 阅读 · 0 评论 -
Java面试题(24)-单例模式的几种写法
第一种写法:懒汉式。顾名思义,很" 懒惰 ",只有实例要用到的时候才创建。记得加上synchronized,不然会有线程安全的问题,比如当有多个线程同时调用getInstance()的时候,就会创建多个实例。加synchronized,可以用于多线程。不加synchronized,不可以用于多线程,只能用于单线程,不然会有线程安全问题。第二种写法:饿汉式。顾名思义,很" 饥饿 ",所以第一时间就是去找吃的,也就是第一时间创建实例。好处:因为没有加synchronized,也就是没有加锁,所以执行效率比懒汉式原创 2022-06-30 17:55:10 · 199 阅读 · 0 评论 -
Java面试题(23)-Http Https TCP UDP
很常见的四个知识,但是突然发现如果问题它是什么,我不能很清楚流畅的解释出来,所以在此记录一下:Http协议Https Http和Https区别:TCP: UDP: TCP和UDP:原创 2022-06-21 22:23:09 · 645 阅读 · 0 评论 -
Java面试题(22)-HTTP 协议包括哪些请求?
最常用的就是GET POST PUT DELETE原创 2022-06-15 22:13:50 · 132 阅读 · 0 评论 -
Java面试题(21)-HTTP 响应状态码
-HTTP 响应状态码原创 2022-06-15 22:12:55 · 194 阅读 · 0 评论 -
Java面试题(20)-SpringMVC 如何处理统一异常?
统一异常处理一般用注解,另一种方法就是自定义类原创 2022-06-14 19:58:17 · 159 阅读 · 0 评论 -
Java面试题(19)-SpringMVC 怎么样设定重定向和转发的?
转发:重定向:原创 2022-06-14 19:56:19 · 213 阅读 · 0 评论 -
Java面试题(18)-SpringMVC 的常用注解有哪些?
SpringMVC 的常用注解有哪些?原创 2022-06-14 19:51:16 · 223 阅读 · 0 评论 -
Java面试题(17)-resultType和resultMap的区别
当数据库返回的结果集中的字段和实体类中的属性名一一对应时,resultType可以自动将结果封装到实体中当数据库返回的结果集中的字段和实体类中的属性名存在不对应情况时,可以使resultMap自定义映射关系......原创 2022-06-09 19:16:24 · 254 阅读 · 0 评论 -
Java面试题(16)-mybatis动态sql
if set where choose when foreach原创 2022-06-09 19:13:41 · 302 阅读 · 0 评论 -
Java面试题(15)-MyBatis 是如何进行分页的?分页插件的原理是什么?
mybatis是使用分页插件PageHelper进行分页的, 其原理就是底层通过拦截器,进行拦截,然后根据传入的参数拼接sql中的limit,达到分页的效果。原创 2022-06-09 19:11:55 · 1793 阅读 · 0 评论 -
Java面试题(14)-谈谈你对mysql索引的了解
1、什么是索引2、索引的作用或者说优点是什么 3、索引结构4、B+tree结构(B-tree中叶子节点没有链表相连,并且不是所有的数据都在叶子节点上,提升上去就直接上去了,不会在子节点留一份) 5、Hash结构 6、Hash结构的特点 7、为什么选择用B+tree结构8、索引的分类 9、索引的语法.........原创 2022-06-06 18:19:31 · 116 阅读 · 0 评论 -
Java面试题(13)-drop、delete 与 truncate
drop delete truncate原创 2022-06-08 20:28:58 · 308 阅读 · 0 评论 -
Java面试题(12)-mysql事务相关问题
1、数据库事务四大特性(ACID---首字母缩写):2、事务隔离性带来的问题在并发事务没有进行隔离的情况下,会发生如下问题:3、事务隔离级别原创 2022-06-04 21:19:07 · 182 阅读 · 0 评论 -
Java面试题(11)-Spring Boot 中的 starter
starter是springboot的依赖组合,在我们的项目中直接引入某一方面的starter的依赖,就可以直接引入这方面的多个依赖,无需我们一个个引入,可以获得spring相关技术的一站式服务。官方的starter都在org.springframework.boot组下,并且都以spring-boot-starter开头,便于我们搜索和使用,当然还有其他的,比如mybatis-spring-boot-starter,就会将mybatis放到开头,也让我们的查找非常的便捷和有规律可循。当然也不是全部的开发者原创 2022-06-03 22:38:30 · 321 阅读 · 0 评论 -
Java面试题(10)-三范式与反三范式
什么是三范式呢?什么是反三范式? 一范式表示图片:这里的话就是违背了第一范式,因为中国和北京是可以拆分开的。并没有保证每一列的原子性二范式表示图片:第二范式表示一张表只做一件事,意思是只传递一个主线信息,比如下图,每张表都有唯一要表达的事情。三范式表示图片:三范式的话就是列与列之间,没有传递性,也就是说,如果其中一列可以通过其他列经过计算得到,那么就是违反了第三范式,也就是传递依赖。比如这里的总金额,可以通过单价和数量得到,所以就违背的第三范式。反三范式:那么在三范式的基础上,加入有这样两张表:如果此刻需求原创 2022-06-03 22:27:42 · 423 阅读 · 0 评论 -
Java面试题(9)-springmvc执行流程
springmvc执行流程springMvc主要应用于表示层,和之前的servlet开发相比较,极大的简化了开发.用一个controller就可以包含很多servlet的请求,参数的获取也变得灵活多样并且简单。可以通过springmvc配置拦截器啊什么的组件,更加便捷的进行开发那么springmvc的执行过程是怎么样的呢,可以用这两张图梳理一下:springmvc中加入了一个前端控制器的概念,将所有的请求交给前端控制器来处理,而真正的业务逻辑成为处理器。那么当一次请求过来的时候sprin.原创 2022-05-31 10:45:26 · 418 阅读 · 0 评论 -
Java面试题(8)-Spring Factories机制
Spring Factories机制那么这篇文章是根据这位博主的文章我看完之后收获很多然后自己精简了自己想记录的写了下来:Spring Factories机制_希波克拉的博客-优快云博客_springfactories机制首先就是什么事Spring Factoryies机制:Spring Factories机制和Java SPI的扩展机制类似,Spring Boot采用了spring.factories的扩展机制,在很多spring的starter 包中都可以看到,通过读取 ...原创 2022-05-30 18:06:26 · 199 阅读 · 0 评论 -
Java面试题(7)-SpringBoot 启动时都做了什么?
SpringBoot 启动时都做了什么? 既然说到这里,那么就分两方面都说一下springboot的启动过程SpringApplication.run();这张图相当的清晰明了,可以自己搭配源码一步步点进去查看探索。图片来源:SpringBoot的run方法做了些什么_不会编码的灯泡的博客-优快云博客_springbootrun方法做了什么第二方面呢,就是注解方面......原创 2022-05-29 22:33:19 · 1444 阅读 · 0 评论 -
Java面试题(6)-雪花算法
雪花算法首先雪花算法为什么出现呢,因为现在的服务基本是分布式、微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性。如果还是借助数据库主键自增的形式,那么可以让不同表初始化一个不同的初始值,然后按指定的步长进行自增。例如有3张拆分表,初始主键值为1,2,3,自增步长为3。而这种方法又有些许的复杂,不同互联网公司也有自己内部的实现方案。雪花算法是其中一个用于解决分布式 id 的高效方案,也是许多互联网公司在推荐使用的。什么是雪花算法呢?Snow.原创 2022-05-29 19:53:37 · 731 阅读 · 0 评论 -
Java面试题(5)-SpringBoot、Spring MVC 和 Spring有什么区别?
SpringBoot、Spring MVC 和 Spring有什么区别?先从spring说起,首先spring的核心思想就是Ioc和aop,ioc容器和依赖注入将对象的控制权交给了spring来控制,我们需要对象的时候不需要再手动new了,直接向spring容器要就好了。底层利用了java反射机制,而aop,官方描述为面向切面编程,可以通俗的理解为可以部分方法做前置和后置以及异常后处理,底层使用了动态代理,通过增强逻辑来完成aop的所谓切面。springMvc主要应用于表示层,和之前的se.原创 2022-05-28 20:59:49 · 507 阅读 · 0 评论 -
Java面试题(4)-为什么用SpringBoot?
为什么用SpringBoot?springboot在spring的基础上,简化了配置,让程序员更加专注于业务逻辑本身,提高开发效率。springboot的优点可以从三个方面说首先就是依赖,springboot将常用的依赖做了统一的依赖管理和组装,简化了程序员的依赖导入,并且在此基础上对依赖做了版本控制,避免了很多版本不一致导致的问题。其次就是配置,spring开发很不好的一点就是配置文件比较多,比较繁杂,springboot很好的解决了这一问题,通过约定由于配置这一思想,很好的简化了程序.原创 2022-05-28 20:28:19 · 548 阅读 · 0 评论 -
Java面试题(3)-类加载的过程
类加载的过程类加载有三个阶段,分别是加载,连接(验证,准备,解析)和初始化。加载:通过类的全限定类名获得类的二进制字节流连接-验证:判断文件中的信息是否符合java虚拟机的规范,有没有安全隐患连接-准备:为静态变量分配内存,开辟空间并初始化连接-解析:将二进制流中的符号引用替换为直接引用,如果用到了其他类就加载其他类初始化:根据程序员的制定的主观逻辑初始化变量以及初始化其他资源......原创 2022-05-18 22:40:43 · 303 阅读 · 0 评论 -
java面试题(2)-面试题: #和$的区别
面试题: #和$的区别原创 2022-05-14 10:45:29 · 1383 阅读 · 0 评论 -
JAVA面试题(1)-谈一谈你对反射的了解:
java面试题自总结原创 2022-05-12 22:14:46 · 215 阅读 · 0 评论