公司面试问题总结

面试问题汇总

1. 中科柏诚科技股份有限公司

ssh,设计模式,业务逻辑,技术点,开发流程,表怎么设计的,有多少表,sql优化会吗,怎么做的,前端会多少,会什么,具体说说,你印象最深的模块,你印象最深的模块开发是遇到的问题,怎么解决的,集群的搭建

 

2. 优锘科技&文思海辉

前端用的js有什么

开发的时候前端都用了什么

前端都会什么东西

3. 文思海辉

3.1. MybatisHibernate的区别?

Hibernate

    Hibernate是建立在若干POJO通过xml映射文件(或注解)提供的规则映射到数据库表上的。我们可以通过POJO直接操作数据库的数据,他提供的是一种全表映射的模型。相对而言,HibernateJDBC的封装程度还是比较高的,我们已经不需要写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是半自动的框架。之所以称它为半自动,是因为它需要手工匹配提供POJOsql和映射关系,而全表映射的Hibernate只需要提供pojo和映射关系即可。

   Mybatis需要提供的映射文件包含了一下三个部分:sql,映射规则,pojo。在Mybatis里面你需要自己编写sql,虽然比Hibernate配置多,但是Mybatis可以配置动态sql,解决了hibernate表名根据时间变化,不同条件下列不一样的问题,同时你也可以对sql进行优化,通过配置决定你的sql映射规则,也能支持存储过程,所以对于一些复杂和需要优化性能的sql查询它就更加方便。Mybatis几乎可以做到jdbc所有能做到的事情。

 

什么时候使用HibernateMybatis

    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层四层。

Spring是一个开源框架,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,还能更好的让其他框架整合。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小(低耦合高内聚)Spring就解决了这一点。(面向对象三大特性五大原则 + 低耦合高内聚)

SpringMVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据、业务与展现进行分离。

MyBatis 是一个基于Java的持久层框架

SSM框架浅谈

 

3.3. CSS样式会修改吗?

Jquerycss方法进行修改

$("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. StringBufferString的区别

Ø StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。

Ø 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。

Ø StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的。

Ø 但是有一个最显著的区别在于,对于StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。

Ø 另外由于StringBuffer是线程安全的,所以在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。

 

4.3. StringBufferStringBuilder的区别,及实现原理

区别

Ø 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,用来在运行时动态地载入其它类

系统默认的contextClassLoadersystemClassLoader,所以一般而言java程序在执行时可以使用JVM自带的类、$JAVA_HOME/jre/lib/ext/中的类和$CLASSPATH/中的类

可以使用Thread.currentThread().setContextClassLoader(...);更改当前线程的contextClassLoader,来改变其载入类的行为

ClassLoader被组织成树形,一般的工作原理是:

1) 线程需要用到某个类,于是contextClassLoader被请求来载入该类

2) contextClassLoader请求它的父ClassLoader来完成该载入请求

3) 如果父ClassLoader无法载入类,则contextClassLoader试图自己来载入

Java中一共有四个类加载器,之所以叫类加载器,是程序要用到某个类的时候,要用类加载器载入内存。

这四个类加载器分别为:Bootstrap ClassLoaderExtension ClassLoaderAppClassLoader

URLClassLoader,他们的作用其实从名字就可以大概推测出来了。其中AppClassLoader在很多地方被叫做System ClassLoader

Bootstrap ClassLoadr是在JVM开始运行的时候加载java的核心类,是用C++编写的,它用来加载核心类库

ClassLoader工作原理

 

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名雇员OracleMySQL的实现

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. ArrayListLinkedListHashMap的存储性能和特点。

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的核心理念是什么。

iocaop(动态代理)

4.15. 谈一下自己最熟悉的web框架。

FreemarkerSpringSpringMVC

 

面试:

4.16. Redis有什么缺陷,Redis最近出现了一个漏洞你知道吗?

1511月初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. 然后介绍自己负责的模块,简单说一下SpringMyBatisSQL片段

 

4.18. Spring如何实现多例模式JavaBean或者是xml配置

 

4.19. 你们使用Zookeeper主要做什么。

4.20. 项目中有用到负载均衡吗,怎么实现的。

4.21. 公司用到了多少个tomcat服务器。

4.22. 公司用的是什么数据库,有几台。

4.23. 如何在url中获取参数,例如id/5

5. 北京国能智研信息科技有限公司

自我介绍,项目介绍,模块介绍。

是否用过Oracle

MySQL的行转列查询。

之前的公司一共有多少人。

6. 北京华宇信息技术有限公司

项目的开发流程

项目的描述

详细的介绍一下负责的模块

DubboZookeeperActiveMQ的应用场景

简单说一下Redis

7. 嘉实基金&和信康

aop的底层设计模式

Spring的底层原理

SQL漏洞及防SQL注入

获取oracle的当前时间

事物的原理

iso8859-1utf-8

solr中把数据添加到索引库

jvm的工作原理

手机号的正则表达式

css的样式

8. 和信康

sql优化

支付回调函数方面

aop用到了哪些场景里(详细说出)

rabbitMQ

zookeeper的底层原理

redis提问好多好多

9. 阿尔山金融有限公司

抽象类和接口有什么区别?

ListSetMap三个接口,存取元素时各有什么特点?

Switch是否能作用在byte上,是否能作用在long上?

try{}里面有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,在return前还是return后?

Intinteger有什么区别?

&&&的区别?

Char型变量中能不能存储一个中文汉字?为什么?

如何对一个字符串str进行”GBK”编码?如何对一个字节数组b[]进行”GBK”解码?

一个.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?

垃圾回收的优点和原理。

线程同步和一步有什么异同,在什么情况下分别使用它们?举例说明。

编程题:

给定数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

10. 微科互动

http协议的执行流程

HibernateMybatis有什么区别

不等于的sql怎么写,做过哪些sql优化

页面静态化是怎么实现的?

httpsocket有什么区别?

B/SC/S有什么区别?

Tcp协议的底层原理。

谈谈对JSAngularJs的理解。

谈谈对SpringBootSpringCloud的理解。

11. 云漾科技

HashMap的底层原理

JVM的底层的原理

DubboZookeeperActiveMQ的底层原理

多线程了解多少

12. 上海至尊电子商务有限公司

SOA架构是怎么采用同步锁和多线程

必须会前端,只要1个后台开发

主要做安卓

13. 华开领航科技有限责任公司&展鸿科技有限公司

口述SQL语句

面向对象的底层原理

写单例模式的代码

单例模式的应用场景

14. 北京虹信万达科技有限公司

1.直入主题:学校是哪个,

学的专业是什么,

在学校学过UML吗?

什么是抽象?

为什么要抽象?

简单设计模式有哪些,

说一下工厂模式的创建流程?

15. 北京科汇坤泰科技有限责任公司

问项目

jquery的方法

linux的操作命令

16. 北京舒望网络科技有限公司

redisdubbozookeeper的运行原理

${}&{}的区别

17. 半月谈

dubbo运行原理

设计模式

redis的使用

微信支付接口

支付宝支付接口




查看原文:http://www.coder306.cn/?p=161
posted @ 2018-03-14 15:25  两粒  阅读(181)  评论(0编辑  收藏  举报