公司面试问题总结
面试问题汇总
1. 中科柏诚科技股份有限公司
ssh,设计模式,业务逻辑,技术点,开发流程,表怎么设计的,有多少表,sql优化会吗,怎么做的,前端会多少,会什么,具体说说,你印象最深的模块,你印象最深的模块开发是遇到的问题,怎么解决的,集群的搭建
2. 优锘科技&文思海辉
前端用的js有什么
开发的时候前端都用了什么
前端都会什么东西
3. 文思海辉
3.1. Mybatis和Hibernate的区别?
Hibernate:
Hibernate是建立在若干POJO通过xml映射文件(或注解)提供的规则映射到数据库表上的。我们可以通过POJO直接操作数据库的数据,他提供的是一种全表映射的模型。相对而言,Hibernate对JDBC的封装程度还是比较高的,我们已经不需要写SQL,只要使用HQL语言就可以了。
使用Hibernate进行编程有以下好处:
1,消除了代码的映射规则,它全部分离到了xml或者注解里面去配置。
2,无需在管理数据库连接,它也配置到xml里面了。
3,一个会话中不需要操作多个对象,只需要操作Session对象。
4,关闭资源只需要关闭一个Session便可。
这就是Hibernate的优势,在配置了映射文件和数据库连接文件后,Hibernate就可以通过Session操作,非常容易,消除了jdbc带来的大量代码,大大提高了编程的简易性和可读性。Hibernate还提供了级联,缓存,映射,一对多等功能。Hibernate是全表映射,通过HQL去操作pojo进而操作数据库的数据。
Hibernate的缺点:
1,全表映射带来的不便,比如更新时需要发送所有的字段。
2,无法根据不同的条件组装不同的SQL。
3,对多表关联和复杂的sql查询支持较差,需要自己写sql,返回后,需要自己将数据封装为pojo。
4,不能有效的支持存储过程。
5,虽然有HQL,但是性能较差,大型互联网系统往往需要优化sql,而hibernate做不到。
Mybatis:
为了解决Hibernate的不足,Mybatis出现了,Mybatis是半自动的框架。之所以称它为半自动,是因为它需要手工匹配提供POJO,sql和映射关系,而全表映射的Hibernate只需要提供pojo和映射关系即可。
Mybatis需要提供的映射文件包含了一下三个部分:sql,映射规则,pojo。在Mybatis里面你需要自己编写sql,虽然比Hibernate配置多,但是Mybatis可以配置动态sql,解决了hibernate表名根据时间变化,不同条件下列不一样的问题,同时你也可以对sql进行优化,通过配置决定你的sql映射规则,也能支持存储过程,所以对于一些复杂和需要优化性能的sql查询它就更加方便。Mybatis几乎可以做到jdbc所有能做到的事情。
什么时候使用Hibernate,Mybatis
Hibernate作为留下的Java orm框架,它确实编程简易,需要我们提供映射的规则,完全可以通过IDE生成,同时无需编写sql确实开发效率优于Mybatis。此外Hibernate还提供了缓存,日志,级联等强大的功能,但是Hibernate的缺陷也是十分明显,多表关联复杂sql,数据系统权限限制,根据条件变化的sql,存储过程等场景使用Hibernate十分不方便,而性能又难以通过sql优化,所以注定了Hibernate只适用于在场景不太复杂,要求性能不太苛刻的时候使用。
如果你需要一个灵活的,可以动态生成映射关系的框架,那么Mybatis确实是一个最好的选择。它几乎可以替代jdbc,拥有动态列,动态表名,存储过程支持,同时提供了简易的缓存,日志,级联。但是它的缺陷是需要你提供映射规则和sql,所以开发工作量比hibernate要大些。
3.2. 对SSM框架的理解,为什么要用这个,有什么优势?
SpringMVC + Spring + Mybatis,是标准的MVC设计模式,将整个系统划分为显示层,Controller层,Service层,DAO层四层。
v Spring是一个开源框架,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,还能更好的让其他框架整合。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小(低耦合高内聚),Spring就解决了这一点。(面向对象三大特性五大原则 + 低耦合高内聚)
v SpringMVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。
v MyBatis 是一个基于Java的持久层框架
3.3. CSS样式会修改吗?
Jquery的css方法进行修改
$("p").css("background-color","yellow");
jQuery addClass() 方法
$("div").addClass("important");
3.4. 常用的设计模式有哪些?
单例模式、工厂模式、修饰者模式等。更多设计模式(菜鸟教程)
4. 海博智讯&北京国能智研信息科技有限公司
Java基础:
4.1. StringBuffer的实现方式。如何实现扩充。
StringBuffer初始化及扩容机制
Ø StringBuffer()的初始容量可以容纳16个字符,当该对象的实体存放的字符的长度大于16时,实体容量就自动增加。StringBuffer对象可以通过length()方法获取实体中存放的字符序列长度,通过capacity()方法来获取当前实体的实际容量。
Ø StringBuffer(int size)可以指定分配给该对象的实体的初始容量参数为参数size指定的字符个数。当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量就自动的增加。以便存放所增加的字符。
Ø StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列长度大于size个字符时,实体的容量自动的增加,以便存放所增加的字符。
4.2. StringBuffer与String的区别
Ø StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。
Ø 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
Ø 在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。
Ø 但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
Ø 另外由于StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。
4.3. StringBuffer与StringBuilder的区别,及实现原理
区别
Ø StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
Ø 在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低
实现原理
StringBuffer初始化及扩容机制
Ø StringBuffer()的初始容量可以容纳16个字符,当该对象的实体存放的字符的长度大于16时,实体容量就自动增加。StringBuffer对象可以通过length()方法获取实体中存放的字符序列长度,通过capacity()方法来获取当前实体的实际容量。
Ø StringBuffer(int size)可以指定分配给该对象的实体的初始容量参数为参数size指定的字符个数。当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量就自动的增加。以便存放所增加的字符。
Ø StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列长度大于size个字符时,实体的容量自动的增加,以便存放所增加的字符。
4.4. ClassLoader的功能和工作模式。
Classloader 类加载器,用来加载Java类到 Java 虚拟机中的一种加载器。
每个运行中的线程都有一个成员contextClassLoader,用来在运行时动态地载入其它类
系统默认的contextClassLoader是systemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类
可以使用Thread.currentThread().setContextClassLoader(...);更改当前线程的contextClassLoader,来改变其载入类的行为
ClassLoader被组织成树形,一般的工作原理是:
1) 线程需要用到某个类,于是contextClassLoader被请求来载入该类
2) contextClassLoader请求它的父ClassLoader来完成该载入请求
3) 如果父ClassLoader无法载入类,则contextClassLoader试图自己来载入
Java中一共有四个类加载器,之所以叫类加载器,是程序要用到某个类的时候,要用类加载器载入内存。
这四个类加载器分别为:Bootstrap ClassLoader、Extension ClassLoader、AppClassLoader
和URLClassLoader,他们的作用其实从名字就可以大概推测出来了。其中AppClassLoader在很多地方被叫做System ClassLoader
Bootstrap ClassLoadr是在JVM开始运行的时候加载java的核心类,是用C++编写的,它用来加载核心类库
4.5. ==和equals的区别。
Ø ==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址
Ø equals()方法存在于Object类中,因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值
4.6. 什么是线程安全?举例说明一个线程不安全的例子。
Ø 线程安全 就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
Ø 线程不安全 就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
String线程不安全
4.7. 说出数据连接池的工作机制,解决什么问题。
数据库连接和关闭时非常耗时的过程,数据库连接池解决,数据库连接操作后,不关闭连接,而是暂时存放起来,当别人使用时,把这个连接给他们使用。
原理:
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
4.8. 一个字符串”java Java JAVa JaVa lloveJAVA you hateJava afasdfasdf”把其中奇数位java(大小写不敏感)替换成java,偶数位替换成JAVA
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java Java JAVaJaVaIloveJAVA you hateJavaafasdfasdf");
StringBufferbuf = new StringBuffer();
int i=0;
while(m.find()) {
i++;
if(i%2 == 0) {
m.appendReplacement(buf, "java");
} else {
m.appendReplacement(buf, "JAVA");
}
}
m.appendTail(buf);
p(buf);
}
}
数据库:
4.9. 经常使用的数据库的优化方法。
索引,缓存,sql优化,分表等
4.10. 薪水最高的第10到第20名雇员Oracle和MySQL的实现
MySQL: selectename, sal from emp order by saldesc LIMIT 10,10
Oracle: selectename, sal
from (select ename, sal, rownum r
from (select ename, sal from emp order by saldesc) ) where r >= 10 and r <= 20
算法:
4.11. ArrayList、LinkedList、HashMap的存储性能和特点。
ArrayList(查询性能高,插入删除性能低)LinkedList(查询性能低,插入删除性能高)
HashMap(性能介于两者之间),存储性能和特点。
4.12. 用任意方法对int类型的数组进行排序(Collections.Sort(ArrayList))。
public class NumSort {
public static void main(String[] args) {
int[] a = new int[args.length];
for (int i = 0; i < args.length; i++) {
a[i] = Integer.parseInt(args[i]);
}
print(a);
selectionSort(a);
print(a);
}
private static void selectionSort(int[] a) {
int k, temp;
for (int i = 0; i < a.length; i++) {
k = i;
for (int j = k + 1; j < a.length; j++) {
if (a[j] < a[k]) {
k = j;
}
}
if (k != i) {
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
private static void print(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + "");
}
System.out.println();
}
}
架构:
4.13. 描述MVC的设计思想。
控制器Controller- 负责转发请求,对请求进行处理。 视图View - 界面设计人员进行图形界面设计。
模型Model - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计
4.14. Spring的核心理念是什么。
ioc,aop(动态代理)
4.15. 谈一下自己最熟悉的web框架。
Freemarker、Spring、SpringMVC
面试:
4.16. Redis有什么缺陷,Redis最近出现了一个漏洞你知道吗?
15年11月初Redis未授权访问漏洞
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。
修复建议
ü 禁止一些高危命令
修改 redis.conf 文件,添加
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
来禁用远程修改 DB 文件地址
ü 以低权限运行 Redis 服务
为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
ü 为 Redis 添加密码验证
修改 redis.conf 文件,添加
requirepass mypassword
ü 禁止外网访问 Redis
修改 redis.conf 文件,添加或修改
bind 127.0.0.1
使得 Redis 服务只在当前主机可用
4.17. 然后介绍自己负责的模块,简单说一下Spring,MyBatis的SQL片段
4.18. Spring如何实现多例模式JavaBean或者是xml配置
4.19. 你们使用Zookeeper主要做什么。
4.20. 项目中有用到负载均衡吗,怎么实现的。
4.21. 公司用到了多少个tomcat服务器。
4.22. 公司用的是什么数据库,有几台。
4.23. 如何在url中获取参数,例如id/5
5. 北京国能智研信息科技有限公司
自我介绍,项目介绍,模块介绍。
是否用过Oracle。
MySQL的行转列查询。
之前的公司一共有多少人。
6. 北京华宇信息技术有限公司
项目的开发流程
项目的描述
详细的介绍一下负责的模块
Dubbo、Zookeeper和ActiveMQ的应用场景
简单说一下Redis
7. 嘉实基金&和信康
aop的底层设计模式
Spring的底层原理
SQL漏洞及防SQL注入
获取oracle的当前时间
事物的原理
iso8859-1转utf-8
solr中把数据添加到索引库
jvm的工作原理
手机号的正则表达式
css的样式
8. 和信康
sql优化
支付回调函数方面
aop用到了哪些场景里(详细说出)
rabbitMQ
zookeeper的底层原理
redis提问好多好多
9. 阿尔山金融有限公司
抽象类和接口有什么区别?
List、Set、Map三个接口,存取元素时各有什么特点?
Switch是否能作用在byte上,是否能作用在long上?
try{}里面有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,在return前还是return后?
Int和integer有什么区别?
&和&&的区别?
Char型变量中能不能存储一个中文汉字?为什么?
如何对一个字符串str进行”GBK”编码?如何对一个字节数组b[]进行”GBK”解码?
一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
垃圾回收的优点和原理。
线程同步和一步有什么异同,在什么情况下分别使用它们?举例说明。
编程题:
给定数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
10. 微科互动
http协议的执行流程
Hibernate和Mybatis有什么区别
不等于的sql怎么写,做过哪些sql优化
页面静态化是怎么实现的?
http和socket有什么区别?
B/S和C/S有什么区别?
Tcp协议的底层原理。
谈谈对JS和AngularJs的理解。
谈谈对SpringBoot和SpringCloud的理解。
11. 云漾科技
HashMap的底层原理
JVM的底层的原理
Dubbo、Zookeeper、ActiveMQ的底层原理
多线程了解多少
12. 上海至尊电子商务有限公司
SOA架构是怎么采用同步锁和多线程
必须会前端,只要1个后台开发
主要做安卓
13. 华开领航科技有限责任公司&展鸿科技有限公司
口述SQL语句
面向对象的底层原理
写单例模式的代码
单例模式的应用场景
14. 北京虹信万达科技有限公司
1.直入主题:学校是哪个,
学的专业是什么,
在学校学过UML吗?
什么是抽象?
为什么要抽象?
简单设计模式有哪些,
说一下工厂模式的创建流程?
15. 北京科汇坤泰科技有限责任公司
问项目
jquery的方法
linux的操作命令
16. 北京舒望网络科技有限公司
redis、dubbo、zookeeper的运行原理
${}和&{}的区别
17. 半月谈
dubbo运行原理
设计模式
redis的使用
微信支付接口
支付宝支付接口
查看原文:http://www.coder306.cn/?p=161