![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java面试
每天多学一点点.
这个作者很懒,什么都没留下…
展开
-
StackOverflow和OOM的区别
1 StackOverflow每当java程序启动一个新的线程时,java虚拟机会为他分配一个栈,java栈以帧为单位保持线程运行状态;当线程调用一个方法时,jvm压入一个新的栈帧到这个线程的栈中,只要这个方法还没返回,这个栈帧就存在。如果方法的嵌套调用层次太多(如递归调用),随着java栈中的帧的增多,最终导致这个线程的栈中的所有栈帧的大小的总和大于-Xss设置的值,而产生StackOver...原创 2019-11-19 10:06:32 · 2984 阅读 · 0 评论 -
数据库水平切分,垂直切分
先水平切分,然后垂直切分.1.什么是垂直切分?垂直切分是根据业务来拆分数据库,同一类业务的数据表拆分到一个独立的数据库,另一类的数据表拆分到其他数据库。比如说一个新零售的电商数据库,我们可以把跟商品相关的数据表拆分成一个数据库,然后在这些数据表的基础之上,构建出商品系统。比如用JAVA或者PHP语言,创建出一个商城系统。然后把跟进销存相关的数据表拆分到另外一个数据库上,再用程序构建出仓库系统...原创 2019-11-15 15:24:51 · 595 阅读 · 0 评论 -
内存溢出和内存泄漏
1.内存泄漏(memory leak) :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。2.内存溢出(out of memory) :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。3....原创 2019-11-15 15:13:43 · 268 阅读 · 0 评论 -
java面试(二十七)--(1)GC中判断对象需要被回收(2)多线程中的i++线程安全(3)object的hash设计(4)Query的list方法和iterate方法区别(5)数组中只出现一次的数字
1. GC中如何判断对象需要被回收?引用的概念:简单的理解,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用,类类型创建的对象都可以称为引用。引用计数:上面讲过了什么是引用,其实 java在GC时也会去看这个对象有没有任何引用与之关联,如果存在引用关系则表示这个对象还有用,不能被回收,如果不存在引用则可以基本定性为可被回收的对象了。使用此方式效率确实很高,但是有个致命的缺点...原创 2019-11-14 11:16:46 · 187 阅读 · 0 评论 -
java面试阿里第1期--二面(1)gc四引用(2)类加载机制(3)Atomic、cas(4)CPU很高,怎么去排查(5)RPC(6)怎么实现远程过程调用(8)BIO与NIO、AIO的区别(9)AOP
1.什么时候不用分代收集的方式2.软引用、弱引用、强引用、虚引用(GC)强引用:只要引用存在,垃圾回收器永远不会回收.例如:Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常...原创 2019-11-09 13:12:08 · 543 阅读 · 0 评论 -
java面试(二十六)--(1)J2EE中常用名词(2)讲一下redis的主从复制怎么做的?(3)请谈谈你对Javaweb开发中的监听器的理解?(4)按之字形顺序打印二叉树(5)内部类大全
1.J2EE中常用名词web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使 JSP,SERVLET直接跟容器中的环境变量接**互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB...原创 2019-11-08 19:13:45 · 354 阅读 · 0 评论 -
java面试(二十五)--(1)redis为什么读写速率快性能好(2)说说web.xml文件中可以配置哪些内容(3)&和&&的区别(4)扑克牌顺子
1. redis为什么读写速率快性能好?1.Redis将数据存储在内存上,避免了频繁的IO操作2.Redis其本身采用字典的数据结构,时间复杂度为O(1),且其采用渐进式的扩容手段3.Redis是单线程的,避免了上下文切换带来的消耗,采用网络IO多路复用技术来保证在多连接的时候,系统的高吞吐量。2.说说web.xml文件中可以配置哪些内容?web.xml用于配置Web应用的相关信息,如:...原创 2019-11-06 16:48:06 · 367 阅读 · 0 评论 -
java面试(二十四)--(1)CMS垃圾回收器(2)Java的接口和C++的虚类的相同和不同处(3)为什么重写equals还要重写hashcode(4)链表中环的入口结点
1.请你谈谈CMS垃圾回收器垃圾回收器组合垃圾回收器从线程运行情况分类有三种:(1)串行回收,Serial回收器,单线程回收,全程stw;(2)并行回收,名称以Parallel开头的回收器,多线程回收,全程stw;(3)并发回收,cms与G1,多线程分阶段回收,只有某阶段会stw;CMS垃圾回收CMS垃圾回收特点(1)CMS只会回收老年代和永久代(1.8开始为元数据区,需要设置C...原创 2019-11-05 18:40:52 · 151 阅读 · 0 评论 -
java面试(二十三)--(1)不用加减乘除做加法(2)CyclicBarrier和CountDownLatch的区别(3)什么是线程池(thread pool)
1.不用加减乘除做加法写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。示例代码:public class Solution { public int Add(int num1,int num2) { }}实现代码:public class Solution { public int Add(int num1,in...原创 2019-11-04 13:22:18 · 193 阅读 · 0 评论 -
java面试(二十二)--(1)JAVA修饰符大全 (2)谈谈如何通过反射创建对象 (3)第一个只出现一次的字符 (4)Struts结构图
1.修饰符大全Java语言提供了很多修饰符,大概分为两类:访问权限修饰符非访问权限修饰符访问权限修饰符public:共有访问。对所有的类都可见。protected:保护型访问。对同一个包可见,对不同的包的子类可见。default:默认访问权限。只对同一个包可见,注意对不同的包的子类不可见。private:私有访问。只对同一个类可见,其余都不见。非访问权限修饰符static ...原创 2019-11-03 13:52:57 · 128 阅读 · 0 评论 -
java面试(二十一)--(1)请问在什么情况下会使用assert?(2)请说明一下MyBatis中命名空间(namespace)的作用是什么?(3)数组中的逆序对
1.请问在什么情况下会使用assert?assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制.在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出.一般来说,assertion用于保证程序最...原创 2019-11-02 22:37:36 · 345 阅读 · 0 评论 -
java面试(二十)--(1)Servlet 3中的异步处理指的是什么(2)JAVA应用服务器有哪些(3)包含min函数的栈
1.Servlet 3中的异步处理指的是什么在Servlet 3中引入了一项新的技术可以让Servlet异步处理请求。有人可能会质疑,既然都有多线程了,还需要异步处理请求吗?答案是肯定的,因为如果一个任务处理时间相当长,那么Servlet或Filter会一直占用着请求处理线程直到任务结束,随着并发用户的增加,容器将会遭遇线程超出的风险,这种情况下很多的请求将会被堆积起来而后续的请求可能会遭遇拒绝...原创 2019-10-31 22:23:28 · 182 阅读 · 0 评论 -
java面试(十九)--(1)使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能(2)Java里Queue(3)SpringMVC原理(4)旋转数组的最小数字
1.使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?1.进行SQL查询,当预期的结果集较大的时候,使用PreparedStatement.setFetchSize(FETCH_SIZE)或者Statement.setFetchSize(FETCH_SIZE),可以成百倍地增加性能2. 当ResultSet很大的时候,而我们需要读取保存ResultSet里面的数据的时候...原创 2019-10-31 20:00:54 · 564 阅读 · 0 评论 -
java面试(十八)--(1)什么时候类必须初始化,什么情况类不会初始化(2)java类加载机制导图(3)回溯法
1.什么时候类必须初始化,什么情况类不会初始化虚拟机规范严格规定了有且只有五种情况必须立即对类进行“初始化”:使用new关键字实例化对象的时候、读取或设置一个类的静态字段的时候,已经调用一个类的静态方法的时候。使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有初始化,则需要先触发其初始化。当初始化一个类的时候,如果发现其父类没有被初始化就会先初始化它的父类。...原创 2019-10-30 22:20:51 · 560 阅读 · 0 评论 -
java面试(十七)--(1)session与cookie归纳总结(2)Hibernate各个接口作用(3)Serializable大全(4)时间复杂度详解
1.session与cookie归纳总结session用来表示用户会话,session对象在服务端维护,一般tomcat设定session生命周期为30分钟,超时将失效,也可以主动设置无效cookie存放在客户端,可以分为内存cookie和磁盘cookie。内存cookie在浏览器关闭后消失,磁盘cookie超时后消失。当浏览器发送请求时,将自动发送对应cookie信息,前提是请求url满足...原创 2019-10-28 11:00:01 · 141 阅读 · 0 评论 -
java面试(十六)--(1)Spring事务传播特性(2)java有虚函数与C++区别(3)IO流大全(4)泛型区别
1.Spring事务传播特性Spring事务属性的种类:传播行为、隔离级别、只读和事务超时1.传播行为定义了被调用方法的事务边界传播行为意义PROPERGATION_MANDATORY表示方法必须运行在一个事务中,如果当前事务不存在,就抛出异常PROPAGATION_NESTED表示如果当前事务存在,则方法应该运行在一个嵌套事务中。否则,它看起来和 PROPAG...原创 2019-10-27 21:49:52 · 180 阅读 · 0 评论 -
jav面试(十五)--(1)请谈一谈ClassLoader(类加载器), 以及对双亲委派模型理解(2)JVM内存(3)JAVA锁(4)ThreadLocal
1.请谈一谈ClassLoader(类加载器), 以及对双亲委派模型理解从java虚拟机的角度讲,只有两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用的是c++实现的,是虚拟机的一部分,另一类就是所有其他类加载器,这些类加载器都由java语言实现,独立于虚拟机外部,并且全都继承自抽象类。从开发人员的角度看,类加载器还可以划分为3种系统类加载...原创 2019-10-26 11:23:09 · 358 阅读 · 0 评论 -
java面试(十四)--(1)JVM常用命令(2)前后台线程(3)中间件(4)DBMS事务(5)OOP基本原则(6)GC内存回收(7)反射
1.JVM常用命令1、jps:查看本机java进程信息。2、jstack:打印线程的栈信息,制作线程dump文件。3、jmap:打印内存映射,制作堆dump文件4、jstat:性能监控工具5、jhat:内存分析工具6、jconsole:简易的可视化控制台7、jvisualvm:功能强大的控制台8、jinfo: 获取JVM的内存映像2.前台线程和后台线程的区别和联系1、后台线程不...原创 2019-10-25 21:39:00 · 202 阅读 · 0 评论 -
java面试(十三)--(1)优化Hibernate所鼓励的7大措施 (2)线程的sleep()方法和yield()方法(3)链表合并
1. 优化Hibernate所鼓励的7大措施:1.尽量使用many-to-one,避免使用单项one-to-many2.灵活使用单向one-to-many3.不用一对一,使用多对一代替一对一4.配置对象缓存,不使用集合缓存5.一对多使用Bag 多对一使用Set6.继承使用显示多态 HQL:from object polymorphism=“exlicit” 避免查处所有对象7.消除大...原创 2019-10-23 10:43:00 · 147 阅读 · 0 评论 -
java面试阿里第1期--代码面(1)选择排序(2)判断二进制里1的个数(3)输入String判断是不是ipv4地址
1.选择排序import java.util.Arrays;public class TestSelectSort { //测试选择排序 public static void selectSort(int[]arr){ for(int i=0;i<arr.length-1;i++){ int index=i; //排序位置 ...原创 2019-10-21 10:48:16 · 206 阅读 · 0 评论 -
java面试(十二)--(1)实现多线程同步的方法(2)内部类实现线程设计(3)数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
1.请简述一下实现多线程同步的方法?为什么要线程同步:因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。举个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块。假设账户原本有0块,如果取钱线程和存钱线程同时发生,会出现什么结果呢?取钱不成功,账户余额是100.取钱成功了,账户余额是0....原创 2019-10-18 15:10:50 · 277 阅读 · 0 评论 -
java面试(十一)--(1)cookie 和 session 的区别(2)redis为什么是单线程(3)栈的模拟过程
1.请你说说,cookie 和 session 的区别?1.Cookie:通俗讲,是访问某些网站后在本地存储的一些网站相关信息,下次访问时减少一些步骤。更准确的说法是:Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案。Cookies过期时间可设置的,如不设,则浏览器关掉就消失了,存储在内存当中,否则就按设置的时间来存储在硬盘上的,过期后自...原创 2019-10-17 22:27:01 · 222 阅读 · 0 评论 -
java面试(十)--(1)ServletConfig接口默认是哪里实现的(2)Map,Collection(3)OutOfMemoryError(4)equals和hashCode(5)类型转换问题
1. ServletConfig接口默认是哪里实现的?2.Map,Collection概括总结3.OutOfMemoryError1.java.lang.OutOfMemoryError: PermGen space 属于运行时常量池导致的溢出,设置-XX:MaxPermSize可以解决这个问题.java.lang.OutOfMemoryError: Requested array...原创 2019-10-17 13:56:21 · 526 阅读 · 0 评论 -
java面试阿里第1期--一面(1)linkedlist,arraylist(2)String(3)接口和抽象类(4)内部,匿名内部类(5)阻塞io和非阻塞io(6)Spring(7)java内存泄漏
一面:1. linkedlist、arraylist区别,内存分配上呢?区别:ArrayList的底层实现为数组存储在内存中,线程不同步。可通过数组下标的形式进行查找,所以在查询方面的效率较为出色,常用在查询较多的情景下。LinkedList的底层实现为链表形式,也为线程不同步。而链表的底层也决定了它在查询方面不如数组底层的ArrayList而在指定位置插入等修改操作下,性能优于Array...原创 2019-10-16 19:59:44 · 190 阅读 · 0 评论 -
java面试(九)--(1)List和ArrayList的区别,arrayList和HashSet区别(2)桶排序问题
1. List和ArrayList的区别,arrayList和HashSet区别list是接口,arraylist是实现该接口的类,arraylist底层是动态数组,有序且可以重复hashset底层是hash表,由于会比较hash值和equals,所以他是不可重复并且是无序的。简单的说一个是有序可重复,一个是无序不可重复。2.桶排序问题在一个长度为n的数组里的所有数字都在0到n-1的范围内。...原创 2019-10-16 10:28:18 · 354 阅读 · 0 评论 -
java面试(八)--(1)Request对象的主要方法(2)Java领域中的Web Service框架(3)垃圾回收机制(4)互斥锁(5)字符串转换
1.请详细说明一下Request对象的主要方法是什么?Request对象的主要方法:setAttribute(String name,Object):设置名字为name的request 的参数值getAttribute(String name):返回由name指定的属性值getAttributeNames():返回request 对象所有属性的名字集合,结果是一个枚举的实例getCook...原创 2019-10-15 21:57:26 · 215 阅读 · 0 评论 -
java面试(七)--(1)volatile,synchronized的区别(2)HashMap(3)类加载器(4)java内部类(5)动态规划问题
1. volatile,synchronized的区别关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且只能修改变量,而synchronized可以修饰方法,以及代码块.多线程访问volatile不会发生阻塞,而synchronized会出现阻塞.volatile能保证数据的可见性,但不能保证原子性;而synchronized可以...原创 2019-10-14 17:06:29 · 477 阅读 · 0 评论 -
java面试(一)--(1)JDBC的反射,以及它的作用(2)数据库优化方法(3)字符串替换
1.请你谈谈JDBC的反射,以及它的作用?通过反射com.mysql.jdbc.Driver类,实例化该类时,会调用该类的静态代码块,该代码块会去DriverManager类中注册自己,DriverManager管理所有已注册的驱动类,当调用DriverManager.getConnection()方法时会遍历所有驱动类,并尝试连接数据库,只要有一个连接成功,就返回Connection对象,否则...原创 2019-10-07 23:31:34 · 355 阅读 · 0 评论 -
java面试(二)--(1)EJB的几种类型(2)Hibernate的悲观锁和乐观锁(3) 二叉搜索树与双向链表
1.请说明一下EJB的几种类型分别是什么?EJB(Enterprise JavaBean)是J2EE服务器端的组件模型,EJB包括会话Bean(Session Bean)、实体Bean(Entity Bean)、消息驱动Bean(Message Driven Bean).EJB实际上是SUN的J2EE的一套规范,并且规定了一系列的API用来实现把EJB概念转换成EJB产品.1.Session ...原创 2019-10-08 22:33:02 · 140 阅读 · 0 评论 -
java面试(三)--(1)volatile(2)String(3)窗口滑动问题
1.请你介绍一下volatile?Volatile是java提供的轻量级同步机制,比sychronized开销要小. 如果要使用 volatile 了,那肯定是在多线程并发的环境下(原子性、可见性、有序性).被volatile定义的变量,系统每次使用到它的时候都是直接从主存中读取,而不是各个线程的工作内存.volatile适用于多个变量之间或者某个变量当前值和修改之后值之间没有约束。因此,单独...原创 2019-10-09 23:04:47 · 273 阅读 · 0 评论 -
java面试(四)--(1)如何设置请求的编码以及响应内容的类型(2)redis的List能在什么场景下使用(3)栈模拟队列
1. 请你说明一下,如何设置请求的编码以及响应内容的类型?设置请求的编码:request.setCharacterEncoding(String) utf-8设置响应内容的类型:response.setContentType(String) text/html; charset=utf-8or response.setHeader(String, String)2. 请问redis的Li...原创 2019-10-11 19:36:24 · 299 阅读 · 0 评论 -
java面试(五)--(1)JSP和Servlet异同与联系(2) EJB(3)冒泡排序(优化算法)
1.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?区别:1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过Ht...原创 2019-10-12 11:32:16 · 264 阅读 · 0 评论 -
java面试(六)--(1)二叉树深度(2)快速失败(fail-fast)和安全失败(fail-safe)(3)StringBuffer和StringBuilder
1.输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。示例代码:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { ...原创 2019-10-13 13:38:28 · 122 阅读 · 0 评论