文档库 最新最全的文档下载
当前位置:文档库 › java工程师大型企业常见面试题总结

java工程师大型企业常见面试题总结

java工程师大型企业常见面试题总结
java工程师大型企业常见面试题总结

企业面试总结

经过一星期的紧张面试,获得了许多的面试经验,总结了面试中遇到的问题,现对一些主要问题进行总结,希望能给大家以帮助。

非项目方面

1.redis内存溢出及宕机状态的处理

redis存在于内存中,内存大小有限,也会存在宕机或重启导致内存数据清空的情况,此时我们可通过对redis中的数据设置生存周期及对数据进行持久化操作来尽量避免这些情况带来的危害。

●设置生命周期:到期后数据销毁

EXPIRE key seconds 设置生存时间

PERSIST key 清除生命时间(重新设值也会清除生命周期)

TTL key 查看剩余生存时间

TTL返回值:

大于0的数字:剩余生存时间,单位为秒i

-1 :没有生存时间,永久存储

-2 :数据已经被删除

●持久化:是把数据从内存以某种形式持久化到磁盘上。

持久化方式:RDB(relational database)和AOF(append only mode)

RDB:

通过快照方式实现,当符合条件时就对内存数据进行快照并存储到硬盘上。快照的条件在配置文件中配置。由2个参数构成,时间和改动的键的个数。

快照过程:

使用fork函数复制一份当前进程(父进程)的副本(子进程),然后父进程继续处理任务,子进程则执行写入磁盘操作。写入完成后再用临时文件替旧的RDB文件。

AOF:

是将redis的每一条命令进行记录,并保存到磁盘的AOF文件中,重启后会执行该文件进行数据恢复,需要手动开启。

优化:aof会记录每一条命令,包括一条数据的多次操作,这样造成了冗余。可使用BGREWRITEAOF技术来进行重写,去除数据的中间执行过程,保留最终数据命令即可。重写的策略是当aof文件的大小超过上一次大小的某个比例时就会进行重写。

问题:文件是先写入缓存的,而缓存读取到硬盘需要时间,假设在这个时间数据丢失那也会导致数据的丢失。所以即使每秒做文件同步也可能导致数据丢失。

2.Spring注解开发的配置

此处会让你说出几个常用注解,说几个就行。有时还会问你注解底层怎么实现就说不太了解。在xml配置文件中开启注解功能

注解:

@Component(value="名称") 利用构造方法创建对象

@Scope(value="singleton/prototype") 单例和多例

@Lazy(value=true/false)延迟创建问题

@PostConstruct 指定方法为初始化方法

@PreDestory 指定方法为销毁方法

@Autowired 注入引用类型,只能按照类型进行匹配

@Resource 注入引用类型,如果有name属性值,则按照bean的名称进行匹配;如果没有name属性值,则按照类型进行类型匹配

3.数据库优化

此处重点是数据库的索引问题,索引可大大提高查询效率,但是大数据量时也会影响效率。此时他还会问你当数据量很大时索引不行了该怎么处理,就回答读写分离,分库分表。提前对这两块做下了解,看看京东淘宝的处理方式。

索引存储的值按索引列中的顺序排列。可以利用B-Tree索引进行全关键字、关键字范围和关键字前缀查询。

1.数据库优化

●sql级别的优化

sql语句的书写方式对效率也是有一定影响的。

1)使用>= 替代>

select * from emp where deptno>=10(效率高,因为depto直接定位到10,效率高)

select * from emp where deptno>9(先定位到9 ,然后还要排除9 ,效率低)

2)如果使用union或者union all了,此时如果不需要考虑去掉重复的数据,尽量不要使用

union ,因为union默认是去重复的,去重复过程,也会影响效率。

3)对group by子句的优化上面:尽量在group by前面将数据过滤掉。

select job,avg(sal) from emp where job='CLERK' group by job (效率高)

select job,avg(sal) from emp group by job having job='CLERK' (效率低)

4)使用视图:(数据量非常大的情况下)

经常被查询的列数据,并且这些数据不被经常的修改,删除。

●数据表建立索引

索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。

MySQL索引类型包括:

普通索引:这是最基本的索引,它没有任何限制。

