面试题1

2018-12-12 09:23:18来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

---恢复内容开始---

1.++i 先计算后输出
2.arraycopy(a,2,b,2,2) 从a数组第二位复制两位替换掉b数组第二位后两位
3.java独特特点,平台无关性。
4..java文件编译成.class文件
5.读取图片文件可使用
6.linkedhashset会保留顺序,treeset会自动排序。
7.java变量名不能是数字,不能是关键字。
8.private表示私有,只能在本类中使用。
9.对象需要跨网络传输,需要实现Serializable接口
10.生命抽象方法不可写大括号。
11.count+=i 表示count=i+count
12.spring boot框架,其实他不算是一个框架,他算是整合了多个框架。他拥有自己的pom.xml和配置文件,通过配置文件或YML实现了对SSM或者其他框架的整合,通过一个application的main方法和注解启动spring boot。他的使用场景非常广泛,因为他整合多个框架,所以广泛应用在各种项目开发和分布式项目的搭建。一般是使用IDEA创建spring boot项目,然后勾选需要的maven依赖。遇到的坑:在创建完成后,无法启动spring boot项目。
13.select sum(列名) from 表名 where //求综合
select avg(列名) from 表名 where //求平均数
select count(1) from 表名 where //次数
select 列名 from 表名 where 列名> < //对比
优化数据库方法:
1.避免在子句中使用!=或<>判断,所以拆分语句
2.添加索引。
3.避免全表查询

14.java中线程实现方式:
1.classA继承thread,并重写run方法,new A.start(),启动线程
2.classA实现Runnable接口,并覆盖run方法,new thread(new A()).start()0,启动线程。
15.i=12;
i+=i-=i*=i (结果为-120)
16.反射就是运行中的程序检查自己和软件运行环境的能力,它可以根据他发现的进行改变。通俗的讲就是反射可以在运行时根据指定的类名获得类的信息。
invoke()方法就是调用method类代表的方法,可以实现动态调用。
17.linux系统中,Rm-r /mnt/tmp所代表的是删除文件夹中所有文件
18.elasticSearch和solr类似,创建索引,全文检索的一个开源框架
19.在java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。
20.对数据进行枷锁,程序先通过acquire获取锁来对数据排他访问,然后对数据进行一系列的操作最后释放锁。
21.解决集群环境下session共享问题,有下面四种方案:(1).粘性session,每次都将同一用户的所有请求转发至同一台服务器上,用户与服务器绑定。(2).服务器session,每次session发生变化时,就广播给所有集群中的服务器,使所有服务器上的session相同.(3).session共享,缓存session,使用redis,memcached。(4).session持久化,将session存储到数据库中,向操作数据一样操作session。

22.被final修饰的类无法被继承,被final修饰的方法无法被重写。被final修饰的值为常量。
final关键字提高了性能,保证安全。使用final关键字,jvm会对方法变量及类进行优化。
23.stringbuffer和stringbuilder的区别:他们两个方法功能完全等价,buffer中方法采用了synchronized关键字进行修饰,因此线程安全。同理builder线程非安全。 单线程程序下,builder效率更快,因为不需要加锁
24. contructors 构造函数 applied 应用
25. 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public,private,protected修饰。
26.error是系统中的错误,程序员不能改变和处理,实在程序编译救赎先错误,仅靠程序本身无法恢复和预防,遇到这样的问题,建议终止程序。
而exception是可以处理的异常,可以捕获可能恢复。遇到这类问题尽可能处理异常,是程序恢复
27.GET请求=数据库select
PUT请求=数据库update
POST请求=数据库insert
delete请求=数据库delete
28.抽象类和接口的区别,一个是继承,一个是实现。抽象方法有public修饰,接口默认是public不可以修饰。抽象类可定义构造方法,也可以有抽象方法和具体方法。接口完全抽象无构造方法。extends继承抽象类,implements实现接口。
29.方法的重写和重载是java多态性的不同表现。
override(重写)特点:(1).子类方法名称,参数类型必须要和父类完全匹配,才能重写。(2).子类的方法返回值必须和父类相同,可以扩大不可缩小。(3).子类方法抛出异常,只能是父类抛出异常的子异常。(4).被private、final等关键字修饰不能被重写。(5)不是抽象方法不能被abstract修饰。
overload(重载)特点:(1).再使用重载时只能通过不同的参数样式。(2).方法异常类型和数目不会对重载造成影响.(3).不能通过访问权限、返回类型、抛出异常进行重载。

