面试总结
华山栈道
码出机会
展开
-
面试题总结:单例模式 (Singleton Pattern),工厂模式(Factory Pattern) ,观察者模式(Observer Pattern),代理模式(Proxy Pattern)
文章目录单例模式(Singleton Pattern)(最常问的设计模式)工厂模式(Factory Pattern)观察者模式(Observer Pattern)代理模式(Proxy Pattern)单例模式(Singleton Pattern)(最常问的设计模式)单例模式只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等。使用场景:1.要求生成唯一序列号的环境;2.在整个项目中需要一个共享访问点或共享数据,例如一个We原创 2020-11-18 23:50:56 · 646 阅读 · 0 评论 -
面试题总结:泛型和虚拟机
1、创建泛型对象的时候,一定要指出类型变量T的具体类型。争取让编译器检查出错误,而不是留给JVM运行的时候抛出类不匹配的异常。2、JVM如何理解泛型概念 —— 类型擦除。事实上,JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普通类和方法。 处理方法很简单,我们叫做类型变量T的擦除(erased) 。总结:泛型代码与JVM① 虚拟机中没有泛型,只有普通类和方法。② 在编译阶段,所有泛型类的类型参数都会被Object或者它们的限定边界来替换。(类型擦除)③ 在继承泛型..原创 2020-11-17 11:44:02 · 133 阅读 · 0 评论 -
面试题总结:JSP九大内置对象
JSP内置对象有:1.request对象客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。2.response对象response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。3.session对象session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是Ht原创 2020-11-16 09:57:06 · 195 阅读 · 0 评论 -
面试题总结: 类的加载过程
类的加载过程以Person person = new Person();为例进行说明。1、因为new用到了Person.class,所以会先找到Person.class文件,并加载到内存中。2、执行该类中的static代码块(如果有),给Person.class进行初始化3、在堆内存中开辟空间并分配内存地址4、在堆内存中建立对象的特有属性,并进行默认初始化5、对对象的特有属性进行显示初始化6、对对象进行构造代码块初始化7、对对象构造函数进行初始化8、在栈内存中声明Person类型的变量p原创 2020-11-14 21:56:09 · 406 阅读 · 0 评论 -
面试题总结:内存溢出和内存泄漏的区别
内存溢出和内存泄漏的区别内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak会最终会导致out of memory!内存泄露 会最终会导致 内存溢出内存溢出就是你要求分配原创 2020-11-14 17:57:13 · 760 阅读 · 0 评论 -
面试总结:java反射
文章目录1、Java反射的定义2、java反射的实现方式3、哪里用到反射机制?4、反射机制的优缺点?1、Java反射的定义在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制;2、java反射的实现方式(1)通过.class第一种 获取到类对象Class class1 = Person.class;(2)通过创建实例对象来获取类对象Person person原创 2020-11-14 17:32:23 · 186 阅读 · 0 评论 -
面试题总结: throw 和throws 的区别
throw 和throws 的区别throw:1) throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。2) throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定是抛出了某种异常。throws:1) throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。2) throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。3) throws 表示出现异常的一种可能性,并不一定会发原创 2020-11-13 10:42:26 · 250 阅读 · 0 评论 -
面试题总结:spring boot与spring mvc的区别是什么?
spring boot与spring mvc的区别是什么?springmvc是框架,项目中实际运行的代码Spring MVC是基于Servlet 的一个 MVC 框架主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。spring boot只是一个配置工具,整合工具,辅助工具.Spring Boot只是承载者,辅助你原创 2020-11-13 00:00:07 · 1020 阅读 · 0 评论 -
面试题总结:什么是jsp,什么是Servlet?jsp 和Servlet 有什么区别?
什么是jsp,什么是Servlet?jsp 和Servlet 有什么区别?jsp 本质上就是一个Servlet,它是 Servlet 的一种特殊形式(由 SUN 公司推出),每个 jsp 页面都是一个servlet实例。Servlet 是由 Java 提供用于开发 web 服务器应用程序的一个组件,运行在服务端,由 servlet 容器管理,用来生成动态内容。一个 servlet 实例是实现了特殊接口 Servlet 的 Java 类,所有自定义的 servlet 均必须实现 Servlet 接口。区原创 2020-11-12 20:34:25 · 256 阅读 · 0 评论 -
面试题总结:数组和链表的区别
数组和链表的区别数组是将元素在内存中连续存储的;优点:因为数据是连续存储的,内存地址连续,所以在查找数据的时候效率比较高;缺点:在存储之前,我们需要申请一块连续的内存空间,并且在编译的时候就必须确定好它的空间的大小。在运行的时候空间的大小是无法随着你的需要进行增加和减少而改变的,当数据两比较大的时候,有可能会出现越界的情况,数据比较小的时候,又有可能会浪费掉内存空间。在改变数据个数时,增加、插入、删除数据效率比较低链表是动态申请内存空间,不需要像数组需要提前申请好内存的大小,链表只需在原创 2020-11-12 17:32:36 · 818 阅读 · 0 评论 -
面试题总结:并发集合和普通集合如何区别?
并发集合和普通集合如何区别?并发集合常见的有ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque 等。并发集合位 于 java.util.concurrent 包 下 , 是 jdk1.5 之 后 才 有 的 ,在 java 中有普通集合、同步(线程安全)的集合、并发集合。普通集合通常性能最高,但是不保证多线程的安全性和并发的可靠性。线程安全集合仅仅是给集合添加了 synchronized 同步锁,严重牺牲了性原创 2020-11-12 17:23:38 · 433 阅读 · 2 评论 -
面试题总结:访问权限修饰符public、private、protected, 以及不写(默认)时的区别
访问权限修饰符public、private、protected, 以及不写(默认)时的区别原创 2020-11-12 17:01:50 · 636 阅读 · 0 评论 -
面试题总结:面向对象都有哪些特性
面向对象都有哪些特性以及你对这些特性的理解1)继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。2)封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装原创 2020-11-12 14:43:57 · 273 阅读 · 0 评论 -
面试题总结:Java中异常的种类
文章目录Java异常处理介绍1.1 什么是异常JAVA异常分为2类2.1错误: Error2.1.1 常见错误2.2异常: Exception1、Thorwable类2.Error(错误):3.Exception:4、运行时异常和非运行时异常5、异常的捕获和处理java 常见的几种运行时异常RuntimeException转载自:https://blog.csdn.net/qq_43843725/article/details/94439890Java异常处理介绍1.1 什么是异常转载 2020-11-06 20:59:58 · 269 阅读 · 0 评论 -
面试题总结:Thread类的sleep()方法和对象的wait()方法有什么区别?线程的sleep()方法和yield()方法有什么区别?
Thread类的sleep()方法和对象的wait()方法sleep()方法(休眠)是线程类( Thread)的静态方法,调用此方法让当前线程暂停执行指定的时间, 将执行机会( CPU)让给其他线程, 但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态)。wait() 方法是Object 类的方法,调用对象的wait()方法导致当前线程放弃对象的锁(线程暂停执行), 进入对象的等待池(wait pool),只有调用对象的notify()方法(或notifyAll()方法)时才能唤醒.原创 2020-11-06 14:53:29 · 565 阅读 · 0 评论 -
面试题总结:线程的周期
在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)五种状态。当线程start后,它不能一直"独占"着CPU独自运行,所以CPU需要在多条线程之间切换,于是线程状态也会多次在运行、阻塞之间切换。新建 New就绪 Runnable运行 Running阻塞 Blocked死亡 Dead发生以下情况时,线程将进入阻塞状态:调用sleep()方法时,此时会放弃它所占用的处理器资源(过了sleep指定时间不再阻塞.原创 2020-11-05 23:29:34 · 401 阅读 · 2 评论 -
面试题总结:进程和线程
文章目录进程,线程进程,线程进程是程序的一次动态执行过程,每个进程都有自己独立的内存空间。一个应用程序可以同时启动多个进程(比如浏览器可以开多个窗口,每个窗口就是一个进程),进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。多进程操作系统能够运行多个进程,每个进程都能够循环利用所需要的CPU时间片,使的所有进程看上去像在同时运行一样。线程是进程的一个执行流程,是CPU调度和分派的基本单位。一个进程可以由多个线程组成,也就是一个进程可以同时运行原创 2020-11-05 00:20:16 · 317 阅读 · 0 评论 -
面试题总结:JVM是什么?为什么 Java 被称作是“平台无关的编程语言”?JVM 加载class 文件的原理机制【***】
这里写目录标题JVM是什么?为什么 Java 被称作是“平台无关的编程语言”?JVM 加载class 文件的原理机制【***】1.Java代码在JVM中的执行流程2.JVM的类加载原理图JVM是什么?Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。为什么 Java 被称作是“平台无关的编程语言”?Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为原创 2020-11-05 00:06:08 · 403 阅读 · 2 评论 -
面试题总结:设计模式——单例模式
文章目录懒汉和饿汉代码实现饿汉式 (可用)双重检查懒汉式 (可用,推荐)单例模式的优缺点优点缺点懒汉和饿汉在程序编写上,一般将单例模式分为两种,分别是饿汉式和懒汉式,饿汉式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。懒汉式:在类加载时不初始化,等到第一次被使用时才初始化。代码实现饿汉式 (可用)public class Singleton { private final static Singleton INSTANCE = new Singleton();原创 2020-11-03 20:45:55 · 356 阅读 · 0 评论 -
面试题总结:HashMap、Hashtable、ConcurrentHashMap的原理与区别
文章目录HashMapHashTableConcurrentHashMap主要区别:1.ConcurrentHashMap提供了与Hashtable不同的锁机制。2. HashMap ,Hashtable中的key和valueHashMap底层数组+链表实现,可以存储null键和null值,线程不安全,方法不同步初始size为16,扩容:newsize = oldsize*2,size一定为2的n次幂扩容针对整个Map,每次扩容时,原来数组中的元素依次重新计算存放位置,并重新插入插入元素后才判断原创 2020-11-03 14:36:22 · 406 阅读 · 0 评论 -
面试题总结:HashMap遍历的四种方法
文章目录HashMap遍历的四种方法方法一: 迭代keys并搜索values(低效的)方法二:使用For-Each迭代keys和values方法三:使用For-Each迭代entries方法四:使用Iterator迭代代码:HashMap遍历的四种方法方法一: 迭代keys并搜索values(低效的)// 方法一 for(Integer key : map.keySet()){ String value = map.get(key); System.out.pri原创 2020-11-02 16:06:54 · 417 阅读 · 0 评论 -
面试题总结:Set Map List 的异同点
java集合和数组的区别1.数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)2.JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。JAVA集合主要分为三种类型:Set(集)List(列表)Map(映射)1.1 Set...原创 2020-11-02 00:03:07 · 593 阅读 · 0 评论 -
面试题总结:volatile的功能
这里写目录标题1.volatile到底做了什么:2.synchronized关键字和volatile关键字比较:1.volatile到底做了什么:(volatile保证有序性,可见性,不能保证原子性)禁止了指令重排保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量值,这个新值对其他线程是立即可见的不保证原子性(线程不安全)2.synchronized关键字和volatile关键字比较:volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synch原创 2020-11-01 23:23:57 · 780 阅读 · 7 评论 -
面试题总结:重载和重写的区别
文章目录重载(Overloading)重载规则:重写(Override)重写规则:重载(Overloading)是类以统一的方式处理不同类型数据的一种手段。实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。重载规则:必须具有不同的参数列表; 可以有不同的返回类型;可以有不同的访问修饰符;可以抛出不原创 2020-10-31 20:48:44 · 344 阅读 · 0 评论 -
面试题总结:try{}里有一个return 语句,finally是否执行,执行位置?
1.执行,在return之前try{}里有一个return语句返回,那么紧跟在这个try后的finally{}里的代码也是会被执行的,是在方法返回调用前(return前执行)。public class finallyTest { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("结果: " + new finallyTes原创 2020-10-31 20:14:57 · 825 阅读 · 0 评论 -
面试题总结:final、finally、finalize 的区别
这里写目录标题1.final关键字final优势:2. finally3. finalize1.final关键字一个基本数据类型声明为final,就只能进行一次赋值(初始化),编译器会自动检查代码,如果需要修改final的初始化,就会编译报错。final声明的引用数据类型,当前引用是不能改变的,但是可以改变引用指向的内存空间的值。final一般和static搭配使用作为常量。final关键字的三种用法:1)修饰类:表示该类不能被继承(extends);2)修饰方法:表示方法不能被重写(overr原创 2020-10-31 19:59:06 · 435 阅读 · 2 评论 -
面试题总结:Queue 中 poll()和 remove()有什么区别?
文章目录Queue1、offer()和add()的区别2、peek()和element()的区别3、poll()和remove()的区别 ***Queue队列是一个典型的先进先出(FIFO)的容器。1、offer()和add()的区别相同点:都是向队列中添加一个元素。不同点:但是如果想在一个满的队列中加入一个新元素,调用 add() 方法就会抛出一个 unchecked 异常,调用 offer()方法会返回 false。2、peek()和element()的区别相同点:都将在不移除的情原创 2020-10-31 00:42:59 · 1163 阅读 · 0 评论 -
面试题总结:访问一个URL经历了哪些过程
文章目录从大致上来讲经历了1.分析1.1 流程图从大致上来讲经历了客户端获取URL - > DNS解析 - > TCP连接 - >发送HTTP请求 - >服务器处理请求 - >返回报文 - >浏览器解析渲染页面 - > TCP断开连接1.分析众所周知,打开一个网页的过程中,浏览器会因页面上的css/js/image等静态资源会多次发起连接请求,所以我们暂且把这个网页加载过程分成两部分:html(jsp/php/aspx)页面加载(假设存在简单的Nginx原创 2020-10-31 00:22:15 · 1261 阅读 · 3 评论 -
面试题总结:java垃圾回收机制
文章目录GC(对于对象内存的释放就是垃圾回收机制)System.gc()方法大佬写的java回收机制面试解答GC(对于对象内存的释放就是垃圾回收机制)java是自动化的,但是可控性很差,甚至有时会出现内存溢出的情况(内存溢出也就是jvm分配的内存中对象过多,超出了最大可分配内存的大小)。System.gc()方法用于调用垃圾收集器,在调用时,垃圾收集器将运行以回收未使用的内存空间。它将尝试释放被丢弃对象占用的内存。然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。原创 2020-10-30 20:51:06 · 579 阅读 · 4 评论 -
面试题总结:Mybatis 标签
1.Mybatis动态sql有什么用?执行原理?有哪些动态sql?Mybatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值 完成逻辑判断并动态拼接sql的功能。Mybatis提供了9种动态sql标签:| trim| where| set| foreach| if| choose| when| otherwise| bind。2.Xml映射文件中,有哪些标签?答:| select| insert| updae| delete| p原创 2020-10-30 00:09:32 · 417 阅读 · 0 评论 -
面试题总结:java 中对象比较大小
java 中对象比较大小有两种方法1:实现Comparable接口 的 public int compareTo(T o) 方法;class Dept implements Comparable{ private String id; private String name; private long num; public Dept(String id,String name,long num){ this.id=id;原创 2020-10-29 23:38:53 · 467 阅读 · 0 评论 -
面试题总结:HashMap实现原理
文章目录1.简单了解:2.HashMap实现原理详解:3.红黑树是一种自平衡二叉查找树1.简单了解:JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。HashCode是jdk根据对象的地址或字符串或者数字利用hash算法计算出的int类型的数值。2.HashMap实现原理详解:数组->链表->红黑树首先有一个每个元素都是链表的数组,当添加一个元素(key-value)时,就首先计算元素key的hash原创 2020-10-29 23:25:42 · 957 阅读 · 3 评论 -
面试题思考:Java中接口(interface)和抽象(abstract)类的区别
1接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。2 **抽象类可以实现很多个接口,但是只能继承一个抽象类。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现, 否则该类仍然需要被声明为抽象类。3抽象类可以在不提供接口方法实现的情况下实现接口。4Java 接口中声明的变量默认都是final的。抽象类可以包含非final的变量。5Java 接口中的成员函数默认是原创 2020-10-29 21:23:15 · 370 阅读 · 0 评论 -
面试题思考:堆和栈的区别(数据结构)
栈(stack):像是装数据的桶或者箱子;栈是大家比较熟悉的一种数据结构,它是一种具有后进先出的数据结构,也就是说后存放的先取,先存放的后取,这就类似于我们要在取放在箱子底部的东西(放进去比较早的物体),我们首先要移开压在它上面的物体(放入比较晚的物体)。堆(heap:像是一颗倒立的大树;堆是一种经过排序的树形数据结构,每个节点都有一个值。通常我们所说的堆的数据结构是指二叉树。堆的特点是根节点的值最小(或最大),且根节点的两个树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意原创 2020-10-29 21:05:46 · 600 阅读 · 0 评论 -
面试题思考:堆区和栈区的区别(内存)
文章目录主要区别:详细说明:1.申请方式不同:栈区(stack):堆区(heap):2.申请后系统的响应不同:栈区(stack):堆区(heap):3.申请大小的限制不同:栈区(stack):堆区(heap):4.申请效率的比较:栈区(stack):堆区(heap):5.堆和栈中的存储内容栈区(stack):堆区(heap):主要区别:1、栈区(stack)由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)一般由程序员分配释放,若程序原创 2020-10-29 20:57:15 · 1352 阅读 · 2 评论 -
面试题思考:Post和Get 的区别
面试回答:GET请求在URL中传送的参数是有长度限制的,而POST没有。GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。GET参数通过URL传递,POST放在Request body中。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求只能进行url编码,而POST支持多种编码方式。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET产生的URL地址可以被Bookmark,而POST不可以。GET在浏览原创 2020-10-29 15:45:36 · 479 阅读 · 0 评论