自我介绍:
1.简单的背景介绍 (Background)
第一部分,简单介绍相似于「我叫xxx,xxx大学xxx专业研究生在读,本科毕业于xxxx。目前我在xxx组织担任xxx职位,在xxx公司兼任xxx职位……」这样的信息。
2.相关工做经验介绍 (Professional)javascript
我叫XXX,来自XX,就读于XX,专业,毕业于, 编程是一项兴趣爱好,后来就转行进入这行,
平时喜欢接触下各类各样的技术,看下各类教程等 像C#A ,U3D等。
以前在前一个公司担当批处理功能的开发,和Excel方面的交互,今天面试这个岗位是由于对金融或者支付
这方面的工做比较感兴趣,css
0.说明下java的封装,多态,和继承有啥区别。前端
封装:经过访问修饰符来限制对类的属性和方法的访问,java
子类继承父类的特征和行为,使得子类具备父类的各类属性和方法。或子类从父类继承方法,使得子类具备父类相同的行为。
特色:在继承关系中,父类更通用、子类更具体。父类具备更通常的特征和行为,而子类除了具备父类的特征和行为,还具备一些本身特殊的特征和行为。mysql
若是在子类中须要访问父类中定义的同名成员变量或方法,须要用的关键字super
多态就是以一种类型来,表现出多种状态
好比,车下,有宝马,有奇瑞,他们都属于车,定义一个车接口,两种车都实现这个接口
在new出来,均可以用车接收,调用的时候,倒是调用的自己本身的方法。
1.简单说明下java的设计模式。nginx
单例模式:在类自己就经过一个方法给new出来,外部经过这个方法去实例化,
加synchronized会线程安全,但是会影响效率。web
2.left join ,inner join ,right join 的差异,他们抽出的数据是否相同。
inner join 基于链接条件两边都有会抽出。
left join 若是右边没有对应的数据,那么左边会抽出,右边为null
right join若是左边没有对应的数据那么右边会抽出,左边为null面试
3.mybatis如何批量删除和插入。
先在mybatis组装成insert into tablename()value(),()的数据。
提交的时候能够手动提交,每次提交1000个,以避免出现内存不足。
批量删除的画,也能够采用一样的方法,delete from emp where empno in ()要删除的数据。ajax
4.session的生命周期,存放在哪里。redis
Session存储在服务器端,通常为了防止在服务器的内存中(为了高速存取),
Sessinon在用户访问第一次访问服务器时建立,
须要注意只有访问JSP、Servlet等程序时才会建立Session,
只访问HTML、IMAGE等静态资源并不会建立Session,
可调用request.getSession(true)强制生成Session。
session的生命周期分为建立、活动、销毁三个阶段
session的销毁方式:
1.自动注销,invalidate
2.过时,超时,默认时间为30分钟,
3.服务器重启
5.如何解决两个用户同时操做一条数据,如何A 修改商品X为20 元,B同时修改商品X为30元。
能够加一个last_update,来肯定最后的操做时间,可经过触发器去实现。
6.说下spring的好处。
1.方便集成各类优秀框架,如Struts,Hibernate、mybatis均可以兼容
2.AOP编程的支持,方便进行面向切面的编程。
7.在一个方法体传入一个list,在里面进行修改,以后这个list会改变么。为何
集合这个东西跟数组同样,你把它做为实参传过去,实际上并非传的集合对象自己,而是它的地址(或者是引用,能够这么理解),
而后你在方法中操做集合,都是直接做用于集合自己而不是集合的值。
这跟普通的变量不同,普通的变量是值传递,你在方法内部操做一个变量只是在操做值,
原来的变量还在那里不会改变。
8.目前写过最复杂的SQL
with a_tablename as(
select xx as 1 ,ss as 2 where tablename id = 0 union all
select xx as 3 ,ss as 4 where tablename id != 0
)insert into b_tablename (xx,ss)select xx,ss from a_tablename
9.strtus拦截器
拦截器能够作到在已有的业务中插入一块共通的,
一个功能的时候记录一下客户的操做,这样与其在一个个的action分别记录,
直接在拦截器去记录会更加的方便。拦截器,能够设置默认,也能够去设置拦截某些action。
执行后必定要invoke出去,这样才能走到action
10.strtus 过滤器
过滤器实现Filter接口 ,在doFilter中写实现
11.说下重定向问题
重定向能看到页面上的地址的变化。
重定向,实际上是两次request,第一次,客户端request A,
服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE能够看到地址变了,
并且历史的回退按钮也亮了。重定向能够访问本身web应用之外的资源。
12.strtus拦截器 和过滤器的区别
一、拦截器是基于java的反射机制的,而过滤器是基于函数回调 。
二、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 。
三、拦截器只能对action请求起做用,而过滤器则能够对几乎全部的请求 起做用 。
四、拦截器能够访问action上下文、值栈里的对象,而过滤器不能 。
五、在action的生命周期中,拦截器能够屡次被调用,而过滤器只能在容 器初始化时被调用一次
13.Servlet 是什么,简单的说明一下,
Servlet 是最简单的用于进行web开发的工具,经过继承HttpServlet,可以在doget或者dopost的状况下,输出web页面。
生命周期:
Servlet 经过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 经过调用 destroy() 方法终止(结束)
14.mysql性能优化
1.充分使用索引
2.开启缓存 query_cache_type 为 ON 表示已经开启
3.当只要一行数据时使用 LIMIT 1,或者加上order by
4.为搜索字段建索引
5. 千万不要 ORDER BY RAND()
6. 避免 SELECT *
15.递归
public class Main {
public static void main(String[] args) {
fun(1);
}
public static void fun(int n) {
System.out.printf("1-lexe:%d \n", n); //#1
if (n < 3)
fun(n + 1);
System.out.printf("2-lexe:%d \n", n); //#2
}
}
16.ajax如何解决js脚本缓存问题
第一种:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
17.性能分析的命令
1.show indexes 查看表的索引
2.explain 分析表执行计划
3.information_schema 包含的表的数量和mysql的版本和存储引擎有关系。
4.show table status 能够查看表的存储引擎
19.springmvc和Struts2的区别
因为SpringMVC基于方法的拦截,有加载一次单例模式bean注入。
而Struts2是类级别的拦截,每次请求对应实例一个新的Action,须要加载全部的属性值注入,
SpringMVC开发效率和性能高于Struts2。
spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高(固然Struts2也能够经过不一样的目录结构和相关配置作到SpringMVC同样的效果,可是须要xml配置的地方很多)。
SpringMVC能够认为已经100%零配置。
20.掌握Spring mvc架构;
21.Hibernate的优缺点
优势:兼容,和各类数据库的兼容性好
Hibernate功能强大,数据库无关性好,O/R映射能力强,
缺点:沉重,繁杂
22. 了解经常使用的软件工具:MQ,Redis,Memcache,
Redis 是彻底开源免费的,遵照BSD协议,是一个高性能的key-value数据库。
redis缓存,为何要用缓存呢,举个例子,假如系统中有2千万用户信息,用户信息基本固定,一旦录入不多变更,
那么你每次加载全部用户信息时,若是都要请求数据库,数据库编译并执行你的查询语句,这样效率就会低下不少,针对这种信息不常常变更而且数据量
较大的状况,一般作法,就是把他加入缓存,每次取数前先去判断,若是缓存不为空,那么就从缓存取值,若是为空,再去请求数据库,并将数据加入缓存,
这样大大提升系统访问效率
经过该set,get来存取
2三、熟悉经常使用设计模式,有大型分布式、高并发、高负载、高可用性系统设计开发经验;
24.二、熟练掌握Spring、SpringMVC、MyBatis、SpringBoot、Zookeeper、Duboo等经常使用当前流行的技术及框架;
25. Struts2的工做流程
客户端初始化一个指向Servlet容器(例如Tomcat)的请求
这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh Plugin);
接着StrutsPrepareAndExecuteFilter被调用,StrutsPrepareAndExecuteFilter询问ActionMapper来决定这个请求是否须要调用某个Action;
若是ActionMapper决定须要调用某个Action,StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy;
ActionProxy经过ConfigurationManager询问框架的配置文件,找到须要调用的Action类;
ActionProxy建立一个ActionInvocation的实例。
ActionInvocation实例使用命名模式来调用,在调用Action的过程先后,涉及到相关拦截器(Intercepter)的调用。
一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果一般是(但不老是,也多是另外的一个Action链)一个须要被表示的JSP或者FreeMarker的模版。在表示的过程当中可使用Struts2框架中继承的标签。在这个过程当中须要涉及到ActionMapper。
26. 熟悉Struts/Spring/Hibernate等框架,能在开发环境中配置和使用Tomcat/nginx等;
27.Linux经常使用命令大全
cd /home 进入 '/ home' 目录'
pwd 显示工做路径
ls 查看目录中的文件
mkdir dir1 建立一个叫作 'dir1' 的目录'
cp dir/* . 复制一个目录下的全部文件到当前工做目录
28.JavaScript中说明“==”和“===”之间的区别?
“==”仅检查值相等,而“===”是一个更严格的等式断定,若是两个变量的值或类型不一样,则返回false。
29. MySQL锁
MySQL各存储引擎使用了三种类型(级别)的锁定机制:
表级锁定,行级锁定和页级锁定。
乐观锁
乐观锁不是数据库自带的,须要咱们本身去实现。
乐观锁是指操做数据库时(更新操做),想法很乐观,认为此次的操做不会致使冲突,在操做数据时,并不进行任何其余的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。
一般实现是这样的:在表中的数据进行操做时(更新),
先给数据表加一个版本(version)字段,每操做一次,将那条记录的版本号加1。
也就是先查询出那条记录,获取出version字段,若是要对那条记录进行操做(更新),
则先判断此刻version的值是否与刚刚查询出来时的version的值相等,
若是相等,则说明这段期间,没有其余程序对其进行操做,则能够执行更新,
将version字段的值加1;若是更新时发现此刻的version值与刚刚获取出来的version的值不相等,
则说明这段期间已经有其余程序对其进行操做了,则不进行更新操做。
悲观锁
共享锁
排它锁
30.HashMap 和 HashTable的区别
HashMap是非线程安全的,只是用于单线程环境下,多线程环境下能够采用concurrent并发包下的concurrentHashMap。
hashmap 是线程不安全的
HashTable的区别 是线程安全的,。
31.单一索引和联合索引的区别
单一列索引能够出如今where 条件中的任何位置,而联合索引须要按必定的顺序来写.
在多条件查询时,联合索引效率要高.
32.冒泡排序
33.递归
34.整数
22 , 022 , 0x22
35.Tomcat优化
内存优化
配置优化
3、组件优化
36.spring 工做原理及事物机制
内部最核心的就是IOC了,动态注入,让一个对象的建立不用new了,能够自动的生产,
这其实就是利用java里的反射,反射其实就是在运行时动态的去建立、调用对象,Spring就是在运行时,
跟xml Spring的配置文件来动态的建立对象,和调用对象里的方法的
最明显的一个例子就是sessionfactiory配置后,能够直接的调用。不用再去new
AOP(Aspect-Oriented Programming): 面向方面编程
一、 代理的两种方式:
静态代理:
针对每一个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,而后借用JDK反射包中的Proxy类为各类接口动态生成相应的代理类
37.css加载优先级
浏览器缺省 < 外部样式表 < 内部样式表 < 内联样式
38.mybatis工做原理
MyBatis应用程序根据XML配置文件建立SqlSessionFactory,SqlSessionFactory在根据配置,
配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。
SqlSession包含了执行sql所须要的全部方法,能够经过SqlSession实例直接运行映射的sql语句,
完成对数据的增删改查和事务提交等,用完以后关闭SqlSession。
39.servlet 九大内置对象
request,response ,session ,application ,out ,page,config , exception , pageContext
40.ajax工做原理
Ajax的原理简单来讲经过XmlHttpRequest对象来向服务器发异步请求,从服务器得到数据,
而后用javascript来操做DOM而更新页面。这其中最关键的一步就是从服务器得到请求数据。
要清楚这个过程和原理,咱们必须对 XMLHttpRequest有所了解。
缺点:1.即对浏览器后退机制的破坏。 二、安全问题 三、对搜索引擎的支持比较弱。
41.队列
队列是一种特殊的线性表,它只容许在表的前端进行删除操做,而在表的后端进行插入操做。
42.java arraylist 和linklist区别
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)
2.对于随机访问get和set,ArrayList以为优于LinkedList,由于LinkedList要移动指针。
3.对于新增和删除操做add和remove,LinedList比较占优点,由于ArrayList要移动数据。
43.java操做xml用什么
用SAXReader建立一个xml解析器对象
44.spring常见的注解
@Resource
@Autowired
@Service
@Repository
@Service注解,其实作了两件事情:
(1)、声明Zoo.java是一个bean,这点很重要,由于Zoo.java是一个bean,其余的类才可使用@Autowired将Zoo做为一个成员变量自动注入。
(2)、Zoo.java在bean中的id是"zoo",即类名且首字母小写。
@Controller
@Scope 默认是"singleton"即单例,"prototype"表示原型即每次都会new一个新的出来。
@Repository、@Service 和 @Controller。 @Component 是等效的
@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件,当组件很差归类的时候,咱们可使用这个注解进行标注。
45.消息中间件
46.spring 好处:
轻量:Spring 是轻量的,基本的版本大约2MB。
控制反转:Spring经过控制反转实现了松散耦合,对象们给出它们的依赖,而不是建立或查找依赖的对象们。
面向切面的编程(AOP):Spring支持面向切面的编程,而且把应用业务逻辑和系统服务分开。
容器:Spring 包含并管理应用中对象的生命周期和配置。
MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
事务管理:Spring 提供一个持续的事务管理接口,能够扩展到上至本地事务下至全局事务(JTA)。
47.Spring框架中的单例bean是线程安全的吗?
不,Spring框架中的单例bean不是线程安全的。
在 Spring中如何注入一个java集合?
48.Spring提供如下几种集合的配置元素:
<list>类型用于注入一列值,容许有相同的值。
<set> 类型用于注入一组值,不容许有相同的值。
<map> 类型用于注入一组键值对,键和值均可觉得任意类型。
<props>类型用于注入一组键值对,键和值都只能为String类型。
49. Spring支持的事务管理类型
Spring支持两种类型的事务管理:
编程式事务管理:这意味你经过编程的方式管理事务,给你带来极大的灵活性,可是难维护。
声明式事务管理:这意味着你能够将业务代码和事务管理分离,你只需用注解和XML配置来管理事务。
50.ajax 跨域的问题
一、使用jsonp
二、服务器代理
三、在服务端设置response header中Access-Control-Allow-Origin字段。
51.前++ 和后++ 的问题 首先,无论前++ 仍是后++,被+ 的变量都是会变化的,而,他们的区别就是赋值int b = 6;int a = b++; 后加加的话,就是在赋值后,再执行++;这里a=6;b= 7 int c = ++b; 而前加是指在赋值前就加上,这里c=7 ;b=7