30.dependency injection=依赖注入
实现依赖注入的不同方法:构造函数注入,设值注入。
31.annotation=注解
@Aspect 指定一个类为切面类
@Before 前置通知:目标方法之前执行
@AfterReturning 返回后通知:执行方法结束前执行
@Around 环绕通知:环绕目标方法执行
@AfterThrowing 异常通知:出现异常执行
@After 后置通知:目标方法之后执行
配置文件中添加<aop:aspectj-autoproxy/>元素,启用对于@AspectJ注解的支持
@Conmponent 加入IOC容器

32.当使用|时,若前面的表达式为真时,程序会继续执行后面的表达式,然后再得到true结果。
||时,若前面的表达式结果为真,则程序不会再执行后面的表达式,直接得出TRUE的结果。

33.switch可作用于char,byte,short,int和他们对应的包装类。可作用于string类型,枚举类型。不可作用于long,double,float,boolean类型和他们的包装类。
34. hashmap线程非安全,允许有null的键和值,效率较高,方法不是Synchronize的要提供外同步。有containsvalue和containskey方法。hashmap是java1.2引进的map interface的一个实现。是hashtable的轻量级实现。
hashtable,线程安全,不允许有null的键和值。效率稍低,方法是Synchronize的,有contains方法,hashtable继承于Dictionary类。hashtable比hashmap老
35.spring的好处:
一.轻量级框架
二.控制反转,通过控制反转实现松耦合
三.面向切面AOP,把应用业务逻辑和系统分开
四.容器,spring包含并管理应用中对象的生命周期和配置
五.MVC框架,强大的web框架
六.事务管理,spring提供持续的事务管理接口,可以扩展到上至本地下至全局的事务管理。
七.异常处理,spring提供方便的API将具体相关的异常处理,转化为一致的unchecked异常

36.spring生命周期:
bean建立,由beanfactory读取bean定义文件,并声称各个实例
setter注入,执行bean的属性依赖注入
BeanFactoryAware的seBeanName(),如果实现该接口,则执行setbeanname方法
BeanFactoryAwaredesetBeanFactory(),如果有关联pricessor,则在bean初始化之前都会执行这个实例的processBeforeInitialization()方法
DisposableBean的destroy(),在容器关闭时,可以在bean定义文件中使用"destory-method"定义的方法

37.如果使用ApplicationContextAware接口,则执行其setApplicationContext()方法,然后再进行BeanPostProcessors的processBeforeInitialiization()
实际上,ApplicationContext除了向BeanFactory那样维护容器外,还提供更加丰富的框架功能,如Bean的消息,时间处理机制等。

38.JSON开源库类:1.使用Jackson 2.Google-Gson类库
3.JSON-lib类库 4.Flexjson类库
5.Json-io类库 6.Genson类库
7.JSONIJ类库

39.git命令行:
初始化文件夹=git init
创建本地分支dev=git branch dev
查看本地分支=git branch
切换分支master=git checkout master

40.maven命令打包war包:命令进入项目包pom.xml下,命令行输入: mvn package

41.JVM内存划分:java栈,本地方法栈,程序计数器,堆,方法区

42.jvm中堆空间可以分为三个区,新生代,老生代,永久代
新生代刻划分为三个区,Eden区,两个幸存区。在jvm运行时,可以通过配置参数来改变整个JVM堆的配置比例。配置有:jvm运行时堆的大小,新生代堆空间大小,永久代大小和其他

43.JVM运行时数据区:
1.PC寄存器:用于存储每个线程下一步将执行的JVM之令。PC指当前指令的地址。JVM用PC来追踪指令执行的位置,PC实际上是指向方法区的一个内存地址。
2.jvm栈:栈是线程私有的,每个线程创建的同时都会创建jvm栈,栈中存放的是当前局部基本类型的变量,部分的返回结果以及StackFrame,非基本类型的对象在栈上仅存放一个指向堆上的地址。
3.堆:它是jvm来存储对象实例以及数组值的区域,可以作为java中所有通过new创建的对象的内存都在此分配,heap中的对象的内存需要等待GC进行回收。
4.方法区域:这里存放了所加载的类的信息,类中的静态变量,类中定义为final的变量、类中的field信息、类中的方法信息,开发人员在程序中通过class对象中的get,isinterface等方法来获取信息,数据全部来源于方法区,同时方法区也是全剧共享,在异地你条件下会被GC,方法区需要使用内存超过允许大小,会抛出outofmemory的错误信息
5.运行时常量池:存放的是类中的固定常量信息,方法和field的引用信息等。其空间从方法区分配。
6.本地方法栈:jvm采用本地方法堆栈来支持native方法,此区域用于存储每个native方法调用的状态。

