自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 JAVA SE常见面试题

Java概述何为编程编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并 终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、 和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一 步一步去工作,完成某种特定的任务。这种人和计算机之间交流的过程就是编 程。什么是JavaJava是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易 用两个特征。

2021-05-14 00:27:14 360

原创 spring boot相关问题

什么是spring boot?为什么要用?spring boot 基于 spring 框架的快速开发整合包。好处:编码变得简单配置变得简单部署变得简单监控变得简单spring boot核心配置文件是什么?Spring Boot 有两种类型的配置文件,application 和 bootstrap 文件Spring Boot会自动加载classpath目前下的这两个文件,文件格式为 properties 或 yml 格式*.properties 文件是 key=value 的形式*.

2020-11-29 18:14:14 90

原创 异常(jvm)

OutOfMemoryError的原因有哪些?怎么解决?OutOfMemoryError 分为多种不同的错误:Java heap space原因:JVM 中 heap 的最大值不满足需要解决:调高 heap 的最大值,-Xmx 的值调大如果程序存在内存泄漏,增加 heap 空间也只是推迟该错误出现的时间而已,要检查程序是否存在内存泄漏GC overhead limit exceeded原因:JVM 在 GC 时,对象过多,导致内存溢出解决:调整 GC 的策略,在一定比例下开始GC而

2020-11-29 17:31:58 122

原创 数据结构

如何进行复杂度分析?时间复杂度分析:1、大 O 复杂度表示法:T(n) = O(f(n)),公式中的 O,表示代码的执行时间 T(n) 与 f(n) 表达式成正比只关注循环执行次数最多的一段代码总复杂度等于量级最大的那段代码的复杂度嵌套代码的复杂度等于嵌套内外代码复杂度的乘积2、最好情况时间复杂度:代码在最理想情况下执行的时间复杂度3、最坏情况时间复杂度:代码在最坏情况下执行的时间复杂度4、平均时间复杂度:代码在所有情况下执行的次数的加权平均值5、均摊时间复杂度:极少数高级别复杂度且发

2020-11-29 17:31:17 116

