您的位置 首页 java

最新JAVA面试宝典,面临实习的我要抓紧背啦

java面试宝典

任职 要求 :

java

精通java,熟悉socket和多线程开发,熟练掌握JSP、Servlet JDBC等相关技术,熟悉常用的数据模式

熟悉JVM性能调优(对JVM有一定的了解)

熟悉面向对象的系统分析、设计与编程思想了解设计模式、重构以及敏捷开发的基础知识

有敏捷开发和测试自动化经验者优先

框架

熟练使用主流来源框架,如Spring、struts2、mybatis、hibeenate,熟悉ssh、ssm框架集成

(使用过一种RPC协议、缓存技术)

能够熟练使用主流框架技术,包含:Spring Boot、Spring MVC

能够熟练使用主流框架技术,包含:Spring、Axon(CQRS)

熟练使用Springmvc+FreeMarker进行开发

数据库

熟悉关系型数据库,有redis等开源的NOSQL相关知识

能够熟练使用主流存储技术,包含:MySQL、MongoDB、Couchbase、Cassandra、Redis、FastDFS

熟练掌握MySql、Oracle等数据库,sql语言,索引、过程、触发器的使用,掌握pl/sql编程

熟悉mysql使用,有一定的sql优化,维护经验;熟练掌握SQL、存储过程、触发器、视图的编写

熟悉至少一种NoSQL数据库,如MongoDB、Memcached、Redis、HBase等

至少掌握Oracle、DB2、Sql Server三种数据库中的两种

了解Oracle,Sybase,DB2等数据库系统之一

熟练使用MsSql、MySql、Oracle中的一种数据库

掌握postgreSQL数据库的使用和开发,有相关数据库经验也可

熟练掌握常用sql,使用过sybase,sqlserver、mysql等主流数据中一种或几种

熟悉数据库建模,熟练使用Oracle、DB2、mysql数据库并进行调优熟悉设计模式和UML

数据库 高并发

有数据库优化和设计经验(对软件系统的高性能、高并发、高可用等有了解和实践经验)

(熟悉Linux/Nginx/haproxy负载均衡、反向代理等配置)

熟悉多线程及高性能的设计与编码及性能调优

J query

熟练使用HTML/XML、HTML5、CSS3、jquery、javascript、AJAX 、easyui、bootstrap等前端web应用程序开发技术

(掌握Ajax技术,熟悉jquery或Prototype应用)

(了解前端dhtml技术,有一定js编程经验)

熟练使用js框架(extjs mootools)

熟悉Kendo UI开发者优先考虑。

服务器

熟练使用Aapache、tomcat、nginx等常见应用服务器,具有相关的部署和配置经验

(熟悉tomcat/Jetty/Jboss等主流服务器)

熟悉Tomcat、JBoss的配置和管理

(熟悉Tomcat等应用服务器,同时对在高并发处理情况下的负载调优有相关经验者优先考虑,具有分布式系统开发等方面经验者优先)

了解Tomcat,Jboss,Weblogic,Websphere等应用服务器中的两种以上

精通Tomcat、Apache、Nginx等多种开源服务器,熟练掌握至少2种应用服务器,如WebLogic、Tomcat、Resin、JBoss、WebSphere等;

至少熟练使用weblogic、websphere、resin、tomcat、Jboss五种中间件的三种

熟练掌握和使用apache、varnish、nginx、jetty、tomcat等应用服务

熟悉Java开发,对Weblogic、WebSphere App Server及WebSphere Portal Server中的至少一种以上

精通WebSphere、WebLogic、JBoss、Tomcat其中一到两种应用服务器,并具备服务器调优能力

工具

熟练掌握svn、git 、Ecplise、Maven等工具

熟练使用nodejs

能够熟练使用Eclipse、PowerDesigner、SVN或CVS等工具

熟练使用(My)Eclipse、NetBeans等开发工具并能够使PowerDesinger、Rational Rose进行设计工作

分布式 工具

三年以上互联网产品开发经验,有海量数据存储、大用户量项目经验,有dubbo、thrift、zookeeper等分布式工具使用经验

建模 工具

熟悉UML建模工具,能进行分析和设计

消息 队列

熟练掌握和应用 acticemq、kafka、rocketmq等消息队列

Li nux

基本Linux的使用(熟练在Linux下的开发与运行环境,有长期Linux使用经验者优先考虑)

熟悉OS原理,能使用linux/unix常用基本命令

结构 算法

了解常用的数据结构和算法

架构

熟悉Dubbo,Zookeeper分布式架构,mysql集群,Lucene,solr全文检索

了解分布式架构、缓存、异步、消息系统等思想

大数据

熟悉hadoop生态系统,具备Hadoop/Storm等分布式计算平台的开发、运维经验者优先

了解Hadoop、Hive、HBase、Storm等相关技术基础,并能围绕展开开发工作

检索(电商)

了解Lucene全文检索机制,能参与到全文检索的开发

阿里云

有阿里云使用经验

能够熟练使用阿里云服务,包含:MQS、 SLS、ODPS、OAS等。

熟悉工作流、Auto、MQ

熟悉IM,websocket,XMPP,MQTT等即时通讯方面技术优先考虑

能够熟练使用主流队列技术,包含:ActiveMQ、RabbitMQ、kafka、Disruptor

能够熟练使用主流RPC技术,包含:Thrift、Dubbo

能够熟练使用主流通信技术,包含:Mina、Netty、Protobuf

资深java工程师

精通C++或java;能够在 Linux 系统上进行开发部署工作

精通 TCP/UDP 等常见协议,并具有丰富的网络服务器开发经验

熟悉代理服务器、负载均衡常用网络组件

熟悉常见的服务器开发模式,并精通其中的一种或多种

熟悉缓存/消息队列等常用中间件技术,并且熟悉常用的开源框架

能够带领团队设计、开发 10w 行以上代码的核心服务器

熟悉长期运行、高并发的 C++ 或java服务器的开发、部署、测试、排错等工作

熟悉至少一种网络协议栈,能够快速理解和开发新的协议栈

中等规模软件项目的规划和管理能力

自我 评价 :

有较好的沟通交流能力与抗压能力

学习能力强,拥有优秀的逻辑思维能力

性格开朗、善于沟通、有良好的学习能力、有良好的团队协作能力、较强的抗压能力、有良好的编码规范意识、勇于接受挑战、善于自我激励

职业规划

项目流程

*************JavaOOP******************

☆1.谈谈你对oop的理解,oop有哪些特性?各有什么特点?

Java的三大特征[中科软科技有限公司]

oop :面向对象编程,oop有继承,多态,封装,抽象

继承 : 子类可以拥有父类的属性以及方法,也可以拥有自己的属性以及方法。

多态 : 父类的方法,子类有不同的实现方式

封装 : 将现实生活中具体的事封装成一个类。

抽象 : 使用private修饰属性和方法,对外提供公有的get和set方法

2、什么是方法重载和方法重写,有什么异同?

方法重载:同一类中,同名不同参 !方法名相同,参数列表不相同(个数 顺序),和访问修饰符 返回值类型 异常无关

方法重写:子类重写父类,同名同参数 !方法名相同,参数列表相同,访问修饰符大于等于父类 返回值和父类相关(基本数据类型等于)

异常是父类的子类或子集

3、抽象类和接口有什么异同?( 面试)

抽象类 接口

抽象方法 0-多个 是

属性是静态 不一定 是

用途 给类继承 给类实现

构造方法 产生子类对象初始化父类属性 无

从语法角度上,接口是一种特殊的抽象类,但从设计角度理解而言是错误的

抽象类是父类的共同特征,是”中间产品”,子类才是”最终产品”…是子类是”is a”的关系,既在概念上本质是一样的

接口表示一种约束和一种能力,是”has a can do”的关系.接口定义”做什么”,实现类负责”怎么做”,体现是功能和实现相分离的原则

4、异常有哪几种类型,怎么自定义异常?

RuntimeException Error CheckedException

继承Exception或子类

定义有参构造方法

在有异常的地方,throw异常

5、什么是多态?使用多态的两个前提条件?有哪两种表现形式和应用场合?

同一事物,有不同的表现形态…父类的方法,子类有不同的实现方式

前提: 继承 重写

表现形式:重载 重写

应用场合:方法形参 方法返回类型

6、什么是内部类?内部类有哪几种?有什么优缺点?

类中定义类

成员内部类 方法内部类 静态嵌套类 匿名内部类

优点:a.减少参数传递

b.封装(隐藏内部实现方法和细节)

c.减少类文件

缺点:a.增加语法的难度

b.使结构复杂化

7、什么是构造方法,有什么作用,如何调用本类和父类的构造方法?

和类同名,无返回类型

初始化父类属性

this(参数)

super(参数)

☆8、final、finally、finalize有什么异同? [上海优觉]

final 最终的 修饰属性表示常量 修改方法表示不能被重写 修饰类不能被子类继承

finally 异常中总会执行,除了System.exit(0)

finalize 是Object类的一个方法,在垃圾收集器调用垃圾回收的此方法,会覆盖该方法提供的回收对象的其他资源

9、类和类之间有哪几种关系?面向对象设计原则有哪些?

类和类之间的关系:继承、实现、依赖、关联、聚合、组合

设计原则:

1.依赖倒置原则(面向接口编程)

2.迪米特法则 (尽量减少类和类之间的依赖)

3.接口隔离原则(一个接口只一个规定)

4.聚合/组合原则(尽量使用聚合组合关系)

5.里氏替换原则(慎用继承)

6.开闭原则(对扩展开放 对修改关闭)

7.单一职能原则 (一个类只做一件事情)

10、String和StringBuffer、StringBuilder的区别?[中软 上海优觉]

同:都是final类

异:

①String类是不可变字符串,可以像基本数据类型一样直接赋值(直接存放常量池),

StringBuffer、StringBuilder是可变字符串,只能通过new产生对象

②StringBuilder是线程不安全的,用在字符串缓冲区被单个线程使用的时候,建议优先采用该类,因为在大多数实现中,它比

StringBuffer 要快。

11、如何区分运行时异常与检查异常,他们使用时有何区别?[中软]

RuntimeException及其所有子类都属于运行时异常,在程序中可以不用处理,直接由jvm处理,

检查异常必须在程序中处理。

12、static, abstract可以修饰什么,有什么作用?abstract可以和final共同修饰吗?

①static修饰变量、方法,在类加载的时候就会初始化,所有实例共享,可以用类名.属性、类名.方法名;

abstract修饰方法表示该方法没有具体实现,必须由其子类实现,修饰类表示该类为抽象类不能被实例化。

②他们不能共同修饰,因为abstract是代表抽象必须被实现,final代表终极的不能重写和继承。

13、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

值传递,因为他传递的是对象的地址值,在Java中只有值传递,没有引用传递。

14、java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

java类型的流:

按功能分:输入、输出流;

按内容分:字节、字符流;

按形式分:实体、装饰流

Reader Writer OutputStream InputStream

面试:现场编码,用递归算法查找文件[上海普元]

public static void show(File f){

if(f.isDirectory()){

File[] fs = f.listFiles();

for (File ff : fs) {

//递归调用

show(ff);

}

}

String type = f.isDirectory() ? “目录” : “文件”;

System.out.println(type+”:\t”+f.getName());

}