44.JVM-GC:将内存中不再被使用的对象进行回收,GC中用于回收的方法叫收集器,由于GC需要消耗一些资源和时间,在java对对象的生命收起进行分析后,按照新生代、旧生代的方式来对对象进行收集,尽可能缩短GC对应用造成的暂停。

45.JVM优化原则:尽量减少YoungGC,尽量减少FullGC。
优化方法:一、代码角度,缩短对象生命期,尤其是大对象。二、JVM参数角度,优化JVM参数以减少YGC/FGC次数,可替换收集器。
解决youngGC问题:把用Arraylist存储信息体采用hashmap,map中的key是uudi,value是消息本体。这样可以大大增加并发性能。 采用AtomicInteger来保存当前map中消息内容的大小。 当map中的消息体总大小到达阈值后,将当前map中所有key取出,然后将map中的数据封装到一条消息中,将当前map中的信息体大小置为0,然后for循环删除已成功发送的key。

46.内存泄漏以及解决方法:
系统崩溃前的一些现象:*垃圾回收时间变长,fullGC时间变长。*fullgc次数变多 *年老代的内存越来越大斌且每次fullgc年老代内存没有释放
经过以上三点系统会无响应,逐渐达到OutOfMemory临界值

 

---恢复内容结束---

1.++i 先计算后输出
2.arraycopy(a,2,b,2,2) 从a数组第二位复制两位替换掉b数组第二位后两位
3.java独特特点,平台无关性。
4..java文件编译成.class文件
5.读取图片文件可使用
6.linkedhashset会保留顺序,treeset会自动排序。
7.java变量名不能是数字,不能是关键字。
8.private表示私有,只能在本类中使用。
9.对象需要跨网络传输,需要实现Serializable接口
10.生命抽象方法不可写大括号。
11.count+=i 表示count=i+count
12.spring boot框架,其实他不算是一个框架,他算是整合了多个框架。他拥有自己的pom.xml和配置文件,通过配置文件或YML实现了对SSM或者其他框架的整合,通过一个application的main方法和注解启动spring boot。他的使用场景非常广泛,因为他整合多个框架,所以广泛应用在各种项目开发和分布式项目的搭建。一般是使用IDEA创建spring boot项目,然后勾选需要的maven依赖。遇到的坑:在创建完成后,无法启动spring boot项目。
13.select sum(列名) from 表名 where //求综合
select avg(列名) from 表名 where //求平均数
select count(1) from 表名 where //次数
select 列名 from 表名 where 列名> < //对比
优化数据库方法:
1.避免在子句中使用!=或<>判断,所以拆分语句
2.添加索引。
3.避免全表查询

14.java中线程实现方式:
1.classA继承thread,并重写run方法,new A.start(),启动线程
2.classA实现Runnable接口,并覆盖run方法,new thread(new A()).start()0,启动线程。
15.i=12;
i+=i-=i*=i (结果为-120)
16.反射就是运行中的程序检查自己和软件运行环境的能力,它可以根据他发现的进行改变。通俗的讲就是反射可以在运行时根据指定的类名获得类的信息。
invoke()方法就是调用method类代表的方法,可以实现动态调用。
17.linux系统中,Rm-r /mnt/tmp所代表的是删除文件夹中所有文件
18.elasticSearch和solr类似,创建索引,全文检索的一个开源框架
19.在java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。
20.对数据进行枷锁,程序先通过acquire获取锁来对数据排他访问,然后对数据进行一系列的操作最后释放锁。
21.解决集群环境下session共享问题,有下面四种方案:(1).粘性session,每次都将同一用户的所有请求转发至同一台服务器上,用户与服务器绑定。(2).服务器session,每次session发生变化时,就广播给所有集群中的服务器,使所有服务器上的session相同.(3).session共享,缓存session,使用redis,memcached。(4).session持久化,将session存储到数据库中,向操作数据一样操作session。

