您的位置 首页 java

编程者初入社会,面试官必问Java问题,建议打印背记。

基础方面

BS和CS的区别以及优缺点:

C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。

B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或InternetExplorer,服务器安装Oracle、Sybase、Informix或 sql Server等数据库。浏览器通过Web Server 同数据库进行数据交互。 C/S的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快 C/S客户端的计算机电脑配置要求较高。

B/S客户端的计算机电脑配置要求较低。

C/S每一个客户端都必须安装和配置软件,客户端不必安装,使用浏览器访问,易推广。

B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。

C/S每一个客户端都要升级程序。可以采用自动升级。BS客户端不必安装及维护。

C/S一般面向相对固定的用户群,程序更加注重流程,它可以对权限进行多层次校验,提供了更安全的存取模式,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S结构适宜。

事务的 隔离级别 和传播特性:

在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句。当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。

事务的ACID属性

1. 原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,

要么都不发生。

2. 一致性(Consistency)

事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(数据不被破坏)

3. 隔离性(Isolation)

事务的隔离性是指一个事务的执行不能被其他事务干扰.

4. 持久性(Durability)

持久性是指一个事务一旦被提交,

它对数据库中数据的改变就是永久性的.

在JDBC中,

事务默认是自动提交的,

每次执行一个 SQL 语句时,如果执行成功,

就会向数据库自动提交,而不能回滚

为了让多个 SQL 语句作为一个事务执行:

(1)执行语句前调用 Connection 对象的 setAutoCommit(false);

以取消自动提交事务

(2)在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务

(3)在出现异常时,调用 rollback(); 方法回滚事务。

五个事务隔级别分别为:lsolation的属性值

1,default

默认的事务隔离级别

2,read_uncommitted

读未提交,一个事务可以操作另外一个未提交的事务,不能避免脏读,不可重复读,幻读,隔离级别最低,并发性 能最高

3,read_committed

读已提交,一个事务不可以操作另外一个未提交的事务, 能防止脏读,不能避免不可重复读,幻读。

4,repeatable_read

能够避免脏读,不可重复读,不能避免幻读

5,serializable

隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。

七个事务的传播行为

1,propagation_required

如果一个事务存在,则支持当前事务,如果不存在,则创建新的事务

2,propagation_supports

如果一个事务存在,则支持当前事务,如果不存在,则非事务的方法运行

3,propagation_mendatory

如果一个事务存在,则支持当前事务,如果存在,则抛出异常

4,propagation_requires_new

总是要开启一个新的事务,如果事务存在,将该事务挂起

5,propagation_not_supported

总是非事务方法运行,并挂起所有的事务

6,propagation_never

总是非事务方法运行,如果事务存在则抛出异常

7,propagation_nested

某一个事务存在,则运行在一个嵌套的事务中

ajax

ajax本身不支持跨域,可以通过 JSon p来达到跨域目的。jsonp的本质就是通过script标签在发送url请求时多加了一个callback参数,服务端通过request获取callback参数的值也就是回调的函数名,将要传递的json数据作为参数响应给客户端进行回调。

通过eval可以将后台返回的json格式的 字符串 转换为json对象。

jquery的ajax默认情况下是没有超时限制的,可以通过timeout【单位:毫秒】设置超时时间。

Vector & ArrayList的区别:

1) Vector的方法都是同步的(Synchronized),是 线程 安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。

2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

懒汉式单例模式:

public class Singleton {

private static Singleton singleton = null;

private Singleton(){

}

synchronized public static getInstance(){

if(singleton == null){

singleton = new Singleton();

}

return singleton;

}

}

饿汉式单例模式:

public class Singleton {

private static final Singleton singleton = new Singleton();

public Singleton(){

}

public static getInstance(){

return singleton ;

}

}

JDK 版本特性:

Jdk1.7新特性?

1, Switch可以支持字符串,

2,泛型自动推断,

3,俩个char之间可以使用equals方法?

4,安全的加减乘除