15、java的IO里面使用了哪些经典设计模式,举例说明?

适配器模式 InputStreamReader

装饰模式 FilterInputStream

16、什么是java序列化,如何实现java序列化?

序列化就是将内存中的对象保存到硬盘或传输到网络中

先将需要序列化的类实现Serializable接口,然后通过ObjectOutputStream或XmlEncoder类的writeObject()方法实现t

XML

17、DOM解析和SAX解析各有什么特点?(你在项目中用到了xml技术的哪些方面?如何实现的?)

DOM解析构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。

SAX是一个解析速度快并且占用内存少的xml解析器,是基于事件驱动来解析的,可以随时停止解析,不能载入整个文档到内存,不能写入xml

JDOM

DOM4J

xml的视图 1>.通过Java代码实现自定义view添加到显示布局中

2>.通过在布局文件中添加标签

文档定义形式 1>.dtd

2>.schema

数据存储(在做数据交换平台,将不同的数据的数据组成xml文件,然后将xml文件压缩打包加密,通过网络传送给接受这,接受解密与解压缩后同xml文件中还原相关的信息进行处理)

xml的作用

配置文件(将配置参数存储在xml中)

18、对反射的理解?[中软 德邦物流]

你怎么看待反射[上海福岚商贸有限公司]

A 可以使用反射动态的创建类型的实例,将类型绑定到现有对象、或从现有对象获取类型

B 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便在实现某个任务时可以用到反射

19、如何理解代理模式,静态代理和动态代理及装饰模式有什么区别?

代理模式是为被代理的类扩充新的功能,具有控制被代理类的访问等性质

静态代理每增加一个被代理类型必须新建一个代理类,会造成类爆炸;

通过动态代理解决这种问题,动态代理通过Proxy[‘pr?ks?]类动态的产生代理对象从而可以代理任意类。

代理模式具有控制被代理类的访问等性质,而装饰模式仅仅是单纯的扩充被装饰的类,为所装饰的对象增强功能。

所以区别仅仅在是否对被代理/被装饰的类进行了控制而已。

集合问题:

Java集合类图

Java集合框架图

①List Set Map是否 继承 Collection[笔试题]

List和set是,Map不是

List、Map、Set三个接口,存取元素时,各有什么特点

List 有序,不唯一

Set 无序,唯一

Map 保存key-value值,value可多值。

③说出ArrayList,Vector, LinkedList的存储性能和特性?[重点]

❶ArrayList和Vector都是使用数组方式存储数据,它们都允许直接按序号查询元素,但是插入元素要涉及数组元素移动等内存操作,

所以查询 数据快而插入删除慢[‘vekt?] Vector

❷Vector由于使用了synchronized方法,通常性能上较ArrayList差,

❸LinkedList使用双向链表实现存储,按序号查询数据需要前向或后向遍历,但是插入数据时只要记录前后项,所以插入删除较快。

☆④Collection 和 Collections的区别?(笔试 面试)

Collection 是集合类的顶级接口,子接口有Set 和List.

Collections是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

⑤Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?Java中是否有内存泄漏?

A.Set里的元素是不能重复的,用equals和hashCode方法来区分重复与否。添加元素时先判断hashCode然后再判断equals。

B.垃圾回收机制只能回收没有引用的对象,在set集合添加了元素后又将计算hash值的属性修改了将导致内存泄漏。单例对象在JVM的整个生命 周期中存在,如果单例对象持有外部对象的引用,那么外部对象将不能被jvm回收,所以不正确使用单例也能引起内存泄露。

Set:

a) HashSet

hashCod每一个对象都有自己的hashCode值.和值有关

如果不重写hashCode方法,不同对象hashCode值不同

b) LinkedHashSet

内存无序,输出和添加顺序一致,不能放重复值

c) TreeSet

排序,不能放重复值

必须实现排序规则(自然排序,客户排序)

1>自然排序

集合.add(对象),对象实现排序规则

对象实现java.lang.Comparable接口

2>.客户排序

集合要添加的对象没有源代码,用第三方类实现

java.util.Comparator接口

List:

ArrayList 动态数组(增删效率低,查找高,异步)

LinkedList 链表(增删效率高,查找低)

Vector 动态数组(线程同步,线程安全)

☆☆⑥HashTable和HashMap的区别?

都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的

HashMap 和treeMap的 区别?( 文思海辉 )

HashMap:底层是哈希表数据结构。线程不同步; Map中插入、删除和定位元素,效率高

TreeMap:底层是二叉树数据结构,线程不同步,可用于给Map集合中的键进行排序;查询效率高

Iterator 作用 (电话 面试 )

作用:遍历集合

方法:.hasNext() next() remove()

⑧集合 排序

Collection.sort()

多线程问题 :

①线程和进程的区别与联系: [久雅科技有限公司]

线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。

不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间

每个线程都拥有单独的栈内存用来存储本地数据

②sleep() 、yield() 和 wait() 有什么区别?

1.wait()方法是Object的方法,sleep()是Thread的方法

2.wait()方法必须写在synchronized里面

3.wait()方法在等待的时候会释放对象锁,sleep()睡过去也抱着对象锁不放!(重要)

4.yield()让当前正在执行的线程暂停,该方法不会阻塞线程,而是将线程转入可运行状态

③java中如何编写一个线程类,并启动他?

继承Java.lang.Thread类,并重写run() 方法,调用该对象的start()方法启动线程

实现Java.lang.Runnable接口,并实现run() 方法,将该对象实例作为Thread构造的参数再调用start()方法,使用了代理模式。

④如何实现线程之间的通信?

Java提供了3个方法解决线程之间的通信问题

wait() : 表示线程一直等待,并释放对象锁,直到其它线程通知再找回对象锁

notify() : (唤醒一个同一个对象上处于等待状态的线程)

