面试
赢时胜
面试题
- 自我介绍,项目介绍
- 数据结构–红黑树
- 红黑树是一种特殊的二叉查找树
- 红黑树的每一个节点要么是红色要么是黑色
- 红黑树的根节点一定是黑色
- 红黑树中一个红色节点的两个子节点一定是黑色(红色不能连续)
- redis中服务器集群其中一台挂了怎么办
- 项目中的技术
- 常用的设计模式,单例,代理
- sql调优
- 多线程线程池
- SpringCloud
三德信息
面试题
- short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
short s1 = 1; s1 = s1 + 1;有错,在进行加算的时候会将short转成int,所以结果应该是int类型的,需要强转成short;
short s1 = 1; s1 += 1;没有错,+=会自动强转; - 写一个9乘9乘法表
for(int row = 1; row <=9 ; row ++) {
for (int col = 1; col <= row ; col ++) {
System.out.print(col + "*" + row + "=" + col * row + " ");
}
System.out.println("");
}
- 一个整数,大于0,不用循环和本地变量,按照 n, 2n, 4n, 8n 的顺序递增,当值大于5000 时,把值按照指定顺序输出来。
int temp = n*i;
System.out.println(temp);
if (temp <= 5000) {
recursive(temp, i*2);
}
System.out.println(temp);
- 下面代码的输出结果是多少?
// 三德面试题
String str1="hello";
String str2="he"+ new String("llo");
System.out.println(str1==str2);
false
- 下面代码的输出结果是多少?
// 三德信息面试题,三德信息自己都不懂
Thread th = new Thread(new Runnable() {
public void run() {
System.out.println("123");
}
});
th.run();
System.out.println("456");
123456
- 写一条sql从一张表里查询出所有课程均大于80的学生姓名
1.逆向思维:先查询课程小于80的学生姓名,然后再用not in或者not exists找到不在小于80的结果的学生
select a.name from students a where a.name not in (select b.name from students b where b.score < 80)
select a.name from students a where not exists(select 1 from students b where b.score < 80)
2.使用Having函数
select a.name from students a group by a.name having MIN(a.score) > 80 - 假设A表和B表都有key和value字段,如果B表的的key在A表中存在,那么将B表的value更新成A表的value
update B b set b.value=(select max(a.value) from A a where b.key=a.key) where exists(select 1 from A c where b.key=c.key) - select userid,username,count(postid) from user group by userid order by userid这条sql语句主要的功能,有哪些问题?
拓尔思
面试题
- final关键字修饰的对象是引用不能变,还是引用的对象不能变?
- static方法里面能够调用非static的方法吗?
- abstractclass和interface的区别?
- 举一个内存泄漏的例子?
- 下面代码的输出结果?
public class SubBase extends Base {
public static void main(String[] args) {
new SubBase();
}
public SubBase() {
tellName();
printName();
}
public void printName() {
System.out.println("subBase-printName()");
}
public void tellName() {
System.out.println("subBase-tellName()");
}
}
public class Base {
public Base() {
tellName();
printName();
}
public void printName() {
System.out.println("Base-printName()");
}
public void tellName() {
System.out.println("Base-tellName()");
}
}
- 下面代码有问题吗?
Map<String, String> map = new HashMap<String,String>();
map.put("a",2);
map.put("b",3);
System.out.println(map.get("c").trim());
西南凯亚
- MySQL索引的种类
普通索引index,唯一索引unique,主键索引primary - 信号量CountDownLatch和CyclicBarrier的区别
CountDownLatch是使一个线程阻塞,CyclicBarrier是使多个线程阻塞 - 重写equals()方法需要重写hashCode()吗
需要,equals和hashcode的关系是:- 如果两个对象相等(即用equals比较返回true),那么他们的hashCode值一定相等;
- 如果两个对象的hashCode相等,他们并不一定相同(即用equals比较返回false)
- 单向链表的反转
- 如何求一个集合的交集
- 引用的类型
- 强引用(StrongReference):普通的引用做法,如:String str = “hello”;只要引用存在就不会被回收,除非手动置为null,或者超出范围,gc才会回收
- 软引用(SoftReference):当JVM虚拟机内存不足时,会回收软引用对象。
A obj = new A();
SoftReference sr = new SoftReference(obj); - 弱引用(WeakReference):
- 虚引用(PhantomRefrence):
强 > 软 > 弱 > 虚.对于对象是属于哪种可及的对象
- 单例和静态类的区别
- 单例可以被继承,而静态类一般不被继承
- 单例可以实现自某接口,可以继承自某类,静态类也可以继承自某类,但是就没法使用父类里面的protect成员了
盈透
- 什么是序列化?如何实现序列化,序列化的作用
将对象转换为字节序列的过程称为序列化,将字节序列转换为对象的过程称为反序列化。当需要将一个对象存入数据库或者通过网络传输的时候需要进行序列化。实现Serializable接口即可实现序列化,并且给 serialVersionUID赋值
//序列化ID,保证序列化的版本一致
private static final long serialVersionUID = 1L;
- java存在内存泄漏吗?举个例子?
存在内存泄漏,内存泄漏是指程序申请的内存空间,在使用完毕后未释放,一直占据内存单元。
例子:- 静态集合类
- 集合里的对象属性值被改变
- 监听器
- 各种连接
- 外部模块的引用
- 单例模式:在单例中持有外部对象的引用,因为单例在程序中一直存在就会一直引用着外部对象,所以单例中的外部对象引用对应的外部对象不能被GC,就会造成泄漏
// 1.集合里的对象属性值被改变
public static void main(String[] args)
{
Set<Student> set = new HashSet<Student>();
Student s1 = new Student("Jack");
Student s2 = new Student("Mary");
Student s3 = new Student("Eason");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());//3
s2.setName("Jackson"); //修改属性,此时s2元素对应的hashcode值发生改变
set.remove(s2); // remove不掉,造成内存泄漏
set.add(s2); // 添加成功
System.out.println(set.size());//4
}
// 2.静态集合类
class StaticTest
{
private static Vector v = new Vector(10);
public void init()
{
for (int i = 1; i < 100; i++)
{
Object object = new Object();
v.add(object);
object = null;//集合中对象被置为null,但是集合还引用这对象,所以jvm不能进行GC
}
}
}
- springmvc的核心是啥,请求的流程怎么处理,控制反转怎么实现 ?
核心是控制反转(IOC)和面向切面(AOP)。
请求处理流程:
1.用户请求发给DispatcherServlet,
2.DispatcherServlet调用HandlerMaping得到找到处理请求的Controller
3.DispatcherServlet将请求转发给到Controller。
4.Controller调用业务逻辑处理后,返回ModelAndView,然后返回给DispatcherServlet
5.DispatcherServlet会依据ViewResolver的解析调用对应的视图对象(比如jsp)来生成相应的页面。 - 写一个伪代码实现冒泡排序
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
- 除了排好的,其余的重复1和2
- 连接池的原理
连接池的基本原理是,先初始化一定的数据库连接对象,并且把这些连接保存在连接池中。当程序需要访问数据库的时候,从连接池中取出一个连接,数据库操作结束后,再把这个用完的连接重新放回连接池。这样做的好处是不需要频繁创建和关闭连接。 - super和this的区别
- this表示当前类的对象,可以调用属性,方法。super表示当前类的最近的父类的对象,可以调用方法,属性。
- super(参数)调用父类的一个构造方法,应该为构造函数中的第一条语句。this(参数)用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。
- 调用super()必须写在子类构造方法的第一行,每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
- super()和this()均需放在构造方法内第一行。
- this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
- this是一个指向本对象的指针, 然而super是一个Java关键字。
- 深拷贝和浅拷贝的区别
使用Object类的clone()方法进行拷贝,Object的clone方法,必须要实现Cloneable
Java克隆是为了得到一个 完全一致的对象。- 浅拷贝:仅仅复制所拷贝的对象,而不复制它所引用的对象。
- 深拷贝:吧复制的对象所引用的对象都要复制一遍。
如住
几米
- 事务的4个特性:
ACID:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )- 原子性:事务中所有操作要么都成功,要么都失败。
- 一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
- 隔离性:一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性:是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作
- Spring中AOP的几要素及关联:
- 切面(Aspect):通常是一个类,里面可以定义切入点和通知
- 连接点(JointPoint):程序执行过程中明确的点,一般是方法的调用
- 切入点(Pointcut):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around
- 通知(Advice):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
- Spring中@autowire和@resource的区别
- @Autowired默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false。
- @Resource默认按名称装配,当找不到与名称匹配的bean时才按照类型进行装配。名称可以通过name属性指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,当注解写在setter方法上时,默认取属性名进行装配。
// @Autowired + @Qualifier = @Resource
@Autowired(required = false) @Qualifier("example")
private Example example;
@Resource(name = "example")
private Example example;
- Redis各数据类型的命令:
数据类型 | 命令 |
---|---|
String | |
List | |
Set | |
SortedSet | |
Hash |
- activeMQ:
- Mybatis中#{}和${}的区别:
- MySQL中in额exists的区别:
- dubbo和SpringCloud:
- Spring中有哪些工厂类:
BeanFactory