唯一索引:它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

主键索引:它是一种特殊的唯一索引,不允许有空值。

组合索引:将多个字段建到一个索引里。有个“最左前缀”的结果。

建立索引的时机:

一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。在以通配符%和_开头作查询时,MySQL不会使用索引。

SELECT*FROM mytable WHERE username like'admin%'而下句就不会使用:

SELECT*FROM mytable WHEREt Name like'%admin'

缺点:

提高了查询速度,但降低了更新速度。因为更新时要额外保存索引文件。

索引文件在大数据量时会膨胀很快。

所以如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

使用索引的技巧和注意事项:

1)索引不会包含有NULL值的列

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

2)使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

3)索引列排序

MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by 中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

4)like语句操作

一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like“%aaa%”不会使用索引而like“aaa%”可以使用索引。

5)不要在列上进行运算

select*from users where YEAR(adddate)<2007;将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成

select*from users where adddate<‘2007-01-01’;

6)不使用NOT IN和<>操作

淘宝分库分表机制:

淘宝根据订单号做拆分的,下单有两个维度,买家和卖家。

淘宝将订单表拆分到16个mysql库中,而在每个库中又将订单表拆分为64份,相当于将一张表拆分为1024份,事务进行了分散,很大程度上提高了并发的事务处理能力。

因此买家和卖家怎么找到对应的表呢?

对于16台服务器,每台服务器64张表只需要2位买家和卖家id的后两位数字就可以准确定位到具体的库和表。订单号中同时存在买家id的最后两位和卖家id的最后两位。分别在订单号的倒数第3位,4位和最后两位数。

4.RabbitMq 消息队列

此处要点是消费者没收到消息该怎么处理。

应用进程之间的通信方法

开发语言:Erlang – 面向并发的编程语言。

AMQP是消息队列的一个协议。

六种模式,只用五种

1、简单队列

2、Work模式:两个消费者,能者多劳

3、订阅模式

1、1个生产者,多个消费者

2、每一个消费者都有自己的一个队列

3、生产者没有将消息直接发送到队列,而是发送到了交换机

4、每个队列都要绑定到交换机

5、生产者发送的消息,经过交换机,到达队列,实现,一个消息被多个消费者获取的目的注意:消息发送到没有队列绑定的交换机时,消息将丢失,因为,交换机没有存储消息的能力,消息只能存在在队列中。

4、路由模式

生产者为消息指定类型,路由绑定不同的队列,队列指定接收的类型,只有类型匹配队列才接收。

模式1:自动确认

只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成

功消费。

模式2:手动确认

消费者从队列中获取消息后,服务器会将该消息标记为不可用状态,等待消费者的反馈,如果消费者一直没有反馈,那么该消息将一直处于不可用状态。

5.Spring的IOC和AOP的底层实现

IOC底层:工厂设计模式+XML技术+反射配置

AOP底层:动态代理

6.SSH中单例多例问题

三层结构各用的是单例还是多例,为什么,action层是单例还是多例,什么时候用多例。

单例多例主要看该层有没有定义成员变量,定义了成员变量的话由于存在多线程的共同调用相同变量所以要设置为多例。

scope属性:bean的生命周期

singleton: 单例(默认值)(在初始化配置文件的时候创建的对象,不是getBean())prototype: 多例(在getBean()的时候创建对象)

分层开发的时候:

dao对象:单例

biz对象:单例

action对象:必须多例的(属性或模型驱动有数据共享,所以必须多例)

7.单例的书写及各种模式的区别

面试官让我手写出一种单例模式并解释各种模式的区别,此处最好写出双重校验锁模式。

象的唯一性。

懒汉式:只在使用的时候创建对象,多线程下不能保证每次使用的对象唯一。

8.SpringBuild和springBuffer的区别

联系:两者都是字符串缓冲区类,作用与功能相似,内部的方法也都相同.但使用场景不同.

区别:

StringBuffer是线程安全的,但对于多线程效率低下(因为内部用了synchronize关键字保证线程安全,这样必然牺牲了执行效率)

StringBuilder安全性稍差,但对于多线程效率稍高

9.Mybatis中${}和#{}的区别

此处要点是注意哪种能防止sql注入,为什么能防止sql注入。