唤醒在此对象监视器上等待的单个线程。[‘n??t?fa?

notifyAll():唤醒同一个对象上所有调用wait()方法的线程,优先级别高的线程优先运行

唤醒在此对象监视器上等待的所有线程。[

⑤多线程的状态[电话面试]

新建状态(就绪)->可执行状态(运行)->阻塞(可能)->死亡状态

⑥什么是线程安全,如何实现线程安全?

线程安全就是说多线程访问同一代码,不会产生不确定的结果。

编写线程安全的代码是低依靠线程同步

⑦☆启动一个线程是用run()还是用start()?

①什么时候使用Thread,什么时候使用Runable

②启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。

这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

如何避免死锁

1、在程序中尽量使用开放调用(方法本身没有加锁,对方法操作的内容进行加锁)

2、注意锁的顺序:尽量减少潜在锁之间的交互数量,遵守并文档化该锁顺序协议

3、尝试定时的锁,来替代使用内部锁机制

26、同步和异步有何异同,在什么情况下分别使用他们?

同步就是当一个线程运行时其他线程不能访问该线程中锁定的对象,为保障数据完整而使用的方法,

而异步可以多个线程同时使用一个对象 如果数据将在线程间共享。例如正在写的数据可能被另一个

线程读到,或 者正在读的数据可能已经被另一个线程写过了,那么这些数据 就是共享数据,必须进行同步。

当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,

就应该使用异步编程,在采用异步往往更有效率。

☆27、java的网络编程有哪两种,他们之间有什么区别?

**简述Socket

TCP协议:传输控制协议,提供可靠无差错的数据传输,资源消耗较大,性能和效率较低

UDP协议:用户数据报协议,不可靠的数据传输,资源消耗小,性能和效率较高

28、描述一下JVM加载class文件的原理机制?

JVM中类的加载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

29、描述下类实例化的详细过程(顺序)?

1. 父类静态成员和静态代码块,按在代码中出现的顺序依次执行

2. 子类静态成员和静态代码块,按在代码中出现的顺序依次执行

3.父类实例成员

4.父类构造方法

5.子类实例成员

6.子类构造方法

其中1.2是在类加载的时候执行

30、请描述Object中有哪些方法及其作用?

clone() 创建并返回此对象的一个副本。

equals(Object obj) 指示其他某个对象是否与此对象“相等”

finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

getClass() 返回此 Object 的运行时类。

hashCode() 返回该对象的哈希码值。

notify() 唤醒在此对象监视器上等待的单个线程。[‘n??t?fa?]

notifyAll() 唤醒在此对象监视器上等待的所有线程。

toString() 返回该对象的字符串表示。

wait() 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

wait(long timeout) 在其他线程调用此对象的notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。

wait(long timeout, int nanos)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,

或者已超过指定实际时间量前,导致当前线程等待。

nanometer [‘ne?n?mi:t?] n.[计量]毫微秒

☆String的方法?[德邦 中国电信理想]

a.equals():字符串是否相等(区分大小写)

f.trim():去字符串左右两边的空格

g.concat():连接字符串

h.indexOf():查找字符串所在位置

i.lastIndexof():查找字符串最后一次出现的位置

j.subString(int startIndex,int endIndex):截取字符串,第一个参数从0数,第二个参数从1数

k.split(“根据什么拆”):拆分字符串

String是否可以继承?[笔试题]

final类,不能修改

jvm

**32.JVM的内存结构?(高级)

方法区 堆 虚拟机栈 本地方法栈 程序计算器

jvm性能优化?

1.内存微调优化

2.锁争夺微调:

多线程 不变性 单写原则 Actor Disrupotor

3.CPU使用率微调

4.I/O 微调

Java 平台与内存管理

解释内存中的栈(stack)、堆(heap)和静态存储区的用法。

答:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间;而通过new关键字和构造器创建的对象放在堆空间;程序中的字面量(literal)如直接书写的100、“hello”和常量都是放在静态存储区中。栈空间操作最快但是也很小,通常大量的对象都是放在堆空间,整个内存包括硬盘上的虚拟内存都可以被当成堆空间来使用。

String str = new String(“hello”);

上面的语句中 str 放在栈上,用 new 创建出来的字符串对象放在堆上,而“hello”这个字面量放在静态存储区。

33. 什么时候用assert? Assert有什么作用?

断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,

那么系统会报告一个 Assertionerror。它用于调试目的

34.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

ceil: 向上取整 Math.ceil(11.3)=12 Math.ceil(-11.3)=-11

floor:向下取整 Math.ceil(11.6)=11 Math.ceil(-11.6)=-12

round:四舍五入 Math.round(11.5)=12 Math.round(-11.5)=-11

☆35.说出一些常用的类,包,接口,异常,请各举5个[笔试]

类 : String , Integer , Character , Float , ArrayList, Date,calendar,java.net.URL

包 : java.util

java.lang: Java语言包,主要包含与语言、数据类型相关的类。程序运行时,编译器自动引入该包

java.awt和javax.swing:提供了创建图形界面元素的类,通过这些类,可以控制应用程序的外观界面

java.sql: 包含了与 数据库 编程相关的类/接口

java.io:Java输入/输出包,包含与输入和输出操作相关的类,提供了不同的输入/输出设备读写的支持

java.net: Java网络包,提供与网络操作相关的类

java.text

java.math

接口 : Servlet ,Iterator , List, Map , Cloneable , Serializable

异常: IndexOutputBoundsException, NullPointException,NumberFormatException,

ClassNotFoundException, MethodNotFoundException,IOException

☆☆常见的异常,如何解决?(重点)

ClassCastException(类型转换异常)

IllegalArgumentException(非法计算异常)

IndexOutOfBoundsException(下标越界异常)

NoSuchElementException(没有这样的元素异常)

NullPointerException(空指针异常)

RasterFormatException, SecurityException, SystemException(系统出现的异常)

项目中常见的问题:

1>.com.mysql.jdbc.exceptions.jdbc.MySQLSyntaxErrorExcption

mysql关键字冲突

2>.json死循环

36.作用域public,private,protected,以及不写时的区别

访问修饰符有哪些?每个访问修饰符的作用?修饰方法和类的修饰符?以及它们的作用[湛腾]

作用域 当前类 同一package 子孙类 其他package

public √ √ √ √

protected √ √ √ ×

friendly √ √ × ×

private √ × × ×

37.int和Integer的区别?[上海卫城企业征信有限公司]

Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java

为int提供的封装类。Java为每个原始类型提供了封装类

39.&和&&的区别。

&是位运算符。&&是布尔逻辑运算符

40.JDK使用的版本?JDK8的新特效? [ 文思海辉 ]

JDK 7

新特性:接口的默认方法(接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法)

Lambda 表达式( ->)

函数式接口

方法与构造函数引用

Lambda 作用域

访问局部变量

访问对象字段与静态变量

访问接口的默认方法

Date API(包java.time下包含了一组全新的时间日期API)

Annotation 注解(支持多重注解)

☆41.静态变量和实例变量的区别? [文思海辉 平安科技]

静态变量:类名来引用

实例变量:创建对象才能引用

43.四位数的随机数?[中国电信理想]

(数据类型)(最小值+Math.random()*(最大值-最小值+1))

44.当前时间?3年前的时间

**********结构算法*********

8种排序算法:

直接插入

插入

希尔

内部排序 选择 简单选择

(只使用内存)交换 冒泡排序(快速)

归并

基数

外部排序

(内存和外层相结合)

[美教]: 二分算法 (不只需要会框架的人,那样还不如招个应届生)

import java.util.Comparator;

public class MyUtil {

public static <T extends Comparable<T>> int binarySearch(T[] x, T key) {

return binarySearch(x, 0, x.length- 1, key);

}

// 使用循环实现的二分查找

public static <T> int binarySearch(T[] x, T key, Comparator<T> comp) {

int low = 0;

int high = x.length – 1;

while (low <= high) {

int mid = (low + high) >>> 1;

int cmp = comp.compare(x[mid], key);

if (cmp < 0) {

low= mid + 1;

}

else if (cmp > 0) {

high= mid – 1;

}

else {

return mid;

}

}

return -1;

}

// 使用递归实现的二分查找

private static<T extends Comparable<T>> int binarySearch(T[] x, int low, int high, T key) {

if(low <= high) {

int mid = low + ((high -low) >> 1);

if(key.compareTo(x[mid])== 0) {

return mid;

}

else if(key.compareTo(x[mid])< 0) {

return binarySearch(x,low, mid – 1, key);

}

else {

return binarySearch(x,mid + 1, high, key);

}

}

return -1;

}

}

冒泡 排序 :

N个数字来排队,两两相比小靠前,外层循环n-1,内存循环n-i-1

For(int i=0;i<arr.length-1;i++){

For(int j=0;j<arr.length-i-1;i++){

If(arr[j]>arr[j+1]){

Int remp;

Temp=arr[j];

}else{

Arr[j]=arr[j+1];

Arr[j+1]=temp;

}

}

}

*********框架-hibernate*********************

☆1.Hibernate的理解 工作原理及为什么要用?

理解:hibernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,

使得Java程序员可以随心所欲的使用对象编程思想来操纵数据库

原理:

1.读取并解析配置文件

2.读取并解析映射信息,创建SessionFactory

3.打开Sesssion

4.创建事务Transation

5.持久化操作

6.提交事务

7.关闭Session

8.关闭SesstionFactory

优点: 1.简化了数据访问层的代码

2.程序更加面向对象

3.提高了开发效率

4.方便移植

2.请描述下hibernate对象的三种状态是什么,有什么不同?

瞬时状态transient: 对象只存在于内存中,缓存和数据库中都没有id

持久化状态persistent: 内存中有id,缓存中有id,数据库也有id

游离状态detached: 内存中有id,缓存中没有id,数据库有id

3.谈谈你对Hibernate和MyBatis的理解及相对JDBC有什么优缺点?

相同点:都是通过sessionFactorybulider由xml配置文件生成sessionfactory,然后由sessionfactory生成session,然后开启执行事务和sql,

三者生命周期都是差不多的

mybatis的优势:可以进行更加细致的sql优化,减少查询的字段

hibernate优势:dao层比mybatis简单,数据库移植性比mybatis强,二级缓存机制比mybatis好,对象的缓存和维护比mybatis好

相对于jdbc开发效率高,运行速度快,但内存消耗大

Hibernate和JDBC的区别?

同:

hibernate是对JDBC的轻量级的封装

java的数据库操作中间体

线程不安全,都需要及时关闭

显示的事务处理

异:SQL语言 SQL HQL

操作对象 数据 持久化对象

数据状态 瞬时 可持久化

开发效率 低 高

☆4.请描述下什么是hibernate 1+N问题及如何解决?

查询多的一方默认会把一的一方查询出来(Eager),而且是发N条sql的方式查询

1、将多的一方设FetchType.LAZY,用到一的一方的时候才发sql语句,只是延迟而已

2、使用hql的迫切左外联接查询(left join fetch),只发一条|xml可以设置fetch=”join”

3、使用Criteria查询,即使用hql的左外联接查询,只发一条

4、@BatchSize(size=?) 取一的一方的时候发1+N/?条sql | xml中的class标签中设置batch-size=”5″ 只有fetch=”select”有用

5.请写出常见的几种主键生成策略,并解释其用途?

1:assigned

—-表示在新增数据时由应用程序指定主键的值。主要针对主键是采用自然主键的形式。这种方式,适用于主键列不是自动增长列。

2:increment

—-表示新增数据操作时由hibernate自动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1.

适用于采用代理主键形式的主键列。同样不能用于主键列是自动增长的表。

3:identity

—-主要适用于sqlserver数据库的自动增长列的表。

4:native

—-表示根据不同的数据库采用不同的主键生成策略。

6.请指出session的get和load方法、save和saveOrUpdate方法、clear和flush方法的区别?

get():先检查缓存(session),没有该对象立马发sql,如果对象不存在返回null,使用的时候则NullPointerException

load():返回代理对象($$,stu.getClass()),需要用到的时候先检查缓存,没有才发sql,如果对象不存在直接异常(LazyInitializationException),session关闭后再用到也将异常

no session

get()较常用,load()不常用

save():不管怎样都保存,即使有和数据库相同的id

saveOrUpdate():对象存在id则update,如果数据库有id则成功update没有对应的id则异常,对象没有id则save

clear():强制清空缓存,让对象变成瞬时状态或者游离状态

flush():默认强制缓存和数据库同步一下,对象变为持久状态,但没有提交还可以回滚session没有关闭

☆6、hiberante中的对象关联关系有哪几种?MyBatis怎么配置关联关系?

1、单向一对一关联映射

2、单向多对一关联映射(many-to-one)

3、单向一对多关联映射(one-to-many)

4、单向多对多映射(many-to-many)

5、双向一对一关联映射

6、双向一对多关联映射

7、双向多对多关联映射

mybatis:可以使用嵌入式,引入式,继承式

一对多的时候在一的一方设置collection,多的一方设置association

多对一的时候在多的一方设置association,一的一方设置collection

多对多的时候,使用中间表实体映射,拆成一对多和多对一

7、hibernate联接查询有哪几种,迫切和非迫切有什么区别?

1.默认查询的情况:

2.迫切左外连接

3.左外连接

4.迫切内连接

5.内连接(包含隐式内连接)

6.右外连接

迫切联接和非迫切联接返回类型不同,但都是持久化状态,无论是否懒加载都会加载关联对象!

8、请描述下list()方法和iterate()方法有什么区别?

iterate:先取所有需要的id,根据id查询对应的记录,第二次iterate先看缓存有木有,木有才发sql

list:直接取所有记录,即使同一事务中第二次list还会发sql去数据库取,没有利用一级缓存

☆9、请描述下hibernate的缓存机制及事务隔离机制?[文思海辉电话面试 中信]

缓存机制:分类:

1.一级缓存:session缓存,事务范围的缓存

☆2.二级缓存:sessionFactory的缓存,事务隔离级别的缓存(经常被访问、改动不大、数量有限、不是很重要,允许出现偶尔并发的数据)

3.查询缓存(应用程序运行时经常使用的查询语句,很少对查询的数据进行增、删、改操作)

缓存算法:LRU最近很少使用

LFU最少被使用

FIFO先进先出

作用:降低应用程序对数据库的访问频率,提高应用程序的运行效率

事务隔离机制:当事务并发访问有可能造成:脏读、不可重复读、幻读,会严重影响数据库和用户体验,通过设置事务隔离级别,

或者利用Hibernate提供的两种锁机制,悲观锁和乐观锁来解决

10、谈谈你对xml配置文件中的fetch和inverse的理解?

fetch是抓取策略:

select是在查询的时候先查询出一个实体,然后在根据一个查询出多个实体,产生1+N现象

join是在查询的时候使用外连接进行查询

subselect发送一条select语句抓取在前面查询到的所有实体对象的关联集合

实现懒加载设置lazy=”true”后,一定得设置fetch属性等于select

inverse:标记由哪一方来维护关联关系,双向关联中,默认值为false,如果设置为true,则表示由对方维护两者之间的关联关系

11、Hibernate是如何延迟加载[华榭科技有限公司]

***************Mybatis********

1.Mybatis 理解[逑美科技有限公司]

mybatis是一个可以自定义SQL 存储过程 和高级映射的轻量级的持久层框架,将面向接口编程的思想贯穿整个系统应用

2.mybatis框架原理

1.加载配置并初始化 2.接受调用请求 3.处理操作要求 4.返回处理结果

优缺点:

优点:简单 实用

缺点:不成熟

☆3.性能优化:解决1+N问题:用到哪个对象才发对应的sql

1、使用懒加载

配置:<settingname=”lazyLoadingEnabled” value=”true”/>

只要用到对象,不管是否用到关联对象都发1+N,只有什么对象都不用才发一条sql

2、使用联接查询

left join …

☆4.缓存:

一级缓存是默认开启不能关闭

mybatis中还默认开启了全局缓存(二级缓存)

缓存开启后session没有关闭执行同样的sql语句会使用缓存,如果参数改变,缓存就会失效。

实现方式:1.内置 -cache 机制

2.第三方-ehcache, oscache

☆5.对比-Mybatis和hibernate的区别和应用场景?

hibernate:是一个标准ORM框架(对象关系映射)。入门门槛较高的,不需要程序写sql,sql语句自动生成了。

对sql语句进行优化、修改比较困难的。

应用场景:

适用与需求变化不多的中小型项目,比如:后台管理系统,erp、orm、oa。。

mybatis:专注是sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便。mybatis是一个不完全 的ORM框架,虽然程序员自己写sql,

mybatis 也可以实现映射(输入映射、输出映射)。

应用场景:

适用与需求变化较多的项目,比如:互联网项目

☆☆Hibernate和Mybatis的区别

同: Hibernate与MyBatis都可以通过SessionFactoryBuilder由xml配置文件生成SessionFactory,然后由SessionFactory生成Session,

最后由Session来开启事务和SQL语句

都支持JDBC和事务处理

异:hibernate是全自动 Mybatis是半自动

hibernate数据库移植性大于Mybatis

Mybatis更注重于SQL

hibernate拥有完整的日志系统,Mybatis则欠缺些

☆6.Mybatis中#跟$的区别?

#把传入的数据当作字符串 $传入的数据直接生成在sql里

#方式能够很大程度防止sql注入 $无法防止sql注入

7.ibatis:

开源的 轻量级的 基于java持久层的 半自动式开发框架

优点:

1、sql可以写在XML中 结构清晰 配置灵活

2、增强了后期维护性

3、执行sql后 返回的结果集自动封装

缺点:

1、只使用于小项目

2、sql写在XML中 调试不方面

3、开源的东西少 文档资料少

8.ibatis 跟mybatis的区别:

1、mybatis实现了接口绑定,使用更加方便

2、mybatis改进了对象关系映射,效率更高

3、MyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

4.mybatis 增加的注解版

Ibatis跟Hibernate比较:

如果系统二次开发 Ibatis比Hibernate灵活性高

Ibatis简单易学 Hibernate相对复杂

在不同的数据库移植中 hibernate比较好

Ibatis可以进行细粒度优化 而Hibernate根据映射关系全部优化

Ibatis跟jdbc 比较:

jdbc它是一个执行Sql语句的JAVA API 是一套访问数据库标准 提供了一组接口

Ibatis也是一套数据库框架 但是把sql语句抽离了出来 底层也是JDBC

9.MyBatis使用的版本?[上海普元]

MyBatis 3.3

☆10.MyBatis的标签?[德邦]

1>.insert select update delete

2>.关联关系:resultMap id result association

<setting name=”autoMappingBehavior” value=”FULL”/> 对于关联关系起作用

<setting name=”mapUnderscoreToCamelCase” value=”true”/> 是否开启自动驼峰命名规则

3>.映射配置:cache property

4>.<!– 开启所有表的自动增长 –>

<setting name=”useGeneratedKeys” value=”true”/>

5>.调用存储过程:parameterMap

****************JPA**************************

Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系.

是 JCP 组织发布的 Java EE 标准之一.,任何声称符合 JPA 标准的框架都遵循同样的架构,提供相同的访问 API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行

优点:标准化 对容器级特性的支持 简单易用,集成方便 查询能力 高级特性(支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系)

与Hibernate相比,JPA是不是更好

JPA是规范,而Hibernate是实现

****************SpringData**************************

为了简化构建于Spring框架的应用的数据访问计数,包括非关系数据库 Map-Reduce框架 云数据服务等等,另外包括对关系数据库的访问支持

******框架-Struts2********

MVC的 理解 ? [ 上海卫城企业征信有限公司 ]

1.Struts2 的.理解

Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点

Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架下开发的程序提供很好的兼容性

☆☆ s truts2的 优缺点( 上海 优驻)

优点:组件模块化、灵活、可重用,简化了基于MVC的web应用程序的开发

可对象导航

支持国际化和本地化

提供了Exception处理机制

支持数据连接池管理

开源

缺点:对Servlet依赖性过强

测试不方便

对action执行的控制困难

1.Struts2跟Struts1的区别?

struts2使用过滤器作为主控制器无需继承HttpServlet,struts1使用一个继承HttpServlet的ActionServlet类作为主控制器。

struts2中可以使用OGNL表达式,struts1中没有OGNL

struts2中无需新创建一个专门作为页面数据对接的form类,struts1中要想获取页面数据对Bean进行填充必须要创建.

struts2中自定义Action一定要继承struts中的Action或其子类,而且Action中的方法也无需再带参数.

struts2中是多线程的,strut1中是单线程.

☆2.Struts2 的工作原理(执行流程) ?应用了哪些经典设计模式?

tomcat->web.xml->filter->struts.xml->namespace->action->method->result->jsp|html

设计模式

责任链模式 MVC设计模式 代理模式 适配器

3.浅谈struts2拦截器 , 你知道struts2中那些拦截器?[德邦]

拦截器是struts的核心,拦截器:Interceptor 拦截器本身是一个普通的java 对象,它能动态拦截Action调用

Struts2的拦截器是AOP的一种实现,AOP内部使用了动态代理

拦截器 : 大致分为拦截器,与连接链(stack)

1.timer时间拦截器,用来计算从执行拦截器到拦退出截器共用了多长时间.

2.i18n 国际化语言拦截器

3.fileUpload 文件上传拦截器

6.如何实现自定义拦截器?

创建拦截器实现Interceptor接口或继承AbstractInterceptor,重写intercept()方法,配置xml

4、请写出自定义类型转换器的实现步骤?

1. 实现ognl.TypeConverter接口重写convertValue()

或 继承ognl.DefaultTypeConverter重写convertValue()

或继承StrutsTypeConverter抽象类(DefaultTypeConverter子类)重写convertFromString(前台到后台)和convertToString(前-后)(常用)

2.注册转换器(自定义转换器):

a.配置全局属性文件xwork-conversion.properties(属性原始类名=转换器类)

jdbcType,类路径

com.cssl.Point=com.cssl.struts.MyConverter

b.配置指定action属性文件action名-conversion.properties(属性名=转换器类)

5.在action中如何使用request,response,session,application等对象?

1、使用内置类型获取(使用Servlet解耦合)

2、实现RequestAware、SessionAware、ApplicationAware接口,依赖容器注入DI(Dependency injection) (一般用这种)

3、使用Servlet耦合的方式(基本不用):ServletActionContext…..

4、实现ServletRequestAware、ServletResponseAware接口(DI)

10.struts2支持哪些表达式?OGNL有哪些特点?

1.OGNL(Object-Graph Navigation Language), 表达式,方便地操作对象属性的开源表达式语言

2.JSTL(JSP Standard Tag Library), JSP 2.0 集成的标准的表达式语言。

3.Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如 Python、Ruby和Smarttalik 等) 的一些特性;

4.Velocity, 严格来说不是表达式语言,它是一种基于Java的模版匹配引擎,据说其性能要比JSP好

OGNL表达式的特点:

1.支持对象方法调用,如xxx.doSomeSpecial();

2.支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括路径)]@[方法名|值名]