5,map支持花括号传值

Jdk1.8新特性

1,允许接口中有默认方法实现??

2,函数式接口??

3,接口里允许使用方法体

4,允许::调用方法???

5,加入全新的日期API(这些功能都放在 Java .time包下)提出了时间的加减乘除?

6,允许在类和接口上写注解

JDK1.9新特性

1,简化进程API??

2,轻量级的JSon?API??(Java.util包)

3,钱或货币的API(钱或货币之间的转换)?

4,改善锁争用机制(通讯服务器开房了海量的进程,链接客户端申请同一个资源)

&和&&的区别:

&和&&都可以用作逻辑与的运算符,&&为短路与,&不是短路与。

另外&可以做为整数的位运算符

例1:对于if(str != null&& !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。

例2:If(x==33 &++y>0) y会增长,if(x==33 && ++y>0)不会增长

备注:这道题先说两者的共同点,再说出&&和&的特殊之处,并列举一些经典的例子来表明自己理解透彻深入、实际经验丰富。

“==”和equals方法的区别:

他们的区别主要存在在引用数据类型上

==为比较两侧的对象是否同一对象,是用内存地址来比较的

equals是方法,默认是用内存地址比较,重写后,主要是用来比较两侧的对象的值是否相同,和equals方法中的实现有关

==可以两侧都为null,但equals左侧的引用指向的对象不能空,不然有NullPointerException

除非需要比较两个引用指向的对象是同一对象,一般都使用equals方法进行比较。尤其是String之类的值对象,另外,常量尽量放在比较的左侧

面向对象的特征有哪些方面:

1. 封装,隐藏内部实现,只暴露公共行为

2. 继承,提高代码的重用性

3. 多态,体现现实生活中相似对象的差异性

4. 抽象,抽取现实世界中相似对象的共同点

linux中的命令:

jvm 相关:

栈溢出,就是当递归调用的时候没有临界退出条件

批量导入大量数据或者dom4j解析大的xml文件的时候

会出堆溢出,通过分段批量提交以及sax代替dom4j

java虚拟机有一个堆,堆是运行时数据区域所有的类和数组的内存都是从堆里分配的

堆是在java虚拟机启动的时候创建的,两种内存:堆和栈,堆是java开发人员使用的

栈是jvm自己使用的,内存结构分为:堆(逻辑上连续的,物理上不是连续的,存的是

类实例,和数组),虚拟机栈(基本的数据类型,引用对象),本地方法栈(jvm栈是为

java方法的执行提供服务,而本地方法栈是为虚拟机为本地方法提供服务的),方法区(持久代)

(加载了类的基本信息,常量池的属于方法区的一部分,string就是存在常量池中),

计算器(就是来选取要执行下一条字节码的指令)

gc垃圾回收机制,动态分配内存的大小,依靠垃圾回收机制来完成对分配内存空间的回收,

从而避免了内存溢出的问题,降低了程序员工作的复杂度,采用了分代回收算法,jvm将内存分为

年轻代和年老代,年轻代就是对象刚建立不久,生命周期也很短,而年老代对象创建的比较久了

而且生命周期也很长,对于年轻代 频繁 采用复制算法 而年老代比较少采用tracing算法

jvm的内存大小和操作系统有关,一般来说是32位处理器内存为2个g,64为的处理器就不会有有限制了

操作系统会给一个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统 下为2G-3G)

java的监视和管理控制台:是我们在运行的时候监视各种jvm资源统计信息,使用与检测死锁,内存遗漏,可以连接到一个本地或远程的jvm可以用来监视线程的状态,内存的使用情况,垃圾收集等等等

jvm的调优:开启server模式,增堆的大小,以及持久代的大小,提高程序的运行效率,

设置初堆大小和最大堆的大小都为一样的值,避免了堆增长带来额外的压力,持久代也是一样

jvm中类的生命周期:加载、连接、初始化,使用,卸载

连接(校验,准备,解析)