10.线程池问题

问你用的线程池引用的哪个包。

和线程池有关的几个概念:

最大容量:一个线程池中最多可以保存的线程数量;

最小容量:一个线程池中,最少保存的线程数量;

最大存活时间:一个线程最多可以保持空闲的时间;如果超出这个时间,一般这个线程就会被销毁;

线程的一些面试问题要多了解。

11.L inux怎么查看文件内容的前10行,怎么查看进程

Linux你肯定不能说不知道,说了解一点,然后他会问你一些常用指令,所以要记住一些常用的指令。有的答不出来就说平时用的不多,而且平时不会就会上网查。

1、Netstat –an | grep 80 查看端口信息

2、Vim中:/内容直接搜索内容

3、Ps –ef | grep redis 查看服务端口进程

4、service network restart重启网络服务

5、tail -200f catalina.log 动态显示日志最后200行

6、head -n 10 catalina.log 查看前10行命令

7、tar -zcvf abc.tar.gz * 压缩当前目录下所有文件,压缩后文件名为

abc.tar.gz

tar -zxvf abc.tar.gz -C /usr/local/xixi/ 解压到指定目录中记得指定目录前面加–C

8、查找文件

查找的是脚本文件(执行文件)which

查找的是二进制的文件(执行文件)whereis -b

查找特定文件 whereis (利用数据库来查找)

12、eclipse快捷键

Alt + Shift + M任意选中一块代码,自动转换为方法,自动添加参数返回类型。

ctrl+shift+x 转为大写ctrl+shift+y 转为小写

13、hashmap和hashtable的区别

|----:HashMap:是开发中使用最多的一个map集合类;在它的底层使用哈希表保存数据(数据是无序的);它的键和值允许使用null;是线程不安全的;

|---:LinkedHashMap:是HashMap的子类,主要操作和HashMap一样;不同的是,在底层使用哈希表和链表保存数据,哈希表负责保存数据和维护数据的唯一性,链表负责记录数据添加的顺序;所以它和HashMap不同之处是,它的数据是有序的(添加和迭代的顺序一样);实际上,在HashSet底层就是使用的HashMap实现的;LinkedHashSet底层使用的是

LinkedHashMap实现;

|----:HashTable:出现的比较早,在JDK1.1版本就出现;它的主要操作和HashMap一样,不同之处在于,HashTable是线程安全的,效率比较低;它不允许使用null做键或值;在实际开发中现在被HashMap取代;

|---:Properties:主要保存Key-Value的集合,在开发中主要用来操作配置文件(文件中的配置信息都是键值对的形式)到IO流在学;

|----:TreeMap:底层使用二叉树实现,它保存的数据,在保存的时候键都是有序的;

此处还问了一个课堂没讲过的实现类可取代hashTable,它是ConcurrentHashMap,这个自己可做下了解。

ConcurrentHashMap与HashTable都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap 引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。简而言之,在迭代的过程中,ConcurrentHashMap 仅仅锁定map的某个部分,而Hashtable则会锁定整个map。

HashTable虽然性能上不如ConcurrentHashMap,但并不能完全被取代,两者的迭代器的一致性不同的,HashTable的迭代器是强一致性的,而ConcurrentHashMap是弱一致的。ConcurrentHashMap的get,clear,iterator 都是弱一致性的。

14、ArrayList怎么去重

巧妙利用hashSet不能存储重复元素的原理,把arrayList放到hashSet中再放回arrayList即可。

15、说说垃圾处理机制

大致了解,能说出一点即可

现在使用的Java虚拟机并不是只是使用一种内存回收机制,而是分代收集的算法。就是将内存根据对象存活的周期划分为几块。一般是把堆分为新生代、和老年代。短命对象存放在新生代中,长命对象放在老年代中。

对于不同的代,采用不同的收集算法:

新生代:由于存活的对象相对比较少,因此可以采用复制算法该算法效率比较快。

老年代:由于存活的对象比较多哈,可以采用标记-清除算法或是标记-整理算法

16、是否写过mysql的存储过程

mysql 执行语句是要先编译,然后再执行的。这样如果查询并发大的时候。会浪费很多资源和时间。造成mysql进程占用资源过多,症状就是慢。