原创 spring mvc

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import blog.service.ArticleService;import blog.service.TagService;import blog.service.TypeService;@Controllerpublic class TestController {

2020-11-29 17:30:41 42

原创 spring框架

为什么要使用spring框架?spring 是一个开源的轻量级 JavaBean 容器框架。使用 JavaBean 代替 EJB ,并提供了丰富的企业应用功能,降低应用开发的复杂性。轻量:非入侵性的、所依赖的东西少、资源占用少、部署简单,不同功能选择不同的 jar 组合容器:工厂模式实现对 JavaBean 进行管理,通过控制反转(IOC)将应用程序的配置和依赖性与应用代码分开松耦合:通过 xml 配置或注解即可完成 bean 的依赖注入AOP:通过 xml 配置 或注解即可加入面向切面编程的能

2020-11-29 17:29:59 139

原创 网络安全(数据库等)

如何避免sql注入?1、概念SQL 注入(SQL Injection),是 Web 开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息、利用数据库的特性执行添加用户、导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。2、造成 SQL 注入的原因程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的 SQL 脚本,程序在接收后错误的将攻击者的输入作为 SQL 语句的一部分执行,导致原始的查询逻辑被改变,执行了攻击者精心构造的恶意 SQL 语句。如 从用户表根据用户名

2020-11-29 17:29:09 491 1

原创 web(2)

请问使用Servlet如何获取用户配置的初始化参数以及服务器上下文参数?​ 可以通过重写Servlet接口的init(ServletConfig)方法并通过ServletConfig对象的getInitParameter()方法来获取Servlet的初始化参数。可以通过ServletConfig对象的getServletContext()方法获取ServletContext对象,并通过该对象的getInitParameter()方法来获取服务器上下文参数。当然,ServletContext对象也在处理用

2020-11-27 21:35:20 116

原创 web(1)

请谈一谈JSP有哪些内置对象?以及这些对象的作用分别是什么?JSP有9个内置对象:- request:封装客户端的请求,其中包含来自GET或POST请求的参数;- response:封装服务器对客户端的响应;- pageContext:通过该对象可以获取其他对象;- session:封装用户会话的对象;- application:封装服务器运行环境的对象;- out:输出服务器响应的输出流对象;- config:Web应用的配置对象;- page:JSP页面本身(相当于Java程序中的th

2020-11-27 21:33:58 89

原创 可重入锁与不可重入锁之间的区别与性能差异?

可重入锁与不可重入锁之间的区别与性能差异?可重入锁指在同一个线程在外层方法获取锁的时候,进入内层方法会自动获取锁。为了避免死锁的发生,JDK 中基本都是可重入锁。下面我们来测试一下 synchronized 和 java.util.concurrent.lock.ReentrantLock 锁的可重入性测试 synchronized 加锁 可重入性package constxiong.concurrency.a019;/** * 测试 synchronized 加锁 可重入性 * @

2020-11-22 18:05:25 191 3

原创 synchronized+volatile关键字

synchronized关键字的作用是什么?​ Java 中关键字 synchronized 表示只有一个线程可以获取作用对象的锁,执行代码,阻塞其他线程。作用:确保线程互斥地访问同步代码保证共享变量的修改能够及时可见有效解决重排序问题用法:修饰普通方法修饰静态方法指定对象,修饰代码块特点:阻塞未获取到锁、竞争同一个对象锁的线程获取锁无法设置超时无法实现公平锁控制等待和唤醒需要结合加锁对象的 wait() 和 notify()、notifyAll()锁的功能是 JV

2020-11-20 19:29:26 200

原创 锁的定义及如何使用

Java中的锁是什么?在并发编程中,经常会遇到多个线程访问同一个共享变量,当同时对共享变量进行读写操作时,就会产生数据不一致的情况。为了解决这个问题JDK 1.5 之前,使用 synchronized 关键字,拿到 Java 对象的锁,保护锁定的代码块。JVM 保证同一时刻只有一个线程可以拿到这个 Java 对象的锁,执行对应的代码块。JDK 1.5 开始,引入了并发工具包 java.util.concurrent.locks.Lock,让锁的功能更加丰富。常见的锁synchronized

2020-11-20 19:28:51 304

原创 线程池

什么是线程池?​ 线程池就是创建若干个可执行的线程放入一个池(容器)中,有任务需要处理时,会提交到线程池中的任务队列,处理完之后线程并不会被销毁,而是仍然在线程池中等待下一个任务。为什么要使用线程池?​ 因为 Java 中创建一个线程,需要调用操作系统内核的 API,操作系统要为线程分配一系列的资源,成本很高,所以线程是一个重量级的对象,应该避免频繁创建和销毁。使用线程池就能很好地避免频繁创建和销毁。​ java线程池的代码:public class ThreadPool { //阻塞队

2020-11-20 19:28:05 170

原创 停止一个线程

停止一个线程​ 线程的自行终止有两种情况:​ 1.线程的任务执行完成​ 2.线程执行过程中出现异常如何让线程A终止线程B呢?(手动终止)​ Java 中 Thread 类有一个 stop() 方法,可以终止线程,不过这个方法会让线程直接终止,在执行的任务立即终止,未执行的任务无法反馈,所以 stop() 方法已经不建议使用。​ 线程只有从 runnable 状态(可运行/运行状态) 才能进入terminated 状态(终止状态),如果线程处于 blocked、waiting、time

2020-11-20 19:25:43 86

原创 守护线程、创建线程、并发编程优缺点机器原因,线程安全

守护线程守护线程是程序运行的时候在后台提供一种通用服务的线程。所有用户线程停止,进程会停掉所有守护线程,退出程序。Java中把线程设置为守护线程的方法:在 start 线程之前调用线程的 setDaemon(true) 方法。注意:setDaemon(true) 必须在 start() 之前设置,否则会抛出IllegalThreadStateException异常,该线程仍默认为用户线程,继续执行守护线程创建的线程也是守护线程守护线程不应该访问、写入持久化资源,如文件、数据库,因为它会在任

2020-11-20 19:24:58 257 1

原创 什么是线程?什么是进程?为什么要有线程?有什么关系与区别?

什么是线程?什么是进程?为什么要有线程?有什么关系与区别?进程:​ 程序执行时的一个实例 每个进程都有独立的内存地址空间​ 系统进行资源分配和调度的基本单位​ 进程里的堆,是一个进程中最大的一块内存,被进程中的所有线程共享的,进程创建时分配,主要存放 new 创建的对象实例​ 进程里的方法区,是用来存放进程中的代码片段的,是线程共享的​ 在多线程 OS 中,进程不是一个可执行的实体,即一个进程至少创建一个线程去执行代码线程:​ 进程的一个执行路径CPU 调度和分派的基本单位​ 线程本身

2020-11-20 19:23:58 960

原创 spring

谈一谈Spring中自动装配的方式有哪些?答:- no:不进行自动装配,手动设置Bean的依赖关系。- byName:根据Bean的名字进行自动装配。- byType:根据Bean的类型进行自动装配。- constructor:类似于byType,不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同则可以自动装配,否则会导致错误。- autodetect:如果有默认的构造器,则通过constructor的方式进行自动装配,否则使用byType的方式进行自动装配。自动装配没有自定

2020-11-18 20:03:09 118

原创 IO

请问运行时异常与受检异常有什么区别?答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译器要求方法必须声明抛出可能发生的受检异常,但是并不要求必须声明抛出未被捕获的运行时异常。异常和继承一样,是面向对象程序设计中经常被滥用的东西,在Effective Java中对异常的使用给出了以下指导原则:- 不要将异常处理

2020-11-16 20:50:41 75

原创 GC

请简单描述一下垃圾回收器的基本原理是什么?还有垃圾回收器可以马上回收内存吗?并且有什么办法可以主动通知虚拟机进行垃圾回收呢?答:对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是”可达的”,哪些对象是”不可达的”。当GC确定一些对象为”不可达”时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。请

2020-11-16 20:50:14 183

原创 jvm

请简单描述一下JVM加载class文件的原理是什么?答:JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。类装载方式,有两种

2020-11-16 20:49:35 203

原创 jdk

jdk,JRE的区别是什么答:Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。Java中的LongAdder和AtomicLong有什么区别?答:JDK1.8引入了LongAdder类。CAS机制就是,在一个死循环内,不断尝试修改目标值,直到修改成功。如果竞争不

2020-11-16 20:47:29 46

原创

请你简述一下synchronized与java.util.concurrent.locks.Lock的相同之处和不同之处?答:主要相同点:Lock能完成synchronized所实现的所有功能主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁?答:使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获

2020-11-16 20:47:01 156

原创 线程(2)

创建线程有几种不同的方式?你喜欢哪一种?为什么?答:有三种方式可以用来创建线程:继承Thread类实现Runnable接口应用程序可以使用Executor框架来创建线程池实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。请解释一下Java多线程回调是什么意思?答:所谓回调,就是客户程序C调用服务程序S中的某个方法A,然后S又在某个时

2020-11-16 20:46:25 70

原创 线程(1)

如何保证线程安全?答:通过合理的时间调度,避开共享资源的存取冲突。另外,在并行任务设计上可以通过适当的策略,保证任务与任务之间不存在共享资源,设计一个规则来保证一个客户的计算工作和数据访问只会被一个线程或一台工作机完成,而不是把一个客户的计算工作分配给多个线程去完成。请你简要说明一下线程的基本状态以及状态之间的关系?答:其中Running表示运行状态,Runnable表示就绪状态(万事俱备,只欠CPU),Blocked表示阻塞状态,阻塞状态又有多种情况,可能是因为调用wait()方法进入等待池,也可能

2020-11-16 20:45:51 57

原创 集合(2)

请解释为什么集合类没有实现Cloneable和Serializable接口?答:克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。实现Serializable序列化的作用:将对象的状态保存在存储媒体中以便可以在以后重写创建出完全相同的副本;按值将对象从一个从一个应用程序域发向另一个应用程序域。实现 Serializable接口的作用就是可以把对象存到字节流,然后可以恢复。所以你想如果你的对象没有序

2020-11-16 20:44:46 32

原创 集合(1)

1.请说明List、Map、Set三个接口存取元素时,各有什么特点?​ 答:List以特定索引来存取元素,可以有重复元素。Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一。Set和Map容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理论存取时间复杂度为O(1),而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果。2.阐述Arr

2020-11-16 20:44:10 54

原创 面向对象(3)

1.请你解释一下类加载机制,双亲委派模型,好处是什么?答:某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。​ 使用双亲委派模型的好处在于Java类随着它的类加载器一起具备了一种带有优先级的层次关系。例如类java.lang.Object,它存在在rt.jar中,无论哪一个类加载器要加载这个类,最终都是委派给处于模型最顶端的Bootstrap ClassLoader进行加载,因

2020-11-16 20:41:47 175

原创 面向对象(2)

1. 请你讲讲abstract class和interface有什么区别?答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其

2020-10-27 16:04:25 51

原创 面向对象(1)

1.若对一个类不重写,它的equals()方法是如何比较的?答 比较是对象的地址。2.请解释hashCode()和equals()方法有什么联系?答:Java对象的eqauls方法和hashCode方法是这样规定的:➀相等(相同)的对象必须具有相等的哈希码(或者散列码)。➁如果两个对象的hashCode相同,它们并不一定相同。3.请解释Java中的概念,什么是构造函数?什么是构造函数重载?什么是复制构造函数?答:当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供

2020-10-27 15:54:41 55

原创 JAVA关键字

1. 请你讲讲Java里面的final关键字是怎么用的?答:当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用

2020-10-27 15:53:38 42

原创 JAVA基础

java基础1.请你谈谈大O符号(big-O notation)并给出不同数据结构的例子答:大O符号描述了当数据结构里面的元素增加的时候,算法的规模或者是性能在最坏的场景下有多么好。大O符号也可用来描述其他的行为,比如:内存消耗。因为集合类实际上是数据结构,我们一般使用大O符号基于时间,内存和性能来选择最好的实现。大O符号可以对大量数据的性能给出一个很好的说明。同时,大O符号表示一个程序运行时所需要的渐进时间复杂度上界。其函数表示是:对于函数f(n),g(n),如果存在一个常数c,使得f(n)&l

2020-10-27 15:52:13 115

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除