例如: @java.lang.String@format(‘foo%s’,’bar’) 或@tutorial.MyConstant@APP_NAME

3.支持赋值操作和表达式串联,如price=100,discount=0.1,calculatePrice(),这个表达式结果会返回80

4.访问OGNL上下文(OGNL 5 和ActionContext

5.操作集合对象

struts2标签的作用:

Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,良好的扩展性,实现了代码复用,在页面中可定义组件,不依赖于任何表现层技术

11.struts2的OGNL表达式中 ‘#’,’%’, ‘$’ 三个符号有哪些作用?

ognl全称是Object Graph Navigation Language,

struts2使用OGNL为默认表达式语言,同时扩展了OGNL,如值栈,并将值栈作为OGNL 的根对象,可以直接访问,结合struts标签使用

# 取得Stack Context(非值栈)的值

%{}:将原本的文本属性解析为ognl

% : 1.使用%{}可以取出保存在值堆栈中的Action对象,直接调用它的方法

2.如果Action继承了ActionSupport,那么在页面标签中可以使用%{getText(‘key’)}获取国际化信息

$ 用于i18n和struts配置文件

^:过滤,返回符合条件第一个

?:过滤,返回符合条件的最后一个;传值

struts2标签的作用?[诚泰财产]

14.struts2中有哪些核心类, 各有什么作用?

①.FilterDispatcher ,核心控制器, 作用:

1.读取静态数据信息

2.决定需要转发或者导航的Action配置

3.创建Action的Context

4.创建Action代理

5.内存清理和性能优化

②.拦截器Interceptor

拦截器本身是一个普通的java 对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种各样的Web项目许久。

也可以阻止Action的执行,同时也可以提取Action中可以复用的部分.

③.ActionMapper

ActionMapper其实是HttpServletRequest和Action调用请求的一个映射,它屏蔽了Action对于Request等 Java Servlet类的依赖。

Struts2中它的默认实现类是DefaultActionMapper,ActionMapper很大的用处可以根据自己的需求来设计url格式 , 它自己也有Restful的实现,具体可以参考文档的docs\actionmapper.html

④.ActionProxy & ActionInvocation

Action的一个代理,由ActionProxyFactory 创建,它本身不包括Action实例,默认实现DefaultActionProxy是由ActionInvocation持有Action实例。

ActionProxy作用是如何取得Action,无论是本地还是远程。而ActionInvocation的作用是如何执行Action,拦截器的功能就是在ActionInvocation中实现的.

⑤.ConfigurationProvider&Configuration

ConfigurationProvider 就是Struts2中配置文件解析器, Struts2中配置文件的解析器,Struts2中的配置文件主要是尤其实现类,XmlConfigurationProvider 及其子类 StrutsXmlConfigurationProvider来解析

⑥.Configuration

15.请描述下Struts2提供的处理ajax的方式?

jquery+struts2+json插件

Structs2的ajax标签

原生ajax

dwr

16.Struts2的属性注入有哪几种方式?什么时候使用那种方式?

1、属性:直接在action定义属性和jsp页面name名称对应(属性较少的时候使用)

2、域模型:定义一个实体类Vo,类属性和jsp页面的name对应(jsp name:vo.属性名),action 中拥有vo的引用及get和set方法,还需注意vo一定要有无参的构造(常用)

3、模型驱动:实现ModelDriven<Vo>,必须自己手动new Vo()无须get和set, jsp页面直接用属性名称,不需要vo.属性名,而且不能在一个action注入两个vo对象

17.如何让一个Action的多个方法映射不同请求?这几种方式各有什么特点

A).动态方法调用DMI :不推荐用,因为会有安全隐患

B).每个方法配置action:会产生太多的action

C).通配符:注意写多个”action name=*”的时候防止冲突,约定高于配置

18.请描述ActionContext、StackContext、ValueStack之间的关系?

ActionContext?:

是Action上下文,可以得到request session application一次Action调用都会创建一个ActionContext

ValueStack:

是值栈,由OGNL实现?,存放表单中的值

可以把它简单的看作一个List

Stack Context:栈上下文,用来存值

19.请描述struts2中的拦截器和过滤器的区别?[长量基金]

同:

A).都是责任链模式的典型应用

B).功能类似,原理类似,方法类似

异:

A).拦截器是webwork和struts2的概念,在struts2.xml中配置,只能拦截action请求

B).过滤器是Servlet中的概念,在web.xml配置,可以过滤所有请求

12.struts2你使用过哪些返回类型?各有什么区别?

dispatcher 转发类型,代表返回结果为转发,数据不丢失,地址不变。

redirect 重定向,返回结果为重定向,数据丢失,地址改变。

chain 用来处理Action链,被跳转的Action仍然能获取上个页面的值,如request信息

13.ActionSupport类的作用? 实现了哪些接口?