22.被final修饰的类无法被继承,被final修饰的方法无法被重写。被final修饰的值为常量。
final关键字提高了性能,保证安全。使用final关键字,jvm会对方法变量及类进行优化。
23.stringbuffer和stringbuilder的区别:他们两个方法功能完全等价,buffer中方法采用了synchronized关键字进行修饰,因此线程安全。同理builder线程非安全。 单线程程序下,builder效率更快,因为不需要加锁
24. contructors 构造函数 applied 应用
25. 构造方法不能被static、final、synchronized、abstract、native修饰,但可以被public,private,protected修饰。
26.error是系统中的错误,程序员不能改变和处理,实在程序编译救赎先错误,仅靠程序本身无法恢复和预防,遇到这样的问题,建议终止程序。
而exception是可以处理的异常,可以捕获可能恢复。遇到这类问题尽可能处理异常,是程序恢复
27.GET请求=数据库select
PUT请求=数据库update
POST请求=数据库insert
delete请求=数据库delete
28.抽象类和接口的区别,一个是继承,一个是实现。抽象方法有public修饰,接口默认是public不可以修饰。抽象类可定义构造方法,也可以有抽象方法和具体方法。接口完全抽象无构造方法。extends继承抽象类,implements实现接口。
29.方法的重写和重载是java多态性的不同表现。
override(重写)特点:(1).子类方法名称,参数类型必须要和父类完全匹配,才能重写。(2).子类的方法返回值必须和父类相同,可以扩大不可缩小。(3).子类方法抛出异常,只能是父类抛出异常的子异常。(4).被private、final等关键字修饰不能被重写。(5)不是抽象方法不能被abstract修饰。
overload(重载)特点:(1).再使用重载时只能通过不同的参数样式。(2).方法异常类型和数目不会对重载造成影响.(3).不能通过访问权限、返回类型、抛出异常进行重载。

30.dependency injection=依赖注入
实现依赖注入的不同方法:构造函数注入,设值注入。
31.annotation=注解
@Aspect 指定一个类为切面类
@Before 前置通知:目标方法之前执行
@AfterReturning 返回后通知:执行方法结束前执行
@Around 环绕通知:环绕目标方法执行
@AfterThrowing 异常通知:出现异常执行
@After 后置通知:目标方法之后执行
配置文件中添加<aop:aspectj-autoproxy/>元素,启用对于@AspectJ注解的支持
@Conmponent 加入IOC容器

32.当使用|时,若前面的表达式为真时,程序会继续执行后面的表达式,然后再得到true结果。
||时,若前面的表达式结果为真,则程序不会再执行后面的表达式,直接得出TRUE的结果。

33.switch可作用于char,byte,short,int和他们对应的包装类。可作用于string类型,枚举类型。不可作用于long,double,float,boolean类型和他们的包装类。
34. hashmap线程非安全,允许有null的键和值,效率较高,方法不是Synchronize的要提供外同步。有containsvalue和containskey方法。hashmap是java1.2引进的map interface的一个实现。是hashtable的轻量级实现。
hashtable,线程安全,不允许有null的键和值。效率稍低,方法是Synchronize的,有contains方法,hashtable继承于Dictionary类。hashtable比hashmap老
35.spring的好处:
一.轻量级框架
二.控制反转,通过控制反转实现松耦合
三.面向切面AOP,把应用业务逻辑和系统分开
四.容器,spring包含并管理应用中对象的生命周期和配置
五.MVC框架,强大的web框架
六.事务管理,spring提供持续的事务管理接口,可以扩展到上至本地下至全局的事务管理。
七.异常处理,spring提供方便的API将具体相关的异常处理,转化为一致的unchecked异常

36.spring生命周期:
bean建立,由beanfactory读取bean定义文件,并声称各个实例
setter注入,执行bean的属性依赖注入
BeanFactoryAware的seBeanName(),如果实现该接口,则执行setbeanname方法
BeanFactoryAwaredesetBeanFactory(),如果有关联pricessor,则在bean初始化之前都会执行这个实例的processBeforeInitialization()方法
DisposableBean的destroy(),在容器关闭时,可以在bean定义文件中使用"destory-method"定义的方法