但存储过程可以把一些特别的语句封装成一个方法,再编译好成一个可以执行的方法,对外只要接收参数就可以了。这样就不用再编译。执行就快了

什么时候会用到?你觉得你数据库因为同时出现太多读写操作而变得慢,那么就要用了。

17、JDBC底层步骤

18、Jvm机制及类的加载过程

栈区,堆区,方法区

类加载顺序:

类加载时先在方法区中为类开辟一个空间,非静态成员加载到非静态区域,静态成员加载到静态区域,为静态成员变量分配空间并赋默认值,然后执行静态代码块或显示赋值,赋值完成类加载结束。

对象创建过程:

遇到new关键字在堆中开辟一个空间,为非静态成员变量分配空间并赋默认值,执行构造函数先看有没有this语句调用其他构造函数,没有就执行隐式三步:1、执行父类构造函数,2、为非静态成员变量显示赋值,3、执行构造代码块。结束后执行构造函数体中的内容,执行完对象创建结束。

19、抽象类和接口的区别

共同点:都可以有抽象函数,都不能被实例化。

区别:

声明上:抽象类,class;接口interface

书写成员:抽象类,书写任何类成员;接口:只能书写成员变量和函数

有无构造函数:抽象类,有构造函数;接口:没有构造函数。

作用上:抽象类是描述的继承体系中的共同的特征和行为,如果行为不确定,就定义为抽象函数;接口描述的是不属于继承体系的共同的功能;接口可以用来定义规则。

继承关系上:抽象类:单一继承,多重继承;接口:多继承,多实现。

项目方面

我简历上写得我在项目中承担的模块是订单模块和购物车模块,所以自己的模块一定要搞清楚。搞清楚相关技术在你承担模块中的运用。

1.购物车模块中未登录状态下把商品放入redis中,那这个

key怎么设置?

此处要搞清楚怎么通过cookie来找到对应的redis中的对应数据。要知道一个用户不同时间在未登录状态下添加商品怎么和之前已经添加的进行联系。

用户未登录,购物车商品保存在cookie,由于cookie对存储的数据大小有限制

解决方案: 将数据保存到redis 快在cookie中保存一个key,这个key同时关联redis的key

每次取值都经历了转换成List 然后遍历,找到对应的商品这个过程

redis的key field(商品的id) value(购物车商品的值)

用户的cookie_key = 12121012010 redis_key = REDIS_12121012010

2.Httpclient在项目中的运用。

用于系统之间接口的调用。

3.Redis和rabbitMq在项目中的体现。

redis用于缓存,减少与数据库的不必要连接次数。

RabbitMq用于修改数据库时及时通知redis更新里面的数据。

4.项目中定时模块QuartZ的运用。

订单失效时就运用到了定时任务,指定时间未付款自动失效。

Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。

1、Job

表示一个任务(工作),要执行的具体内容。

2、JobDetail

JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。

3、Trigger代表一个调度参数的配置,什么时候去调。

4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger 与JobDetail组合,就可以被Scheduler容器调度了。

5.订单的支付模块怎么处理?

此时直接说我不负责支付模块,我们有负责这个模块的,我们只要调用接口就行。

6.购物商城涉及到多线程吗?

肯定设计到多线程的,此时就是想问并发怎么处理。

java经典面试题汇总

Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域当前类同一package 子孙类其他package public √√√√ protected √√√ × friendly √√ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JA V A的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注:静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的 7、String s = new String("xyz");创建了几个String Object 答:两个,一个字符对象,一个字符对象引用对象 8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少 答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor 9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错 答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译) 10、Java有没有goto 答:java中的保留字,现在没有在java中使用 11、数组有没有length()这个方法? String有没有length()这个方法 答:数组没有length()这个方法,有length的属性。String有有length()这个方法 12、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型

java高级工程师_面试题和答案