ActionSupport作为Action类的基类,用来使用其父类已实现的一些方法。

作为Action的基类,实现了很多接口。

1.Action 存放了Action中方法常用的几个返回值,如success,input,login…

2.Valiadteable 验证类,包含了默认验证方法。此方法必定会被调用.

3.ValidationAware 验证信息处理类,如使错误消息获取,错误信息添加方法…

4.TextProvider 国际化供给类,获取国际化资源文件中的信息.

5.LocaleProvider 本地化供给类,获取本地信息.

6.Serializable 序列化接口,实现网络传输.

1 4.在struts2中,如何校验数据?

1.在Action中创建validate+要校验的方法名首字母大写

2.创建名称-validation.xml校验框架文件.

也可 在Action里实现preparable接口

15 .在struts2中,如何设置上传文件格式或文件大小?

1.设置文件格式: 在想实现文件上传的Action标签下配置interceptor-ref标签name属性内容为fileUpload,

然后再在标签中添加配置param标签,name属性内容为allowedType在text中写入文件类型/文件格式

2.设置文件大小: 在struts.xml文件中创建constant 标签,设置name属性为 value 为文件大小单位为字节

16 .在struts2中,如何设置国际化资源文件路径? 在页面如何使用国际化

在sturs.xml文件中配置constant标签 name属性为struts.custom.i18n.resources value为国际化资源文件路径.

1. 页面中使用标签/struts-tags标签库 中的<i18n>标签并在其标签下配置一个<text>标签

2. 使用OGNL表达式%{getText(‘国际化属性名称’)}

17 .struts2中,你使用过哪些标签?

fielderror 错误信息输出标签, iterator 集合迭代标签, if 判断标签,form 表单标签,textfield text字段标签, submit 表单数据提交标签…

1 8 .重复提交的插件,实现原理?(面试)

token

取得session中的令牌值,然后resetToken,再从页面hidden元素取来令牌值,进行比较,如果相等则为第一次,不等则为重复提交

****框架-Spring************

☆1、谈谈你对Spring的理解?[上海极点信息科技有限公司]

spring是一个设计层面,轻量级的控制反转(IOC)和切面(AOP)非侵入式的开源框架,

他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用

☆2、请谈谈你对Spring的IOC和DI的理解?[极点科技]

控制反转IOC(Inversion of control):对象创建的权利反转到Spring容器(ApplicationContext.xml)而程序本身不在维护了

依赖注入DI(Dependency injection) :实际上DI和IOC是同一个概念,对象的创建由spring容器注入

3、Spring提供了几种注入方式?bean的生命周期主要有哪几种,用于什么情况?

①注入方式:

set : 针对性强

构造器 : 赋值方便

接口 : 降低类之间的耦合性,提高代码可读性,与操作性

注解 : 使用方便,想赋值就赋值。控制性强

②bean的生存范围:

scope 属性 (文档)

默认singleton(默认单例,action不能为单例):bean对象只会实例化一次

prototype(原型 多例):多个对象实例

request:一次HTTP请求,对应一个实例,仅在基于web的SpringApplicationContext情形下有效

session:session中对应一个实例.web 下有效

global session : 在一个全局的HttpSession中,一个bean定义对应一个实例

☆4、请解释下Spring的AOP是什么,有什么作用?

AOP(Aspect Oriented Programming)面向切面编程

前置型通知 : 指定方法执行之前先执行通知方法。

后置型通知 : 指定方法执行之后再执行通知方法。

环绕行通知 : 执行方法执行之前执行一次,当指定方法执行之后,再返回坏绕行通知方法。

最终型 : 不管是否抛出异常都会执行通知。

异常型通知 : 只有当目标方法抛出异常之后才会执行通知

5、Spring中使用了哪些经典设计模式,举例说明?

1)工厂方法(Factory Method):Spring中的FactoryBean,让子类决定实例化哪一个类

2)单例(Singleton):提供了全局的访问点BeanFactory

3)适配器(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

举例:实现接口,web.servlet.mvc.SimpleControllerHandlerAdapter

4)代理(Proxy):为其他对象提供一种代理以控制对这个对象的访问 举例:aop

5)模板方法Template Method:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

举例:JdbcTemplate和DaoSupport

☆6、请描述下Spring是如何管理事务的?

声明式 : 在ApplicationContext.xml文件中配置事务

配置简单,使用方便,可控性强,细粒度高。由于它是将事务放在 xml文件里的,所以需要解析

编程式事务 : 在ApplicationContext.xml文件中配置事务

侵入性强,可控性差,一经编译不可被改变。但由于它是将事务代码写在DAO层代码里的,性能方面更高

注解 : 在持久层配置注解

配置简单,使用方便。缺点是一编译不可被改变。

7、请描述下Spring整合struts2的基本步骤?

导包

配置struts.objectFactory属性值:<constant name=”struts.objectFactory” value=”spring” />

配置web.xml增加spring的监听器

Spring配置文件

修改Struts配置文件

8、请描述下Spring如何解决懒加载的方式?

lazy-init(也分局部和全局):懒加载 true:延迟初始化,用到对象时,才初始化对象

9、请描述下Springmvc有哪些核心组件?

核心控制器:DispatcherServlet

控制器: Controller

请求分发器:Handler Mapping

视图解析器:ViewResolver & View

拦截器: Interceptors

本地化解析器 LocalResolver

验证器 Validate

☆10.Spring的安全(线程安全?)问题?

线程不安全的

struts1的action是单例的,所以存在线程安全问题(strusts2是多例的,所以也存在线程安全问题)

springmvc默认的注入是单例,所以也存在线程安全问题

原因:单例

解决办法:

struts1如果被spring管理,设置成scope为protype

禁用可变动的成员变量,使用局部变量

☆11.请描述下Springmvc的工作流程?

比较:☆struts和springmvc工作流程

1.DispatcherServlet接收请求

2.DispatcherServlet查询对应的处理器映射项(HandlerMapping),,找到处理请求的Controller,负责对请求进行真正的处理工作。

3.DispatcherServlet请求提交到目标Controller

4..Controller进行业务逻辑处理后,会返回一个ModelAndView

5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象

6.视图对象负责渲染返回给客户端。

1) 客户端发送请求(*.action)

2) FilterDispatcher拦截请求

3) 调用ActionMapper,查找有没有对应的action

4) 找到对应的action,创建Action的代理类ActionProxy,负责action的执行

5) ActionProxy通过ConfigurationManager对象获得当前访问的action的相关配置信息.

6) ActionProxy根据获得的action的配置信息,创建ActionInvocation对象.

7) ActionInvocation对象负责执行invoke()方法,调用action的方法

8) 处理完action后,返回Result对象,拦截器根据处理结果分发到对应的视图页面显示

☆12.Struts与SpringMVC的区别

区别 struts SpringMVC

核心控制器 过滤器 Dispather Servler

Scope 基于类开发,传递参数是 基于方法开发,传递参数是通

通过类的属性,只能设计为多例 过方法形参,可以设计为单例

返回 String Model and View

设计思想 oop 在servlet上扩展

性能 spring会稍微比struts快

**********框架整合*****

★★★★★SSH[上海宜采软件科技有限公司]

一、Struts + Spring + Hibernate

Struts:表现层

1、Struts2采用Filter 进行配置

2、配置提交方式、通配符

3、

Spring:业务层

1、AOP

2、CORE

3、applicationContext.xml常用配置(dataSource数据源配置,sessionFactory工厂,TrasactionManager事务配置)

Hibernate:持久层

1、SQL和JDBC API

2、基于POJO,便于测试

二、Struts整合Spring

1、使用Spring 的 ActionSupport 类整合 Struts

2、使用Spring 的 DelegatingRequestProcessor 覆盖 Struts 的 RequestProcessor

3、将Struts Action 管理委托给 Spring 框架

三、Spring 整合 Hibernate

1、在 Spring 框架中,像 JDBC DataSource 或 Hibernate SessoionFactory 这样的资源,在应用程序上下文中可以用 bean 实现;

1、配置数据源,有三种方式的数据源

方式一:Spring内置实DriverManagerDataSource

方式二:DBCP提供的BasicDataSource

方式三:JNDI数据源(mysql5,tomcat6为例)

2、配置sessionFactory

3、配置事务

四、准备

1. 开发环境:MyEclipse 8.0 GA(Eclipse3.5.1,JRE1.6.0.10和MyEclipse Enterprise WorkBench8.0)

2. 运行环境:JDK 6 Update 20(JRE1.6.0.13)

3. 开发框架:Struts 2.1.8.1,Spring 2.5,Hibernate 3.2

4. 应用服务器:tomcat 6.0.26 5. 数据库服务器:SQL Server 五、理论

五、理论

简单来说就是使用Spring的IoC在Spring的容器中初始化好注入

bean、 sessionFactory、action、manager、dao等对象,这样对象就可以直接使用。

Hibernate负责数据库的持久化操作。

Struts负责表现层数据的传递,页面的跳转等。

SSH整合[重点–上海科江电子 上海触特信息科技]

pojo:@Entity

@Id @GeneratedValue @Column

dao:

BaseDao:@Repository

@Resource

private SessionFactory sessionFactory;

public Session getSession(){

return this.sessionFactory.getCurrentSession();

}

Spring的配置文件[百联]:

扫描包(排除控制层对象)

引入jDBC的属性文件

配置DataSource

配置SessionFactory

声明式事务管理(通知 切面)

SpringMVC的配置文件:

扫描包

注解

放过静态资源

视图解析器

拦截器设置

Spring配置文件如何写?

<context:annotation-config/>

<context:component-scan base-package=”com.cssl”/>

<context:property-placeholder location=”classpath:mysql.properties”/>

配置数据源

<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”>

<property name=”driverClassName” value=”com.mysql.jdbc.Driver” />

<property name=”url” value=”jdbc:mysql://127.1:3306/test” />

<property name=”username” value=”root” />

<property name=”password” value=”root” />

</bean>

Session工厂

<bean id=”sqlSessionFactory” class=”org.mybatis.spring.SqlSessionFactoryBean”>

<property name=”configLocation” value=”classpath:mybatis-config.xml”></property>

<property name=”dataSource” ref=”dataSource” />

</bean>

<!– 扫描包下所有类 : (不能注入sqlSessionFactory,可以没有id,自动将dao包下类根据类名第一个字母小写生成id名) –>

<bean class=”org.mybatis.spring.mapper.MapperScannerConfigurer”>

<property name=”basePackage” value=”com.cssl.dao”></property>

</bean>

<!– 声明式事务 –>

<bean id=”txManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>

<property name=”dataSource” ref=”dataSource” />

</bean>

<!– 事务通知 –>

<tx:advice id=”txAdvice” transaction-manager=”txManager”>

<tx:attributes>

<tx:method name=”select*” read-only=”true” />

<tx:method name=”find*” read-only=”true”/>

<tx:method name=”*” read-only=”false”/>

</tx:attributes>

</tx:advice>

<aop:config>

<aop:pointcut id=”cut” expression=”execution(* com.cssl.service..*.*(..))”/>

<aop:advisor advice-ref=”txAdvice” pointcut-ref=”cut”/>

</aop:config>

SSM与SSH区别优缺点[中科软科技有限公司]

****数据库**********