37.如果使用ApplicationContextAware接口,则执行其setApplicationContext()方法,然后再进行BeanPostProcessors的processBeforeInitialiization()
实际上,ApplicationContext除了向BeanFactory那样维护容器外,还提供更加丰富的框架功能,如Bean的消息,时间处理机制等。

38.JSON开源库类:1.使用Jackson 2.Google-Gson类库
3.JSON-lib类库 4.Flexjson类库
5.Json-io类库 6.Genson类库
7.JSONIJ类库

39.git命令行:
初始化文件夹=git init
创建本地分支dev=git branch dev
查看本地分支=git branch
切换分支master=git checkout master

40.maven命令打包war包:命令进入项目包pom.xml下,命令行输入: mvn package

41.JVM内存划分:java栈,本地方法栈,程序计数器,堆,方法区

42.jvm中堆空间可以分为三个区,新生代,老生代,永久代
新生代刻划分为三个区,Eden区,两个幸存区。在jvm运行时,可以通过配置参数来改变整个JVM堆的配置比例。配置有:jvm运行时堆的大小,新生代堆空间大小,永久代大小和其他

43.JVM运行时数据区:
1.PC寄存器:用于存储每个线程下一步将执行的JVM之令。PC指当前指令的地址。JVM用PC来追踪指令执行的位置,PC实际上是指向方法区的一个内存地址。
2.jvm栈:栈是线程私有的,每个线程创建的同时都会创建jvm栈,栈中存放的是当前局部基本类型的变量,部分的返回结果以及StackFrame,非基本类型的对象在栈上仅存放一个指向堆上的地址。
3.堆:它是jvm来存储对象实例以及数组值的区域,可以作为java中所有通过new创建的对象的内存都在此分配,heap中的对象的内存需要等待GC进行回收。
4.方法区域:这里存放了所加载的类的信息,类中的静态变量,类中定义为final的变量、类中的field信息、类中的方法信息,开发人员在程序中通过class对象中的get,isinterface等方法来获取信息,数据全部来源于方法区,同时方法区也是全剧共享,在异地你条件下会被GC,方法区需要使用内存超过允许大小,会抛出outofmemory的错误信息
5.运行时常量池:存放的是类中的固定常量信息,方法和field的引用信息等。其空间从方法区分配。
6.本地方法栈:jvm采用本地方法堆栈来支持native方法,此区域用于存储每个native方法调用的状态。

44.JVM-GC:将内存中不再被使用的对象进行回收,GC中用于回收的方法叫收集器,由于GC需要消耗一些资源和时间,在java对对象的生命收起进行分析后,按照新生代、旧生代的方式来对对象进行收集,尽可能缩短GC对应用造成的暂停。

45.JVM优化原则:尽量减少YoungGC,尽量减少FullGC。
优化方法:一、代码角度,缩短对象生命期,尤其是大对象。二、JVM参数角度,优化JVM参数以减少YGC/FGC次数,可替换收集器。
解决youngGC问题:把用Arraylist存储信息体采用hashmap,map中的key是uudi,value是消息本体。这样可以大大增加并发性能。 采用AtomicInteger来保存当前map中消息内容的大小。 当map中的消息体总大小到达阈值后,将当前map中所有key取出,然后将map中的数据封装到一条消息中,将当前map中的信息体大小置为0,然后for循环删除已成功发送的key。

46.内存泄漏以及解决方法:
系统崩溃前的一些现象:*垃圾回收时间变长,fullGC时间变长。*fullgc次数变多 *年老代的内存越来越大斌且每次fullgc年老代内存没有释放
经过以上三点系统会无响应,逐渐达到OutOfMemory临界值

 

linux命令行:
ls 查看目录,查看文件权限
pwd 查看当前工作目录
mkdir 创建文件夹
rm 删除命令
mv 移动文件或文件夹
cat命令 显示整个文件,创建一个文件,将几个合并一个

git命令行:
add 新增
commit 提交信息
log 查看日志
push 更新到github上
status 对应文件夹中添加新有项

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:微信公众号内唤起h5支付

下一篇:tomcat学习步骤,附带打破双亲委派模型企业应用实战