一:选择题 1. 关于以下程序代码的说明正确的是( D ) 1.class HasStatic{ 2. private static int x=100; 3. public static void main(String args[ ]){ 4. HasStatic hs1=new HasStatic( ); 5. hs1.x++; 6. HasStatic hs2=new HasStatic( ); 7. hs2.x++; 8. hs1=new HasStatic( ); 9. hs1.x++; 10. HasStatic.x- -; 11. System.out.println(“x=”+x); 12. } 13. } A、 5行不能通过编译,因为引用了私有静态变量 B、 10行不能通过编译,因为x是私有静态变量 C、程序通过编译,输出结果为:x=103 D、程序通过编译,输出结果为:x=102 2. 下列关于for循环和while循环的说法中哪个是正确的?( B ) A.while循环能实现的操作,for循环也都能实现 B.while循环判断条件一般是程序结果,for循环判断条件一般是非程序结果C.两种循环任何时候都可替换 D.两种循环结构中都必须有循环体,循环体不能为空 3. 以下选项中循环结构合法的是( C ) A、while (int i<7) { i++; System.out.println(“i is “+i); } B、 int j=3; while(j) { System.out.println(“ j is “+j); } C、int j=0; for(int k=0; j + k !=10; j++,k++) { System.out.println(“ j is “+ j + “k is”+ k); } D、 int j=0; do{ System.out.println( “j is “+j++); if (j = = 3) {continue loop;} }while (j<10); 4. 给出下面代码段, 哪行将引起一个编译时错误?( D )

常见的Java上机面试题

常见的Java上机面试题 在程序员面试中,主要的考试形式分为笔试和上机编程考试两部分。笔试主要考查面试者的基础是否牢固;上机考试主要考查面试者的实际开发能力和技术技巧。 上机编程考试,要求面试者能够根据题目的要求,使用一种编程工具,编写全部代码并调试运行。这主要是考查面试者代码书写和编程的熟练程度。值得注意的是,这类面试题要求能够正确运行,往往要求面试者使用比较原始的JDK编译方式也就是使用DOS命令提示符,而不是提供Eclipse或者JBuilder等快速开发环境。本章将经常出现的上机编程题进行分类,希望能够给读者带来帮助和启示。 17.1 Java基础编程试题(1) 在上机编程类的面试题中,大部分涉及基础编程,例如算法、语法、常用的类等知识点。 面试题1 怎样截取字符串 考题题干 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF"6,应该输出"我ABC",而不是"我ABC+汉的半个"。 试题分析 本面试题容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这个,就很容易完成本题了。 参考答案 具体代码实现如下: 1.package core_java; 2.import java.util.Scanner; 3.public class InterceptionStr { 4.static String ss; //要进行截取操作的字符串 5.static int n; //截取的字符串的字节数 6.public static void main(String[] args) { 7. System.out.println("请输入字符串:"); 8. Scanner scStr = new Scanner(System.in); //从键盘获取字符串 9. ss = scStr.next(); // 将Scanner对象中的内容以字符串的形式取出来 10. System.out.println("请输入字节数:"); 11. Scanner scByte = new Scanner(System.in); //从键盘获取字符串 12. n = scByte.nextInt(); //将Scanner对象中的内容以数值的形式取出来

Java软件开发工程师笔试题(答案)

Java工程师笔试题 一、填空题(本大题10小题,每空1分,共20分)。 1.Java语言的三大特性即是: 继承、封装、多态。 2.在Java中,char 型采用____unicode_______编码方案,这样,无论是中文字符还是英文字符,都是占用__2___个字节的内存空间。 3. 形式参数指的是方法被__定义____ 时的参数行,实际参数是方法被__调用__ _ 时所传递进去的变量或值。 4.JSP内置对象中,application对象是代表应用程序上下文,它允许JSP页面与包括在同一应用程序中的任何Web组件共享信息,而session 对象则是每个客户专用的。 5.如果想把一个对象写入一个流,那么这个类就必须实现Seralizable 接口。 6.程序中实现多线程的方法有两种:继承Thread类和实现___Runable _ 接口。 7.多线程中,可以通过调用相应的setPriority() 方法来修改一个线程的相对优先级。 8.面向对象编程的五大设计原则,分别是单一职责、开放封闭、 里氏替换、依赖倒置、接口分离 9.通过Ajax,客户端获取的数据主要有两种类型:文本型和xml 10.Socket通常也称为套接字,用于描述__ ip 和_ _接口 二、选择题(本大题20 小题,每小题2分.共40分)。 1.在JA V A中,如果父类中某些方法不包含任何逻辑,并且需要由子类重写.应该使用( )关键字来声明父类的这些方法: A) final B) static C) abstract D) void 2.在JA V A中,已定义两个接口B和C,要定义一个实现这两个接口的类,以下语句正确的是()。 A) interface A extend B,C B) interface A implements B,C C) class A implements B,C D) class A implements B, implements C