☆1.Sql优化问题?[重点–德邦 平安科技]

根据主键查询

大数据表删除,用truncate table代替delete

合理使用索引

查询时,使用列名(select *)

尽量少嵌套子查询

避免在 where 条件中进行函数计算

减少对表的查询:

尽量多使用 COMMIT:

使用 DECODE 函数来减少处理时间

删除重复记录

sql 语句用大写的

用 IN 来替换 OR

事务

使用外键;

MySQL优化

查询缓存优化查询

设置主键

避免 SELECT *

不要 ORDER BY RAND()

为搜索字段建索引

越小的列会越快

选择正确的存储引擎(MyISAM 和 InnoDB)

☆2.分页[上海触特信息科技]

MySQL:select * 表名 limit pageIndex,(pageIndex-1)*pageSize

Oracle:

SELECT * FROM

(SELECT ROWNUM rn,t.* FROM

(SELECT ename,sal FROM emp ORDER BY sal) t –排序查询所有结果

WHERE ROWNUM<= pageIndex*pageSize) –限制查询的上限

WHERE rn>(pageIndex-1)*pageSize –限制查询的下限

Sqlserver:

select toppageSize(pageIndex-1)id from test order by id

取前10条

☆3.说出数据连接池的工作机制是什么?

连接池的实现是以空间换时间

优点:效率高,安全性稳定性好,节约资源

工作机制:

创建:J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。

调用:客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。

如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。

释放:当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

实现方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正关连接,而是把它代理的Connection对象还回到连接池中。

4.外连接与内连接的区别? [ 平安 科技]

内连接(自然连接):只有两个表相匹配的行才能在结果集中出现

外连接

左外(以左边的表为主)

右外(以右边的表为主)

全外连接(左右两边都不受限制)

5.外连接中的左外连接、右外连接和全外连接有什么特点?

左外连接:A left [outer] join B on 等值条件

右外连接:A right [outer] join B on 等值条件

完全外连接:A full [outer] join B on 等值条件

6.表级锁,行级锁和页面锁各有什么特点?

表级锁 , 开销小,加琐快。不会出现死锁;锁粒度大,发出琐冲突的概率最高,并发度最低。

行级锁 , 开锁大,加琐慢;会出现死琐;琐力度最小,发生琐冲突概率最低,并发度也最高。

页面锁 , 锁力度界于表锁和行锁之间,并发度一般。

7.如何操作一个游标读取一个表? 写出代码?

☆☆☆游标

用过游标吗?在存储过程中用过游标吗?

//创建存储过程

create or replace procedure showstudent(v_cname in varchar ) as

s_tmpnumber;

s_totalnumber;

//声明游标

cursor cur_grade is select * from sc where c# in (select c# from c where cname = v_cname);

begin

// for 循环游标(自动打开,自动提取,自动关闭)

for cur_rec in cur_grade loop

s_tmp:=cur_rec.grade;

s_total:=nvl(s_total,0)+nvl(s_tmp,0);

end loop ;

dbms_output.put_line(v_cname||’的总分是: ‘||s_total);

end ;

8.什么是存储函数? 如何声明存储函数?存储函数有什么限制?

☆9. 什么是存储过程? 如何创建存储过程? [ 平安 科技]

概念

a.类似于C#/Java中的方法,是对代码的封装,方便用户调用

b.过程可以无参,也可以接收1个或多个参数

c.过程可以通过return返回1个int类型数据

优点

a模块化,按功能进行封装

b.重用性好,易于维护

c.执行效率高,编译好之后存储在数据库中

d.减少网络流量的使用

e.安全性高

创建

CREATE OR REPLACE PROCEDURE 过程名

AS

声明部分

BEGIN

逻辑处理部分

END;

调用

BEGIN

过程名

END;

10.存储过程和函数的区别

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程

函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表

☆☆☆☆11.事务是什么?[重点]

1、概念:同生共死

1)事务是最小的逻辑单元

2)该单元包含1个或者1组数据库操作

3)这些数据库操作要么同时成功,要么同时失败

2、分类:

1)隐式事务

2)自动提交事务:针对单个数据库操作

SQLServer将单个的insert/delete/update操作当作1个独立的事务,自动提交

3)显式事务:针对多个数据库操作

a- 开始事务 begin transaction

b- 提交事务 commit transaction

c- 回滚事务 rollback transaction

注意:使用@@error累加每个操作的错误号,作为判断提交或回滚依据

3、特点:ACID

A- 原子性,事务是最小的、不可分割的逻辑单元

C- 一致性,事务前后的数据应保持一致

I- 隔离性,事务之间是相互独立的

D- 永久性,事务提交后对数据库的影响是永久的,一旦提交则无法回滚

事务的作用:保证了数据的完整性

12.Oracle

①Oracle是甲骨文公司的一款关系数据库管理系统。

②Oracle主要特点:

1.)完整的数据管理功能:

1.数据的大量性,

2.数据保存的持久性,

3.数据的共享性,

4.数据的可靠性。

2.)分布式处理功能。

3.)用ORACLE能轻松的实现数据仓库的操作。

③Oracle的优点:可用性强,可扩展性强,数据安全性强,稳定性强。

13.MySQL

1.MySql是一个开放源码的小型关联式数据库管理系统。

2.MySql的系统特性:

1.为多种编程语言提供了API。

2.支持多线程,充分利用CPU资源。

3.提供多语言的支持。

4.优化的SQL查询算法,提高查询的速度。

5.提供TCP/IP、ODBC和JDBC等多种数据库连接途径

14.表和视图的区别?[平安]

区别:1、视图是已经编译好的sql语句。而表不是

2、视图没有实际的物理记录。而表有。

3、表是内容,视图是窗口

4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改

5、表是内模式,视图是外模式

6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,

视图可以不给用户接触数据表,从而不知道表结构。

7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

8、视图的建立和删除只影响视图本身,不影响对应的基本表。

联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,

它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。

视图是基本表的抽象和在逻辑意义上建立的新关系

15.Oracle的数据类型?[平安]

1)数字:number/number(n)/number(n,m)

number 整数、小数

number(4) 整数,小于等于9999

number(4,2) 整数、小数,小于等于99.99

2)固定长度字符:char(n) 最大长度2000字节

char 固定长度

nvarchar 可变长度 1个字,2个字节

varchar 可变长度 1个字,1个字节

3)可变长度字符:varchar2(n) 最大长度4000字节

4)日期时间:date/timestamp

☆☆☆☆☆16.数据库函数?[德邦]

sum avg count max min

Oracle常用字段和函数[中国电信]

17.去除重复值?[德邦 平安]

distinct

删除除了id号不同,其他都相同的学生冗余信息.

delete from tablename where id号 not in(select min(id号) from tablename group by 学号,姓名,课程编号,课程名称,分数)

实例:

delete from student2 where id not in(select mid from (select min(id) mid

from student2 group by name) as t);

或者:

delete from student2 where id not in(select min(id) from (select * from s

tudent2) as t group by t.name);

18.备份还原[德邦]

1>.备份数据库和表

mysqldump命令来备份数据库

C:\>mysqldump -u root -p test>d:\backup.sql

Enter password: ******

执行此语句将把test数据库备份到D盘的backup.sql

2>.备份多个数据库表 ?

c:\mysql\bin\>mysqldump –u root –p school user01 user >d:\backup.sql

此句的意思是把school库中的user01表和user表的内容和表的定义备份到D盘backup.sql文件中

3>.mysql> source d:/books.sql;

19.MySQL使用的版本?[德邦]

MySQL 5.6.24

20.union和union all的区别?[平安]

Union(联合:并集):返回两个查询选定的所有的不重复的行

Union all(联合所有):返回两个查询选定的所有行,包括重复行

Intersect(交集):返回两个查询都有的行

Minus(减集):返回由第1个查询选定但是没有被第2个查询选定的行

21.索引为什么快?

没有索引时,查询需要全表扫描

而索引是将表中记录排序(相当于书签),按照索引值找到记录的唯一ROWID,再根据ROWID找到数据(相当于书)

22.sqlserver和mysql的区别?[文思海辉]

同:数据存储 支持二进制关键词和关键索引

异: SqlServer MySQL

基本原则: 保守(SQL服务器的狭隘的, 开放(可扩展,开放的存储引擎)

保守的存储引擎.Sybase引擎)

性能: mySQl优于SqlServer

安全功能 需要付出昂贵的代价,记录有关的查询 能改变数据的二进制日志,能快速地从主机上复制数据,即使服务器崩溃,日志也会保持完整

23.数据库高并发

1:高并发

多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发问题

解决办法:

系统或服务器级别

换掉免费的Tomcat,使用商用weblogic

聘请系统架构师优化Linux内核

应用级别的解决方案

1:网页HTML 静态化(需要CMS项目支持)

2:图片服务器分离(常用解决方案)

3:缓存(常用解决方案)

4:镜像(下载较多)

采用负载均衡技术(终极解决方案)

以扩展现有网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、

提高网络的灵活性和可用性的技术就是负载均衡(Load Balance)

软件解决办法:1:apache

2:nginx

3: lvs

2:高可用

3:大数据量

2 4 、大量数据量查询[典盟金融信息服务公司]

25、数据库的回滚机制[微科网络科技有限公司]

************MongoDB

MongoDB是一个高性能,开源,无模式的文档型数据库,在许多场景下可用于替代传统的关系型数据库或键/值存储方式

优点:高性能、可扩展、易部署、易使用,存储数据非常方便

************memcached

memcached是一套分布式的高速缓存系统. 缺乏认证以及安全管制

使用目的: 通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

**************redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API. 与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

redis四种数据类型:string,list,set及zset(sorted set)

***********Jquery*******

1.JSON是什么?特点?

json是一种跨平台的数据交互格式,格式简单轻量,无需象xml文件那样解析,因为它本身就是结果

JSON的格式 [上海友驻]

[{name:value,name:value}]

2.xml是什么?说说关于xml解析的4种方式 ?各有什么特点?

xml : 超文本标记语言,用来存放程序配置信息。

解析xml方式 : 1.dom4j 2.sax 3.w3c 4.ext

3.XML和JSON的区别

相同点 : 都是数据交互格式,都易读。

不同点 : json 没有结束标签 相同数据量下json占用字符长度更短 json解析更快 json可以使用数组以及对象

4.你在公司是怎么用jquery的?

答:在项目中是怎么用的是看看你有没有项目经验(根据自己的实际情况来回答)

你用过的选择器啊,复选框啊,表单啊,ajax啊,事件等配置Jquery环境

下载jquery类库在页面引用jquery类库即可

script type=”text/javascript” src=”jquery/jquery-1.7.2.min.js”/>

接下来通过在<script>$(function(){代码});</script>

5.你为什么要使用jquery(jquery好处)?

谈谈jQuery

1.因为jQuery是轻量级的框架,大小不到30kb,它有强大的选择器,

2.出色的DOM操作的封装,有可靠的事件处理机制(jQuery在处理事件绑定的时候相当的可靠),

3.完善的ajax(它的ajax封装的非常的好,不需要考虑复杂浏览器的兼容性和XMLHttpRequest对象的创建和使用的问题。) 出色的浏览器的兼容性。

4.而且支持链式操作,隐式迭代。

