![2021年面试宝典已回答篇_第1页](http://file4.renrendoc.com/view11/M01/16/36/wKhkGWX4pfmAV5acAAHf8ZGAqVQ289.jpg)
![2021年面试宝典已回答篇_第2页](http://file4.renrendoc.com/view11/M01/16/36/wKhkGWX4pfmAV5acAAHf8ZGAqVQ2892.jpg)
![2021年面试宝典已回答篇_第3页](http://file4.renrendoc.com/view11/M01/16/36/wKhkGWX4pfmAV5acAAHf8ZGAqVQ2893.jpg)
![2021年面试宝典已回答篇_第4页](http://file4.renrendoc.com/view11/M01/16/36/wKhkGWX4pfmAV5acAAHf8ZGAqVQ2894.jpg)
![2021年面试宝典已回答篇_第5页](http://file4.renrendoc.com/view11/M01/16/36/wKhkGWX4pfmAV5acAAHf8ZGAqVQ2895.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java面试宝典(待回答篇)oracle如何实现读写分离
(1)基于RAC架构,使用其中某个节点作为读库;(2)基于Streams数据复制技术,实时将数据复制到此外一种库供读取;(3)使用第三方数据复制软件,如GoldenGate(已经被Oracle收入囊中)、DSG,也是实时复制数据到此外一种库中。(4)使用Logicalstandby技术,实时复制数据到一种库,且该库是相应用而言是只读。说说你对排它锁,读写锁理解
(1)排它锁,也称作独占锁,一种锁在某一时刻只能被一种线程占有,其他线程必要等待锁被释放之后才也许获取到锁。(2)读写锁拆成读锁和写锁来理解。读锁可以共享,各种线程可以同步拥有读锁,但是写锁却只能只有一种线程拥有,并且获取写锁时候其她线程都已经释放了读锁,并且该线程获取写锁之后,其她线程不能再获取读锁在读写锁基本上如何实现防止幻读(不能使用MVCC,也不能使用序列化隔离级别)
线程池用过吗?newcachedThreadPool在使用过程中有什么需要注意吗
创立一种可缓存线程池。如果线程池大小超过了解决任务所需要线程,那么就会回收某些空闲(60秒不执行任务)线程,当任务数增长时,此线程池又可以智能添加新线程来解决任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于\o"操作系统知识库"操作系统(或者说JVM)可以创立最大线程大小。oracle联合主键在创立时候有什么需要注意吗
谈谈你对分布式理解
分布式就是把一种需要非常巨大计算能力才干解决问题提成许多小某些,然后把这些某些分派给许多计算机进行解决,最后把这些计算成果综合起来得到最后成果。js写怎么样,js是如何实现继承
js惯用继承办法有:原型链、借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合式继承。struts
Filter和拦截器有什么区别?
拦截器是基于java反射机制,而过滤器是基于函数回调。拦截器不依赖与servlet容器,过滤器依赖与servlet容器。拦截器只能对action祈求起作用,而过滤器则可以对几乎所有祈求起作用。拦截器可以访问action上下文、值栈里对象,而过滤器不能访问。在action生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次抽象工厂办法和工厂办法区别是什么?
工厂办法:用来生产同一级别构造中固定产品。(支持增长任意产品)
抽象工厂:用来生产不同产品族所有产品。(对于增长新产品,无能为力;支持增长产品族)在负载不能支撑状况下,如何将redis实例从10个扩充到20个
11、说说你对ThreadLocal理解
(1)每个线程均有自己局部变量
每个线程均有一种独立于其她线程上下文来保存这个变量,一种线程本地变量对其她线程是不可见(有前提,背面解释)(2)独立于变量初始化副本
ThreadLocal可以给一种初始值,而每个线程都会获得这个初始化值一种副本,这样才干保证不同线程均有一份拷贝。(3)状态与某一种线程有关联
ThreadLocal不是用于解决共享变量问题,不是为了协调线程同步而存在,而是为了以便每个线程解决自己状态而引入一种机制,理解这点对对的使用ThreadLocal至关重要。http合同,put用过吗?讲讲,如何使用http合同传送各种文献
(1)在form中设立各种文献输入框,用数组命名她们名字(2)在form中设立各种文献输入框,但名字不同可重入锁与syncronized区别()
完美世界:
ReentrantLock除了synchronized功能,多了三个高档功能.等待可中断,公平锁,绑定各种Condition.(1)等待可中断在持有锁线程长时间不释放锁时候,等待线程可以选取放弃等待.
tryLock(longtimeout,TimeUnitunit)(2)公平锁按照申请锁顺序来一次获得锁称为公平锁.synchronized是非公平锁,ReentrantLock可以通过构造函数实现公平锁.
newRenentrantLock(booleanfair)(3)绑定各种Condition通过多次newCondition可以获得各种Condition对象,可以简朴实现比较复杂线程同步功能.通过await(),signal();约瑟夫问题懂得吗?15分钟写出来
public
class
RingTest{
public
static
void
main(String[]
args){
System.out.println("程序阐明如下:");
System.out.println("由m个人围成一种首尾相连圈报数。从第一种人开始,从1开始报数,报到n人出圈,剩余人继续从1开始报数,直到所有人都出圈为止。对于给定m和n,求出所有人出圈顺序.");
//提示输入总人数
System.out.println("请输入做这个游戏总人数:");
Scanner
sca=new
Scanner(System.in);
int
m=sca.nextInt();
//提示输入要出圈数值
System.out.println("请输入要出圈数值:");
int
n=sca.nextInt();
System.out.println("按出圈顺序输出序号:");
//创立有m个值数组
int[]
a=new
int[m];
//初始长度,后来出圈一种,长度就减一
int
len=m;
//给数组赋值
for(int
i=0;i<a.length;i++)
a[i]=i+1;
//i为元素下表,j代表当前要报数
int
i=0;
int
j=1;
while(len>0){
if(a[i%m]>0){
if(j%n==0){//找到要出圈人,并把圈中人数减一
System.out.print(a[i%m]+"
");
a[i%m]=-1;
j=1;
i++;
len--;
}else{
i++;
j++;
}
}else{//遇到空位了,就跳到下一位,但j不加一,也就是这个位置没有报数
i++;
}
}
}}session实现机制
Session保存在服务器端,为了获得更高存取速度,服务器普通把Session保存在内存里。需要注意是只有访问jsp、Servlet等程序时才会创立Session,访问HTML、IMAGE等静态资源时并不会创立Session。Session生成后,只要顾客继续访问,服务器就会更新Session最后访问时间,并维护该Session。由于会有越来越多顾客访问服务器,因而Session也会越来越多。为防止内存溢出,服务器会把长时间没有活跃顾客Session从内存里删除。这个时间就是Session超时时间。如果超过了超时时间没访问服务器,Session就自动失效了。生产者消费者模型实现
(1)采用某种机制保护生产者和消费者之间同步;(2)在生产者和消费者之间建立一种管道。第一种方式有较高效率,并且易于实现,代码可控制性较好,属于惯用模式。第二种管道缓冲区不易控制,被传播数据对象不易于封装等,实用性不强。简介垃圾回收机制
在\o"JavaSE知识库"Java中,当没有对象引用指向原先分派给某个对象内存时,该内存便成为垃圾。JVM一种系统级线程会自动释放该内存块。垃圾回收能自动释放内存空间,减轻编程承担。这使Java虚拟机具备某些长处。一方面,它能使编程效率提高。在没有垃圾回收机制时候,也许要花许多时间来解决一种难懂存储器问题。在用Java语言编程时候,靠垃圾回收机制可大大缩短时间。另一方面是它保护程序完整性,垃圾回收是Java语言安全性方略一种重要部份如何拟定TCP连接关闭(4次握手)
由于TCP连接时全双工,因而,每个方向都必要要单独进行关闭,这一原则是当一方完毕数据发送任务后,发送一种FIN来终结这一方向连接,收到一种FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上依然可以发送数据,直到这一方向也发送了FIN。一方面进行关闭一方将执行积极关闭,而另一方则执行被动关闭shell用过吗?python用过吗
Shell自身是一种用C语言编写程序,它是顾客使用Linux桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行顾客输入命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高档语言中才具备控制构造,涉及循环和分支。Shell有两种执行命令方式:•交互式(Interactive):解释执行顾客命令,顾客输入一条命令,Shell就解释执行一条。
•批解决(Batch):顾客事先写一种Shell脚本(Script),其中有诸多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Python是一种开放源代码脚本编程语言,这种脚本语言特别强调开发速度和代码清晰限度。它可以用来开发各种程序,从简朴脚本任务到复杂、面向对象应用程序均有大显身手地方。Python还被当作一种入门程序员最适合掌握先进语言,由于它免费、面向对象、扩展性强同步执行严格编码原则。使用java语言将一种整数分解成一系列2n次幂和,规定输出顺序从小到大,分解后数目个数最小,分解后数目个数最小
例如:65分解输出
1
64;51分解输出1
2
16
32
8、 21、Spring
IOC和AOP简朴简介下
IOC:
InversionofControl(控制反转)是一种设计思想,就是容器控制应用程序所需要外部资源创立和管理,然后将其反转给应用程序。对象及其依赖对象创立及维护都不需要在应用程序中实现,将其交给IOC容器去管理。对于IOC而言,它强调是将积极变为被动,由IOC容器来负责依赖对象创立和查找,由IOC容器来进行注入组合对象,咱们只需要在有关配备文献中维护对象之间依赖关系即可。AOP运用一种称为“横切”技术,剖解开封装对象内部,将那些影响各种类公共行为封装到一种可重用模块,并将其名为方面(Aspect)。所谓“方面”,简朴地说,就是将那些与业务无关,却为业务模块所共同调用逻辑封装起来某些。以便于减少系统重复代码,减少模块间耦合度,并有助于系统维护。jdk1.5后来出来并发包理解吗?简介lock接口signal与notify区别,wait与await()区别CyclicBarrier是JDK5中\o"JavaSE知识库"Java.util.Concurrent包中提出同步类。CyclicBarrier可以用来等待子任务都完毕后执行最后任务。所有线程等待其他线程到达Barrier。CyclicBarrier初始化时指定需要等待线程数,通过调用CyclicBarrier.await()办法,所有线程阻塞等待直到都调用了await()办法。(1).lock不再用synchronize把同步代码包装起来;
(2).阻塞需要此外一种对象condition;
(3).同步和唤醒对象是condition而不是lock,相应办法是await和signal,而不是wait和notify。如何解决闭环链表(快慢指针或者mark换效率)
生产者消费问题实现(1)wait()/nofity()办法是基类Object两个办法,也就意味着所有Java类都会拥有这两个办法,这样,咱们就可觉得任何对象实现同步机制。wait()办法:当缓冲区已满/空时,生产者/消费者线程停止自己执行,放弃锁,使自己处在等等状态,让其她线程执行。notify()办法:当生产者/消费者向缓冲区放入/取出一种产品时,向其她等待线程发出可执行告知,同步放弃锁,使自己处在等待状态。(2)在JDK5.0之后,Java提供了更加健壮线程解决机制,涉及同步、锁定、线程池等,它们可以实现更细粒度线程控制。await()和signal()就是其中用来做同步两种办法,它们功能基本上和wait()/nofity()相似,完全可以取代它们,但是它们和新引入锁定机制Lock直接挂钩,具备更大灵活性。通过在Lock对象上调用newCondition()办法,将条件变量和一种锁对象进行绑定,进而控制并发程序访问竞争资源安全。数据构造理解吗?HashMap实现原理?
数据构造重要指逻辑构造和物理构造;数据之间互有关系称为逻辑构造。普通分为四类基本构造:集合构造中数据元素除了同属于一种类型外,别无其他关系。线性构造构造中数据元素之间存在一对一关系。树型构造构造中数据元素之间存在一对多关系。图状构造或网状构造构造中数据元素之间存在多对多关系HashMap构造实现原理是将put进来key-value封装成一种Entry对象存储到一种Entry数组中,位置(数组下标)由key哈希值与数组长度计算而来。如果数组当前下标已有值,则将数组当前下标值指向新添加Entry对象。hibernate
orm实现原理(xml解析,反射调用javaBean办法)
在使用它实现ORM功能时候,重要文献有:映射类(*.java)、映射文献
(*.hbm.xml)以及数据库配备文献(*.properties或*.cfg.xml),它们各自
作用如下。
⑴映射类:它作用是描述数据库表构造,表中字段在类中被描述成属性,
将来就可以实现把表中记录映射成为该类对象。
⑵映射文献:它作用是指定数据库表和映射类之间关系,涉及映射类和数据
库表相应关系、表字段和类属性类型相应关系以及表字段和类属性名称对
应关系等。
⑶数据库配备文献:它作用是指定与数据库连接时需要连接信息,例如连接
哪中数据库、登录顾客名、登录密码以及连接字符串等。对http合同理解吗?get,post,put,delete使用场景以及http1.1与1.0区别(长短连接)
http叫超文本传播合同,是一种基于祈求与响应模式、无状态、应用层合同,常基于TCP连接方式,HTTP1.1版本中给出一种持续连接机制,绝大多数Web开发,都是构建在HTTP合同之上Web应用。GET:祈求指定页面信息,并返回实体主体。
POST:祈求服务器接受所指定文档作为对所标记URI新从属实体。
PUT:从客户端向服务器传送数据取代指定文档内容。
DELETE:祈求服务器删除指定页面1,HTTP/1.0合同使用非持久连接,即在非持久连接下,一种tcp连接只传播一种Web对象,;
2,HTTP/1.1默认使用持久连接(然而,HTTP/1.1合同客户机和服务器可以配备成使用非持久连接)。在持久连接下,不必为每个Web对象传送建立一种新连接,一种连接中可以传播各种对象!简介下你项目,sql惯用优化技巧(构造优化,索引优化,sql优化)
(1)不要在建立索引数据列上进行下列操作:
避免对索引字段进行计算操作
避免在索引字段上使用not,<>,!=
避免在索引列上使用ISNULL和ISNOTNULL
避免在索引列上浮现数据类型转换
避免在索引字段上使用函数
避免建立索引列中使用空值
(2)SELECT子句中避免使用’*’(3)使用表别名(Alias)(4)ORACLE采用自下而上顺序解析WHERE子句,依照这个原理,表之间连接必要写在其她WHERE条件之前,那些可以过滤掉最大数量记录条件必要写在WHERE子句末尾谈谈你对分布式和cluster理解
所谓分布式计算是一门计算机科学,它研究如何把一种需要非常巨大计算能力才干解决问题提成许多小某些,然后把这些某些分派给许多计算机进行解决,最后把这些计算成果综合起来得到最后成果。簇(cluster),咱们懂得磁盘是由一种一种扇区构成,若干个扇区合为一种簇,文献存取是以簇为单位,哪怕这个文献只有1个字节。每个簇在文献分派表中均有相应表项,簇号即为表项号,每个表项占1.5个字节(磁盘空间在10MB如下)或2个字节(磁盘空间在10MB以上)。简介jvm内存模型和垃圾回收机制(栈帧,堆,办法区,分代回收机制)
JVM内存模型1.栈
Java栈是与每个线程关联,JVM在创立每一种线程时候,会分派一定栈空间给线程.存储局部变量,引用,办法,返回值等.StackOverflowError:如果在线程执行过程中,栈空间不够用,那么JVM就会抛出此异常,这种状况普通是死递归导致.2.堆
JVM堆普通分为三个某些:
(1).Young:年轻代Young区被分为三个某些,Eden区和两个大小严格相似Survivor区,其中Survivor区间中,某一时刻只有其中一种是被使用,此外一种留做垃圾收集时复制对象用,在Young区间变满时候,minorGC就会将存活对象一到空闲Survivor区间中,依照JVM方略,在通过几次垃圾收集后,依然存活于Suvivor对象被移动到Tenured区间.(2)Tenured:老年代Tenured区重要保存生命周期长对象,普通是某些老对象,当某些对象在Young复制转移一定次数后来,对象就会被转移到Tenured区,普通如果系统中用了application级别缓存,缓存中对象往往会被转移到这一区间.(3)Perm持久代:
Perm代重要保存class,method,filed等对象,这某些空间普通不会溢出.\o"JavaSE知识库"Java.lang.OutofMemoryError:PermGenspace错误,导致这个错误很大因素就是也许每次都重新布置,但重新布置后,类class没有被卸载掉,这样就导致了大量class对象保存在了perm中,这种状况下,普通重新启动应用服务器可以解决问题.3.堆大小
-Xmx:指定JVM堆得最大内存,在JVM启动后来,会分派-Xmx参数指定大小内存给JVM,但是不一定所有使用,JVM会依照-Xms参数来调节真正用于JVM内存
-Xms:指定了JVM初始启动后来初始化内存
-Xmx-Xms之差就是三个Virtual空间总大小(年轻代、年老代、持久代)JVM垃圾回收机制分代垃圾回收
不同对象生命周期不同,与业务信息关于对象生命周期较长,如Http祈求中Session对象,线程,socket连接.程序运营过程中暂时变量生命周期较短,如String对象.
把不同生命周期对象放在不同代上,不同代上采用最适当它垃圾回收方式进行回收。JVM中共划分为三个代:年轻代、年老代和持久代,其中持久代重要存储Java类类信息,与垃圾收集要收集Java对象关系不大,年轻代和年老代划分是对垃圾收集影响较大。
年轻代:存储所有新生对象
年老代:在年轻代中经历了N次垃圾回收依然存活对象,将被放到年老代中,故都是某些生命周期较长对象;
持久代:用于存储静态文献,如Java类,办法等,(持久代对垃圾回收没有明显影响,但是有些应用也许动态生成或者调用某些class,例如Hibernate等,在这种时候需要设立一种比较大持久代空间来存储这些运营过程中新增类)
新生代垃圾收集器命名为"minorGC",l老生代GC命名为"fullGC"或"MajorGC",其中用System.gc()强制执行是FullGC.对CMS回收理解吗?
CMS(ConcurrentMark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间垃圾回收器。对于规定服务器响应速度应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC
,这个参数表达对于老年代回收采用CMS。CMS采用基本\o"算法与数据构造知识库"算法是:标记—清除。String引用在哪里,对象在哪里
在java中引用也是对象。(1)堆栈:普通存储引用和基本类型变量,堆栈重要是通过堆栈指针上下移动来对内存进行分派和释放。基本类型变量并不适应于new进行创立,由于其所占内存较小。(2)堆:用于存储java对象,当程序执行new时候,堆就会分派一种空间给这个对象,记住堆进行内存分派和释放是比堆栈进行存储和释放内存消耗更多时间,这就是基本类型变量要存在堆栈中了,由于基本类型变量是用最频繁,频繁存储和释放内存,在消耗更多时候,性能可想而知说说redis数据类型(String
list
set
lset)
(1)全局key操作(2)String(字符串)(3)Hashes类型:(map)(4)List类型(5)set类型(6)Sorted-Sets类型为什么要使用缓存?
缓存离客户端更近,因而,从缓存祈求内容比从源服务器所用时间更少,呈现速度更快,网站就显得更敏捷。在实际项目中如何解决并发问题,并发和并行区别?
大型网站,例如门户网站,在面对大量顾客访问、高并发祈求方面,基本解决方案集中在这样几种环节:使用高性能服务器、高性能数据库、高效率编程语言、尚有高性能Web容器。HTML静态化、图片服务器分离、数据库集群、库表散
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级历史人教版下册听课评课记录:第5课 三大改造
- 林地长期承包合同范本
- 乡镇精装修商铺出租合同范本
- 储存场地租赁合同范本
- 广告公司材料采购合同范本
- 二零二五年度无子女离婚协议书及子女教育资助合同
- 二零二五年度酒店会议室场地租赁及配套交通合同
- 二零二五年度酒吧租赁合同合同签订后的租赁物维护责任
- 2025年度商铺转让三方合同附品牌使用权及营销支持
- 夏令营代理商合作协议书范本
- 三星SHP-DP728指纹锁说明书
- 预应力锚索张拉及封锚
- 烤烟生产沿革
- GB 1886.227-2016食品安全国家标准食品添加剂吗啉脂肪酸盐果蜡
- 毛泽东思想课件-第七章 毛泽东思想的活的灵魂
- 公共关系效果的评估课件
- 建筑施工安全员理论考核试题与答案
- 高速公路用地勘测定界及放线定桩技术标书
- 华莱士标准化体系
- 快捷smt全自动物料仓储方案
- keysight眼图和抖动噪声基础知识与测量方法
评论
0/150
提交评论