JAVA框架面试题汇总

1.SpringMVC Framework的理解: 1、它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件。并且和Spring提供的其他基础结构紧密集成 2、不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的) 3、可以任意使用各种视图技术,而不仅仅局限于JSP 4、支持各种请求资源的映射策略 5、它应是易于扩展的 2.简单的谈一下SpringMVC的工作流程? 流程? 1、用户发送请求至前端控制器DispatcherServlet? 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。? 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。? 4、DispatcherServlet调用HandlerAdapter处理器适配器? 5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。? 6、Controller执行完成返回ModelAndView? 7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet? 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器? 9、ViewReslover解析后返回具体View? 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。? 11、DispatcherServlet响应用户 3.如何解决POST请求中文乱码问题,GET的又如何处理呢? 在web.xml中加入: . .CharacterEncodingFilter . .???? .????????encoding .?????? utf-8

2019最新Java面试题,常见面试题及答案汇总

ava最新常见面试题+ 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。 适宜阅读人群 需要面试的初/中/高级java 程序员 想要查漏补缺的人 想要不断完善和扩充自己java 技术栈的人 java 面试官 具体面试题 下面一起来看208 道面试题,具体的内容。 一、Java 基础 1.JDK 和JRE 有什么区别? 2.== 和equals 的区别是什么? 3.两个对象的hashCode()相同,则equals()也一定为true,对吗? 4.final 在java 中有什么作用? 5.java 中的Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用final 修饰吗?

14.接口和抽象类有什么区别? 15.java 中IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和Hashtable 有什么区别? 22.如何决定使用HashMap 还是TreeMap? 23.说一下HashMap 的实现原理? 24.说一下HashSet 的实现原理? 25.ArrayList 和LinkedList 的区别是什么? 26.如何实现数组和List 之间的转换? 27.ArrayList 和Vector 的区别是什么? 28.Array 和ArrayList 有何区别? 29.在Queue 中poll()和remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和ListIterator 有什么区别? 34.怎么确保一个集合不能被修改?

百一测评——Java经典面试题 带答案

职业技能题库&在线云笔试平台https://www.wendangku.net/doc/cf16102168.html, 试卷名称:Java经典面试题带答案 试卷描述:java笔试题目、招聘笔试、微信考试、在线考试 试卷链接:https://www.wendangku.net/doc/cf16102168.html,/store/open/paperInfo/41651 试卷限时:50分 一.单项选择题 每题分值:2.5分 是否题目乱序:是 是否选项乱序:是 是否可回溯:是 难度:中 1.[单选]Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.[单选]下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code C.Java程序经编译后会产生DLL D.以上都不正确

职业技能题库&在线云笔试平台https://www.wendangku.net/doc/cf16102168.html, 答案:B 3.[单选]下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名 C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 4.[单选]提供Java存取数据库能力的包是() A.java.sql B.java.awt C.https://www.wendangku.net/doc/cf16102168.html,ng D.java.swing 答案:A 5.[单选]下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.[单选]执行如下程序代码 a=0;c=0;

职业技能题库&在线云笔试平台https://www.wendangku.net/doc/cf16102168.html, do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环 答案:C 7.[单选]下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.[单选]下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象

Java工程师面试题(含答案)

1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型吗 基本数据类型包括byte、int、char、long、float、double、boolean和short。 类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和Integer 有什么区别 Java提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int 提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double Double 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。 7、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String 类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 8、运行时异常与一般异常有何异同 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求

Java软件中年级工程师笔试题复杂逻辑