5.行为层和结构层的分离,还支持丰富的插件,jquery的文档也非常的丰富。

[模拟面试 +2]

dom封装 跨平台 轻量级

6.你使用jquery遇到过哪些问题,你是怎么解决的?

例 前台拿不到值,JSON 可是出现的错误(多了一个空格等)这编译是不会报错的jquery库与其他库冲突:

1>如果其他库在jquery库之前导入的话

1.我们可以通过jquery.noconflict()将变量的$的控制权过度给其他库

2.自定义快捷键,用一个变量接住jquery.noconflict()

3.通过函数传参

2>如果jquery库在其他库之前导入就直接使用jquery

今天在处理一个数据问题时,发现jQuery.ajax()方法返回的值一直有问题,清除缓存后数据无误,

多次测试后发现返回的值都是之前的值,并且一直未执行url(后台为JAVA,设置断点一直未进入)。在网上查找下,发现是未设置type的原因。

如果没设置jQuery.ajax的type=”Post”,那么ajax就会默认type=”Get”,这就会导致之前数据被缓存起来。加上type=”Post”,问题解决!

7.jquery中的选择器?[文思海辉电话面试]

jQuery中的选择器大致分为:基本选择器,层次选择器,过滤选择器,表单选择器

8.jquery中的选择器 和 css中的选择器有区别吗?

1.jQuery选择器支持CSS里的选择器,

2.jQuery选择器可用来添加样式和添加相应的行为

3.CSS 中的选择器是只能添加相应的样式

9.你觉得jquery中的选择器有什么优势?

简单的写法 $(‘ID’) 来代替 document.getElementById()函数

支持CSS1 到CSS3 选择器

完善的处理机制(就算写错了id也不会报错)

10.你在使用选择器的时候有有没有什么觉得要注意的地方?

1.选择器中含有”.”,”#”,”[” 等特殊字符的时候需要进行转译

2.属性选择器的引号问题

3.选择器中含有空格的注意事项

11.jquery对象和dom对象是怎样转换的?

1.Jquery转DOM对象:jQuery 对象是一个数组对象,可以通过[index]的丰富得到相应的DOM对象还可以通过get[index]去得到相应的DOM对象。

2.DOM对象转jQuery对象:$(DOM对象)

12.你是如何使用jquery中的ajax的?

如果是一些常规的ajax程序的话,使用load(),$.get(),$.post(),就可以搞定了, 一般我会使用的是$.post() 方法。

如果需要设定beforeSend(提交前回调函数),error(失败后处理),success(成功后处理)及complete(请求完成后处理)回调函数等,这个时候我会使用$.ajax()

13.你觉得jquery中的ajax好用吗,为什么?

好用的。

因为jQuery提供了一些日常开发中夙瑶的快捷操作,例 load,ajax,get,post等等,

所以使用jQuery开发ajax将变得极其简单,我们就可以集中精力在业务和用户的体验上,不需要去理会那些繁琐的XMLHttpRequest对象了。

14.jquery中$.get()提交和$.post()提交有区别吗?

a.$.get() 方法使用GET方法来进行异步请求的。

$.post() 方法使用POST方法来进行异步请求的。

b.get请求会将参数跟在URL后进行传递,而POST请求则是作为HTTP消息的实体

内容发送给Web服务器的,这种传递是对用户不可见的。

c.get方式传输的数据大小不能超过2KB 而POST要大的多

d.GET 方式请求的数据会被浏览器缓存起来,因此有安全问题。

15.jquery中的load方法一般怎么用的?

load方法一般在 载入远程HTML 代码并插入到DOM中的时候用

通常用来从Web服务器上获取静态的数据文件。

如果要传递参数的话,可以使用$.get() 或 $.post()

16.在jquery中你是如何去操作样式的?

addClass() 来追加样式

removeClass() 来删除样式

toggle() 来切换样式

17.简单的讲叙一下jquery是怎么处理事件的,你用过哪些事件?

首先去装载文档,在页面加载完毕后,浏览器会通过javascript 为DOM元素添加事件。

18.你使用过jquery中的动画吗,是怎样用的?

使用过。

hide() 和 show() 同时修改多个样式属性。像高度,宽度,不透明度。

fadeIn() 和fadeOut() fadeTo() 只改变不透明度

slideUp() 和 slideDown() slideToggle() 只改变高度

animate() 属于自定义动画的方法.

19.你使用过jquery中的插件吗?

分页插件(jQuery Pagination),验证插件(jQuery formValidator表单验证插件)

20.你一般用什么去提交数据,为什么?

一般我会使用的是$.post() 方法。

如果需要设定beforeSend(提交前回调函数),error(失败后处理),success(成功后处理)及complete(请求完成后处理)回调函数等,这个时候我会使用$.ajax()

21.在jquery中引入css有几种方式?

行内式,内嵌式,导入式,链接式

22.你在jquery中使用过哪些插入节点的方法,它们的区别是什么?

a.append(),appendTo(),prepend(),prependTo(),after(),insertAfter(),before(),insertBefore()

b.大致可以分为 内部追加和外部追加

append() 表式向每个元素内部追加内容。

appendTo() 表示 讲所有的元素追加到指定的元素中。

例$(A)appendTo(B) 是将A追加到B中

23.你使用过包裹节点的方法吗,包裹节点有方法有什么好处?

wrapAll(),wrap(), wrapInner()

需要在文档中插入额外的结构化标记的时候可以使用这些包裹的方法

应为它不会帛画原始文档的语义

24.query中如何来获取或和设置属性?

jQuery中可以用attr()方法来获取和设置元素属性

removeAttr() 方法来删除元素属性

25.如何来设置和获取HTML 和文本的值?

html()方法 类似于innerHTML属性 可以用来读取或者设置某个元素中的HTML内容

注意:html() 可以用于xhtml文档 不能用于xml文档

text() 类似于innerText属性 可以用来读取或设置某个元素中文本内容。

val() 可以用来设置和获取元素的值

26.你jquery中有哪些方法可以遍历节点?

children() 取得匹配元素的子元素集合,只考虑子元素不考虑后代元素

next() 取得匹配元素后面紧邻的同辈元素

prev() 取得匹配元素前面紧邻的同辈元素

siblings() 取得匹配元素前后的所有同辈元素

closest() 取得最近的匹配元素

find() 取得匹配元素中的元素集合 包括子代和后代

27.子元素选择器 和后代选择器元素有什么区别?

子代元素是找子节点下的所有元素,后代元素是找子节点或子节点的子节点中的元素

28.在jquery中可以替换节点吗?

可以 在jQuery中有两者替换节点的方式,replaceWith() 和 replaceAll()

29.你觉得beforeSend方法有什么用?

发送请求前可以修改XMLHttpRequest对象的函数,在beforeSend中

如果返回false 可以取消本次的Ajax请求。XMLHttpRequest对象是唯一的参数

所以在这个方法里可以做验证

30.siblings() 方法 和 $(‘prev~div’)选择器是一样的嘛?

$(‘prev~div’) 只能选择’#prev’元素后面的同辈<div>元素

而siblings()方法与前后的文职无关,只要是同辈节点就都能匹配。

31.你在ajax中使用过JSON吗,你是如何用的?

使用过,在$.getJSON() 方法的时候就是。因为 $.getJSON() 就是用于加载JSON文件的

32.有哪些查询节点的选择器?

first 查询第一个,:last 查询最后一个,:odd查询奇数但是索引从0开始

正则表达式[上海科江电子]

var r1 = /^\d{6}$/;

ajax的原理?[诚泰财产 乐钢供应链管理有限公司]

通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面

ajax的dwr的区别?[汇付科技 上海友驻]

DWR(Direct Web Remoting) , 是一个用于改善web页面与java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含Ajax技术的网站。

可以使javascript直接访问java文件,dwr推送技术。反ajax技术

load和ready页面加载的区别?[汇付科技]

load:jquery

ready:dom

* Jquery原型[德邦物流]

* 定义:函数即对象,原型其实就是函数对象的一个属性。

* 注意:

* 原型是随着函数对象的创建而创建的(原型不能手动创建).

* 原型的调用:函数对象.prototype.

* 作用:

* 利用原型为函数对象增加属性和方法.

* 当函数对象本身的属性或方法与原型的属性或方法同名时:

* 函数对象本身的属性或方法的优先级更高.

* 内建对象具有一个属性:原型

* 利用原型为内建对象增加属性或方法?可以

* 支持:

* 利用这种特性,使得javascript代码更灵活.

* 反对:

* 为老版本扩展的内容,可能出现在下一个版本中.

* 我们站在这里.

* 扩展内容:

* 封装工具类 -> 库 -> 框架

* 建议使用库,反对使用框架。

* 浏览器内核:

* IE浏览器:IE6.0 IE11

* 其他浏览器:webkit(苹果)

* 谷歌浏览器

* 火狐浏览器

* 苹果浏览器

* 众多浏览器:

* 百度浏览器:号称自主内核v5

* 腾讯浏览器:号称自主内核x5

* 遨游浏览器:号称自主内核

* 不同浏览器内核集成的javascript引擎(v6)是不一样.

*******************EasyUI***********

☆☆☆EasyUI的组件?[重点][平安科技 中国电信理想 上海弘昊化工]

datagrid datalist tree treegrid pagination(分页) searchbox(进度条) calendar(日历) form表单

******************bootstrap***************

*******JQuery 插件**************

jquery-vaildate:验证

jquery-contextMenu:右击菜单

jquery-chosen:下拉框

jquery-confrim:弹窗

*******fullcalendar*****************

************node.js****************

***************Servlet**********

☆1.转发与重定向区别:

转发: 重定向:

服务器端跳转; 客户端跳转;

地址栏不改变, 地址栏会改变,

能传递请求, 是新的请求,

不能跳转到其他web工程 能跳转到任意web站点

会发生重复提交的问题 可以避免重复提交

2.session和cookie的区别[瑞友科技]

session cookie

存储位置:服务器 客户端(1、浏览器缓存,2、客户端硬盘)

存储内容:任何类型(无限制) 文本(4k)

两种方式实现(cookie或url重写) 两种类型(内存和硬盘)

时间    默认时间30分钟           setMaxAge(秒)

设置cookid过期:通过document.cookie 获取本网页cookie,获取的cookie是字符串,将其分割取出expire字段,将其时间改成空,或者改成比当前系统时间小的值。

4.Servlet:

1)Servlet是sun公司基于java技术的一种开发动态资源的规范,以接口的形式出现,最终的实现类和服务器有关.运行在服务器端,由web容器管理。

2)Servlet是一个特殊的java类,编写一个serlet实际上就是按照servlet规范编写一个java类,可以接受客户端请求并响应,遵循http协议.

Servlet开发:

1)实现servlet接口+web.xml配置文件

2)继承GenericServlet类+web.xml配置文件

3)继承HttpServlet类+web.xml配置文件

☆5.jsp工作原理?

客户端->*.jsp->*_jsp.java->*_jsp.class->执行->客户端

第二次访问:执行class->客户端

☆6.servlet生命周期?

实例化->初始化(init)->服务(service)->doGet|doPost->销毁(destroy)

a.第一次浏览器访问servlet时,服务器会根据浏览器的路径,在web.xml文件中查找到该servlet的全路径和名称.并反射产生对象