在服务器启动的时候报内存溢出是因为方法区太小,也就相当于持久代的内存太小。

通过-XX:PermSize以及-XX:MaxPermSize来指定其大小

,可以解决这个问题。

引导类加载器:rt.Jar包

扩展类加载器:jre目录有一个ext下面的lib目录

系统类加载器:classPath的里面的东西

自定义类加载器:加载自定义类

Jvm优化:

JVM 优化主要是解决java的 GC (垃圾回收)问题。

JVM 的使用过程中各代有,年轻带主要存放,新创建对象。 年老代,年老代存放从年轻代存活的 对象。Perm(持久代)用 于存放静态文件,如今Java类、方法等。一般持久代可以设置大一点。

GC优化的目的有两个:

1、将转移到老年代的对象数量降低到最小;

2、减少full GC的执行时间;

为了达到上面的目的,一般地,你需要做的事情有:

1、减少使用全局变量和大对象;

2、调整新生代的大小到最合适;

3、设置老年代的大小为最合适;

4、选择合适的GC收集器;

【垃圾回收(GC收集器):串行收集器、并行收集器、并发收集器。

o 串行处理器:

–适用情况:数据量比较小(100M左右);单处理器下并且对响应时间无要求的应用。

–缺点:只能用于小型应用

o 并行处理器:

–适用情况:“对吞吐量有高要求”,多CPU、对应用响应时间无要求的中、大型应用。举例:后台处理、科学计算。(例如 ERP 银行系统)

–缺点:应用响应时间可能较长

o 并发处理器:

–适用情况:“对响应时间有高要求”,多CPU、对应用响应时间有较高要求的中、大型应用。举例:Web服务器/应用服务器、电信交换、集成开发环境。(例如互联网网站)】

5、设置jvm堆大小 ,32bit 1.5-2G ,64bit 可以超过 2G ,新版的JDK 每个线程的堆大小在1M改变这个线程所占用的堆大小,可以生成更多的线程,一般项目里线程数不能超过5000个。

jQuery的10个常用方法,常用选择器(五大类),ajax常用的属性:

常用方法:

1,$(“#ID”).val(); //取value值

2,$(“#ID”).val(“xxx”); //赋值

3,$(“#ID”).text(); //相当于取innerText

4,$(“#ID”).text(“”); //相当于赋值给innerText

5,$(“#ID”).html(); //相当于取innerHTML

6,$(“#ID”).html(“”); //相当于赋值给innerHTML

7,$(“#ID”).add();//将元素添加到匹配元素的集合中

8,$(“#ID”).hide(); //隐藏

9,$(“#ID”).show(); //显示

10,$(“#ID”).attr(key,value);//取得或设置匹配元素的属性值

常用选择器:

1,id选择器$(“#myELement”)选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素

2,标签选择器$(“div”)选择所有的div标签元素,返回div元素数组

3.类选择器$(“.myClass”)选择使用myClass类的css的所有元素

4.通配符选择器$(“*”)选择文档中的所有的元素

5.属性选择器$(“[href=’#’]”) 选取所有带有 href 值等于 “#” 的元素。

Ajax的属性:

1.url:?要求为String类型的参数,(默认为当前页地址)发送请求的地址。

2.type:?要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。

3.async:为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。

4.data:前台往后台传送的数据信息,可以是form表单或者单个数据信息

5.dataType:json或者text,规定请求后台返回前台时的数据类型

6.success:为Function类型的参数,请求成功后调用的回调函数

7.error:为Function类型的参数,请求失败时被调用的函数

序列化 和反序列化:

序列化:序列化就是将内存中的对象持久化到本地文件的过程

为什么要序列化:通常在http网络传输过程中,是不支持对象传递的,所以通过序列化,将对象转换成可以被传输的流,方便对象信息传递

如何将一个对象序列化:1、类要实现 Serializable接口;2、通过ObjectOutputStream的writeObject()将对象写到文件中

反序列化:将文件中存储的对象信息读取后写到内存中

框架篇:

SpringMVC 的运行原理是:

整个处理过程从一个HTTP请求开始:

1.Tomcat在启动时加载解析web.xml,找到spring mvc的前端总控制器DispatcherServlet,并且通过DispatcherServlet来加载相关的配置文件信息。

2.DispatcherServlet接收到客户端请求,找到对应HandlerMapping,根据映射规则,找到对应的处理器(Handler)。

3.调用相应处理器中的处理方法,处理该请求后,会返回一个ModelAndView。

4.DispatcherServlet根据得到的ModelAndView中的视图对象,找到一个合适的ViewResolver(视图解析器),根据视图解析器的配置,DispatcherServlet将要显示的数据传给对应的视图,最后显示给用户。

mybatis和ibatis的区别:

1.以前用的parameterClass在mybatis中已经用不了了,mybatis里应该使用parameterType。另外resultMap里面也不能继续使用了改成了type

2.dynamic标签不能使用了

3.数据类型的声明和ibatis有了很大的差别,ibatis可以像下面这样写

#FCODE:VARCHAR2#, mybatis的话一般是这样弄的#{FMARK,jdbcType=VARCHAR}

4.mybatis现在已经没有SqlMapClient了,使用的则是SqlSession.在原来的基础上加了像selectMap,selectList,selectOne这样的方法,使用更方便了

5.加了一个叫映射器的新东西,只需要写出接口而不需要实现类就能够操作数据如

6 需要注意的是spring3.0一下的版本并不支持mybatis,

$与#号的区别:

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”.

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.

3. #方式能够很大程度防止sql注入。

4.$方式无法防止Sql注入

5.$方式一般用于传入数据库对象,例如传入表名

6.一般能用#的就别用$.

非专业知识:

三个词形容自己:

认真细致,团队协作能力强,抗压能力强

谈谈你的对软件行业发展前景的理解:

现在的生活越来越离不开网络和便捷的生活方式,软件的行业就是顺应了这一特点,通过开发的软件简化了人们一些生活复杂度,所以在不久的将来必将成为科技的前端和人们生活的密切相关。

你凭什么要这么高的薪资:

首先我既然敢要这么多钱,那么我自信我有这样的实力能给公司带来同等甚至更大的经济效益,我正值壮年,精力旺盛,能够在高压力下正常的工作,曾在项目上线时连续两天通宵直到项目正常运行,在工作时,项目经理让我研究东西,我能在较快的时间里学会并熟练应用,把这项技术教给同事,让他们快速学会这项技术。

你的五年规划:

如果我被贵公司录用的话,肯定先快速的适应公司新环境.与同事处好人际关系,

然后在完成公司给的任务之后学一些新的技术,来提升自己的能力。如果贵公司晋升机制好的话,我会考虑向项目经理的方面去发展。

谈谈你对加班的看法:

加班其实是每个公司遇到的问题,之前我也提过我是一个能够以大局为重的人,为了公司的利益和项目组的进度我完全可以加班来完成,但是在工作中我会规划好自己的进度按时完成任务,即使在我的任务完成的前提下,我也会和项目组待在一起帮助他们完成项目任务。

最后你还想有什么了解吗:

1) 咱们公司的五险一金是怎么交的?

2) 咱们公司开发的主力框架什么?

3) 咱们公司的晋升制度是什么?

4) 咱们公司用的什么技术框架/开发工具/数据库?

5) 咱们公司在开发什么类型的项目?

注意:一定要问一些问题,能显示你对公司、行业或者岗位具有一定的了解,自己具有独立思考的能力。

由于篇幅限制,一些学习文档、视频及面试真题、音频等完整版资料未能全部交流分享。

获取资料方式:转发此文+关注 并 私信小编“资料”,即可免费获取!

文章来源:智云一二三科技

文章标题:编程者初入社会,面试官必问Java问题,建议打印背记。

文章地址:https://www.zhihuclub.com/187998.shtml

关于作者: 智云科技

热门文章

网站地图