J2E E部分 1、运算符优先级问题,下面代码的结果是多少?(笔试) package test; public class Test { public static void main(String[] args) { int k = 0; int ret = ++k + k++ + ++k + k; // ret的值为多少 } } 2、运算符问题,下面代码分别输出什么?(笔试) package test; public class Test { public static void main(String[] args) { int i1 = 10, i2 = 10; } } 3、下面代码的结果是什么?还是抛出异常?(笔试) package test; public class Test { public void myMethod(String str) { } public void myMethod(Object obj) { } public static void main(String[] args) { Test t = new Test(); t.myMethod(null); } } 4、假设今天是9月8日,下面代码输出什么?(笔试) package test; public class Test { public static void main(String[] args) { Date date = new Date(); } } 5、下面代码的输出结果是什么? package test; public class Test {

public static void main(String[] args) { double val = 11.5; } } 6、下面代码的结果是什么? package test; public class Test extends Base { public static void main(String[] args) { Base b = new Test(); b.method(); Test t = new Test(); t.method(); } @Override public void method() { } } class Base { public void method() throws InterruptedException { } } 7、以下代码的结果是什么? package test; public class Test extends Base { public static void main(String[] args) { new Test().method(); } public void method() { } } class Base { } 8、true or false? package test; public class Test { public static void main(String[] args) { String str1 = new String("abc"); String str2 = new String("abc"); StringBuffer sb1 = new StringBuffer("abc"); StringBuffer sb2 = new StringBuffer("abc"); } } 9、输出的结果是什么?

Java经典面试题大全_带答案

Java经典面试题带答案一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code(字节码) C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行(构造器) D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A.Java.sql /sql/数据库还有Oracle 也是一种数据库 B.java.awt C.https://www.wendangku.net/doc/cf16102168.html,ng D.java.swing 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环

答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 答案:D 二、多项选择题 1.Java程序的种类有() A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有() A.环境变量可在编译sourcecode时指定 B.在编译程序时,所能指定的环境变量不包括class path C.javac一次可同时编译数个Java源文件 D.javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD 3.下列标识符不合法的有() A.new B.$Usdollars C.1234 D.car.taxi 答案:ACD 4.下列说法错误的有() A.数组是一种对象 B.数组属于一种原生类 C.intnumber=[]={31,23,33,43,35,63} D.数组的大小可以任意改变 答案:BCD 5.不能用来修饰interface的有()

java软件工程师面试题集

java软件工程师面试题集 EJB方面 1、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? 答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。JSP,Servlet,EJB,JNDI,JDBC,JMS..... 2、EJB与JAVA BEAN的区别? 答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java 类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB 必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 3、EJB的基本架构 答:一个EJB包括三个部分: Remote Interface 接口的代码 package Beans; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Add extends EJBObject { //some method declare } Home Interface 接口的代码

Java软件中级工程师笔试题-复杂逻辑

J2EE部分 1、运算符优先级问题,下面代码的结果是多少?(笔试)packagetest; publicclassTest{ publicstaticvoidmain(String[]args){ intk=0; intret=++k+k+++++k+k; //ret的值为多少 } } 2、运算符问题,下面代码分别输出什么?(笔试)packagetest; publicclassTest{ publicstaticvoidmain(String[]args){ inti1=10,i2=10; +i2="+i1+i2); -i2="+i1-i2); *i2="+i1*i2); /i2="+i1/i2); } } 3、下面代码的结果是什么?还是抛出异常?(笔试)packagetest; publicclassTest{ publicvoidmyMethod(Stringstr){ } publicvoidmyMethod(Objectobj){ } publicstaticvoidmain(String[]args){ Testt=newTest(); t.myMethod(null); } } 4、假设今天是9月8日,下面代码输出什么?(笔试)packagetest; import publicclassTest{ publicstaticvoidmain(String[]args){ Datedate=newDate(); +""+date.getDate()); } }

5、下面代码的输出结果是什么? packagetest; publicclassTest{ publicstaticvoidmain(String[]args){ doubleval=11.5; } } 6、下面代码的结果是什么? packagetest; publicclassTestextendsBase{ publicstaticvoidmain(String[]args){ Baseb=newTest(); b.method(); Testt=newTest(); t.method(); } @Override publicvoidmethod(){ } } classBase{ publicvoidmethod()throwsInterruptedException{ } } 7、以下代码的结果是什么? packagetest; publicclassTestextendsBase{ publicstaticvoidmain(String[]args){ newTest().method(); } publicvoidmethod(){ getName()); } } classBase{ } 8、trueorfalse? packagetest; publicclassTest{ publicstaticvoidmain(String[]args){ Stringstr1=newString("abc"); Stringstr2=newString("abc"); StringBuffersb1=newStringBuffer("abc"); StringBuffersb2=newStringBuffer("abc"); }

Java经典面试编程设计题(含答案)

1、程序实现目标:输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果。程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符。 1. package com.iotex; 2. public class StringParseASCII { 3. 4. public static void main(String[] args) { 5. System.out.print(stringParseASCII("abx")); 6. } 7. 8. public static String stringParseASCII(String str){ 9. StringBuffer result = new StringBuffer(); 10. char tmp; 11. for(int i = 0;i 'z') { 14. result.append('a'); 15. }else { 16. result.append(tmp); 17. } 18. } 19. 20. return result.toString(); 21. } 22. 23. } 1. package com.iotex; 2. 3. public class StringParseASCII { 4. 5. public static void main(String[] args) { 6. System.out.print(stringParseASCII("abx")); 7. } 8. 9. public static String stringParseASCII(String str){ 10. StringBuffer result = new StringBuffer(); 11. char tmp; 12. for(int i = 0;i 'z') { 15. result.append('a'); 16. }else { 17. result.append(tmp);

Java工程师面试题(三大框架)

Java工程师(程序员)面试题 Struts,Spring,Hibernate三大框架的面试 1.Hibernate工作原理及为什么要用? 原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory 3.打开Session 4.创建事务Transation 5.持久化操作6.提交事务7.关闭Session 8.关闭SesstionFactory 为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。 2.Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象b)集合(Collection) 2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。 3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many 4.Struts1流程: 1、客户端浏览器发出HTTP请求。 2、根据web.xml配置,该请求被ActionServlet接收。 3、根据struts-config.xml配置,ActionServlet先将请求中的参数填充到ActionForm中,然后ActionServlet再将请求发送到Action 进行处理。 4、是否验证,需要验证则调用ActionForm 的validate方法,验证失败则跳转到input,成功则继续。 5、Action从ActionForm获得数据,调用javabean 中的业务方法处理数据。 6、Action返回ActionForward对象,跳转到相应JSP 页面或Action。 7、返回HTTP响应到客户端浏览器。 MVC设计模式:modal:“模型”也称业务逻辑,是正真完成任务的代码,相当与JavaBeanview:视图,其实就是显示界面,相当于JSPcontroller:控制器,他控制模型和视图的交互过程,相当于servletstruts1是基于MVC设计模式hibernate是基于ORM对象关系映射 5.struts是什么? struts1是基于JSP和servlet的一个开源的Web应用框架,使用的是MVC的设计模式struts2是基于webwork技术的框架,是sun和webwork公司联手开发的一个功能非常齐全的框架,struts2和struts1没有任何关系,是一个全新的框架 6.spring是什么? spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注

java面试题大全(整理版)

2018年(整理版) 1、面向对象的特征有哪些方面? - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承的类叫父类(超类、基类)、得到继承的类叫子类(派生类)。 - 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。 - 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中的方法);2). 对象造型(用父类型引用引用子类型对象,

这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为) 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。 4、float f=3.4;是否正确? 答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。

java编程常见面试题目

第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和Inner Class的不同, 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。 第六,Collection 和Collections的区别。 第七,什么时候用assert。 第八,GC是什么? 为什么要有GC? (基础)。 第九,String s = new String("xyz");创建了几个String Object? 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 第十二,sleep() 和wait() 有什么区别? 搞线程的最爱 第十三,Java有没有goto? 第十四,数组有没有length()这个方法? String有没有length()这个方法?

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 第十七,给我一个你最常见到的runtime exception。 第十八,error和exception有什么区别? 第十九,List, Set, Map是否继承自Collection接口? 第二十,abstract class和interface有什么区别? 第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 第二十三,启动一个线程是用run()还是start()? 第二十四,构造器Constructor是否可被override? 第二十五,是否可以继承String类? 第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

相关文档
相关文档 最新文档