b.调用Init()为servlet做初始化工作(每个servlet只会调用一次init方法)

c.调用doGet或者doPost方法为浏览器响应(通过service方法分配)

d.如果地二次再访问该相同的servlet,直接从服务端servle实例集合中取得对应的对象。

e.同一个servlet实例,在服务器端只有一个

f.在服务器重新部署时,在销毁servlet实例前调用destroy方法.

7.cs/bs和区别?

客户端要求 软件升级和维护 安全性

cs:Client/Server 客户/服务器 无需客户端 零维护和扩展方便 趋势 面向相对固定的用户群,安全性高

bs:Brower/Server 浏览器/服务器 需客户端 界面丰富,维护成本高 安全性低

8.JSP7大内置对象?

输出:out response

作用域:pageContext request session application

其他:config page(this) exception

9.GET和POST的区别?

1.安全性:get安全性非常低,post安全性较高。但是执行效率却比Post方法好

2. get是从服务器上获取数据,post是向服务器传送数据。

3.get是把参数数据队列附加到url,post将表单数据防止在html

10.什么情况下调用doGet()和doPost()?

Jsp页面中的FORM标签里的method属性为get时调用doGet(),为post时调用doPost()。

11.5种jsp标准动作

JSP页面可使用JSP标准动作来调用JavaBean的方法,JSP标准动作在浏览器请求JSP页面时执行

<jsp:useBean />

<jsp:setProperty />

<jsp:getProperty />

<jsp:forward />

<jsp:include />

12.Servlet 跟 JSP 的区别?

Servlet专注于后台业务代码,而Jsp一般都是前台显示

jsp是一个特殊的servlet,由web容器进行翻译和编译

13.在Servlet中,如果客户端禁用cookie,如何使用Session,说说你的解决方案.

①session.setMaxInactiveInterval(0或者-1);

②web.xml配置文件(单位为分钟)

<session-config>

<session-timeout>5</session-timeout>

</session-config>

③在tomcat服务器中设置conf->web.xml

<session-config>

<session-timeout>30</session-timeout>

</session-config>

14.web容器对servlet的处理有什么特点? 两者是如何交互数据的?

15.如何销毁session,请用三种方式实现?

a.session.invalidate()

b.设置session过期时间.session.setMaxInactiveInterval(0或者-1)

c.web.xml配置文件(单位为分钟)

<session-config>

<session-timeout>5</session-timeout>

</session-config>

d.在tomcat服务器中设置conf->web.xml

<session-config>

<session-timeout>30</session-timeout>

</session-config>

16.简述逻辑操作(&,|,^)与条件操作(&&,||)的区别

a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型

b.逻辑操作不会产生短路

17.什么是JSTL? JSTL有哪些标签库?

Jstl是自定义标签库,在JSTL标签中有:

core核心库 fmt格式化库 functions函数库 xml超文本标记语言库 sql结构化查询语言库

18.你常用的J2EE设计模式,谈谈对设计模式的看法

面向对象设计模式解决的是“类与相互通信的对象之间的组织关系”

面向对象设计模式是“好的面向对象设计”,所谓好的就是那些可以满足“应对变化,提高复用的设计”。

**********缓存框架********

1.OSCache

一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。 OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何 java对象都可以缓存。拥有全面的API–OSCache API给你全面的程序来控制所有的OSCache特性。永久缓存–缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,

甚至能让应用重启。支持集群集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期–你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)

2.JSC(Java Caching system)

是一个用分布式的缓存系统,是基于服务器的java应用程序。它是通过提供管理各种动态缓存数据来加速动态web应用。 JCS和其他缓存系统一样,也是一个用于高速读取,低速写入的应用程序。动 态内容和报表系 统能够获得更好的性能。如果一个网站,有重复的网站结构,使用间歇性更新方式的数据库(而不是连续不断的更新数据库),被重复搜索出相同结果的,就能够通过执行缓存方式改

其性能和伸缩性

3.EHCache

EHCache 是一个纯java的在进程中的缓存,它具有以下特性:快速,简单,为Hibernate2.1充当可插入的缓存,最小的依赖性,全面的 文档和测试

4.JCache

JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上

5.ShiftOne

ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架

6.SwarmCache

SwarmCache是一个简单且有效的分布式缓存,它使用IP multicast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。

SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。 .如何

***设计模式*******

Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式),

Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),

Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),

Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),

Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),

Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),

Observer(观察者模式), State(状态模式), Strategy(策略模式),

工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,

通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。

然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例

单例模式

饿汉式

class Singleton {

private static Singleton instance=new Singleton();

private Singleton(){}

static Singleton getInstance() {

return instance; //静态工厂方法

}

}

懒汉式

class Singleton {

private static Singleton instance=null;

private Singleton(){}

static Singleton getInstance() {

if(instance==null)

instance=new Singleton();

return instance;

}

}

***********UML*********

1.UML

标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图

2.工具

Powerdesigner

****************版本控制工具*******

svn :版本控制工具+服务器(是一个开放源代码的版本控制系统)

分支

svn冲突解决的办法?[中国电信理想]

team->与资源库同步->编辑冲突

git

▲Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

▲Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

▲Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持

常用命令

创建文件夹 mkdir 文件夹名

显示当前的目录pwd

g it可 管理的仓库 git init

提交 文件 g it commit –m ‘ 注释

查看 文件是否提交 git status

修改 文件 g it diff 文件名

查看 历史记录 git log

git log –pretty=oneline

回退到上一版本 git reset –hard HEAD^

回退到上n版本 git reset –hard HEAD~ n

查看 版本号 git reflog

回退到 指定版本 git reset –hard HEAD 版本号

删除 文件 r m 文件名

************项目构建工具

maven[什么是Maven? 中国电信理想公司]

项目管理工具

基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具

maven先从本地仓库找,然后到私服找,最后到中央仓库找

修改setting.xml指定本地路径<localRepository…>,默认本地仓库在用户目录->.m2->repository

pom.xml:

groupId:项目名称

artifactId:模块名称

version:版本

自动加入junit依赖

源代码位置:src/main/java

测试代码: src/test/java

如何使用Maven?[中国电信理想公司]

maven命令:

mvn -clean 清理操作,默认清理target文件夹

mvn -clean compile 清理之后运行编译

mvn -clean test 运行清理和测试

mvn -clean install 运行清理和安装,以便其他项目调用

mvn -clean package 运行清理和打包

mvn -clean deploy 运行清理和发布

mvn archetype:generate 构建骨架,Eclipse创建工程直接构建骨架

Maven vs Ant

Maven Ant

标准构建文件 project.xml 和 maven.xml build.xml

特性处理顺序 ${maven.home}/bin/driver.properties 1.通过 -D 命令行选项定义的系统特性

${project.home}/project.properties 2.由 任务装入的特性

${project.home}/build.properties 第一个定义最先被处理

${user.home}/build.properties

构建规则 构建规则更为动态(类似于编程语言) 构建规则或多或少是静态的,除非使用

它们是基于 Jelly 的可执行 XML

******************webService*****

1.webService总结的作用?

Web service是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以交互操作。

Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,

用于开发分布式的互操作的应用程序

2.核心定义:

1.SOAP一个基于XML的可扩展消息信封格式,需同时绑定一个传输用协议。

2.WSDL一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。

3.UDDI一个用来发布和搜索WEB服务的协议,应用程序可借由此协议在设计或运行时找到目标WEB服务。

3. webservice接口[webservice接口]

*************报表工具 JFreeChart

1.什么是JFreeChart?

JFreeChart 是一套免费开放源代码的报表框架,主要是 SourceForge.net 站点上的一个 JAVA 项目。

2.JFreeChart的作用?

JFreeChart 功能强大、灵活易用的 Java 绘图 API,使用它可以生成多

种通用性的报表,包括柱状图、饼图、 曲线图、甘特图等,这些不同式样的图表基本上可以满足目前的要求。

poi jxl

*****************freemarker*****

FreeMarker是一个用Java语言编写的[模板引擎],它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,

它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等

FreeMarker和html的区别:[面试题]

******* web 服务器****************

Aapache tomcat 、Nginx、 Jetty Jboss 、Weblogic、 WebSphere、 Resin、 varnish App Server Portal Server

在高并发处理情况下的负载调优有相关经验者优先考虑,具有分布式系统开发

,具备服务器调优能力

给weblogic指定大小的内存?

在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M

weblogic配置数据源?(面试题)

1. 启动webLogic管理服务器,管理用户登录

2. 选择服务-》数据源->新建->一般数据源

3. 填写数据源名称,JNDI名

4. 选择数据库驱动

5. 事务处理选项

**************Linux**

常用命令?

1.如何查看当前的Linux服务器的运行级别?

‘who -r’ 和 ‘runlevel’

2.如何查看Linux的默认网关?

“route -n” 和 “netstat -nr”

3.如何在Linux上重建初始化内存盘镜像文件?

# mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r)

4.cpio命令是什么?

cpio就是复制入和复制出的意思。cpio可以向一个归档文件(或单个文件)复制文件、列表,还可以从中提取文件

5.patch命令是什么?如何使用?

patch命令就是用来将修改(或补丁)写进文本文件里

# diff -Naur old_file new_file > diff_file

6.aspell有什么用 ?

aspell就是Linux操作系统上的一款交互式拼写检查器

7.查看域SPF记录: linuxtechi@localhost:~$ dig -t TXT google.com

8.识别Linux系统中指定文件(/etc/fstab)的关联包

9. cat /proc/net/bonding/bond0:查看bond0的状态

10./proc文件系统 作用:基于内存的文件系统,维护着关于当前正在运行的内核状态信息

11.# find /usr -size +10M:在/usr目录下找出大小超过10MB的文件

12.# find /home -mtime +120:在/home目录下找出120天之前被修改过的文件

13.# find /var \! -atime -90:在/var目录下找出90天之内未被访问过的文件

14.# find / -name core -exec rm {} \:查找和直接删除文件”core”

15.strings:提取和显示非文本文件中的文本字符串

16.tee 过滤器作用:向多个目标发送输出内容

17.更改登录提示符来显示用户名、本机名和当前工作目录:export PS1 = ”$LOGNAME@hostname:\$PWD

18.ll | awk ‘{print $3,”owns”,$9}’:文件的文件名和它们的拥有者

19.at:安排一个程序在未来的做一次一次性执行

20.lspci:显示你的系统上PCI总线和附加设备的信息

java基础重要(集合 多线程 )

数据库(SQL语句 存储过程 分页 事务 数据库优化)

框架(各个框架的原理和执行流程<struts springmvc> ssh整合 框架的区别<hibernate和Mybatis>)

做能敲碎键盘的程序猿

用战略的眼光观察APP市场

用最快的速度读懂需求,跟项目死磕到底

每天用比机械还快的手指敲击键盘

KO所有跟技术有关的难题

比测试火箭还要谨慎的测试我们的产品

除了热爱键盘,也热爱生活

小编也是java方向的,马上面临实习,这些都是精华呦。大家可以和我讨论java有关的问题,也可以教教我噢,觉得不错的就转给你的朋友们看看啦,小编万分感谢。

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

文章标题:最新JAVA面试宝典,面临实习的我要抓紧背啦

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

关于作者: 智云科技

热门文章

网站地图