您的位置:首页 > 职场人生

Java工程师面试题积累(2.0版)

2016-07-20 09:30 471 查看
目录(?)[-]
如何判断一个数是2的幂
陷阱面试题
Javascript 题目
二进制算法以及思维陷阱题
Java数据范围
Java面试题 如何在一个 interface 中 执行一些操作
MySQL中UUID做主键如何变得有序呢
为什么JSON定义的标准中属性名需要用引号引起来呢像下面的name一样
关于JVM
面试题 Java 中 下面的这种用法有什么问题
关于List的instanceof 请说出123
1 怎么理解Spring
2 Spring 的AOP是使用什么方式实现的
MySQL数据库的隔离界别
Oracle 查询树形结构的关键字
MySQL 可重复读场景
MySQL 的 bin-log 的理解
HTTPTCPUDP所处的层
redismongoDBHBase的适用场景
redis 的数据类型
redis 的 过期时间 有什么用实现原理
Linux 安装Oracle的JDK 配置文件放在何处
性能调优有哪些手段
JVM怎么进行分析
Dubbo
MyBatis 的
项目案例担任角色
HashMap 的实现原理
ConcurrentHashMap 实现原理锁的粒度
写一段程序实现 冒泡排序
Integer 的缓存 127 equals 问题
AtomicXXX 的使用
Lock 的各种实现类型消耗以及适用场景
具体调优案例及分析
JVM 内存分区如何查看各个空间的大小
GC的适用场景 G1 CMS各个内存区的回收算法
线程池
数据库方面SQL优化SQL注入越权索引等
ThreadLocal 原理

上一篇文章位于这里: 面试题积累: http://blog.csdn.net/renfufei/article/details/8754239 因为太旧所以CSDN不让更新.其中 1-11 题是旧题目。

1. 如何判断一个数是2的幂。

个人认为,数字转化为二进制,符号位为0,余下部分有且只有最左边一位是1,其余位都是0,才是2的幂。 原理是 乘二则向左进一位。

2. 陷阱面试题:

在Java中,Throwable是一个接口还是抽象类?

3. Javascript 题目

<!DOCTYPE HTML>
<html>
<head>
<title>下面的代码输出什么,如何修正</title>
<script>
var myname = "xiaoming";
if(!!myage){
myname = "xiaozhang";
}
alert("myname="+myname);
</script>
</head>
<body>
</body>
</html>

4. 二进制算法以及思维陷阱题

现有一千瓶药水,其中九百九十九瓶是完全一样的,

只有一瓶里面是毒药,但是外观上分辨不出来。

毒药如果给小白鼠喝一点,一星期后这只小白鼠会突然死亡,

但之前一点症状也没有。

现需要在一星期内找出哪瓶是毒药,问至少需要几只小白鼠?

5. Java数据范围

在Java中, 有一个数字,比如100亿,可以使用 int 来存储吗?
100亿 * 100亿呢,可以用什么类型来存储?

这样计算, int 类型是32位,4个字节,2的10次方是 1024,大约是1K,2^20 = 1M,约100万, 2^30= 1G,大约是10亿,所以整数只能存大约40亿个数字,正数22E个,所以 100亿可以使用long来存储,但不能使用 int 来存储。 

long 是64位,因为 32位存放不下100亿,所以64位也存放不下 100亿 * 100亿,只能使用特殊的类型啦,比如K神所说的 BigInteger,或者 BigDecimal来存放。

一个测试程序:
public class TestIntLong {
/**
* 请参考 int 存放100亿, long 存放100亿*100亿的情况
*/
public static void main(String[] args) {
int num1 = 10 * 1000 * 1000 * 1000;
long num2 = 10L * 1000 * 1000 * 1000 * 10 * 1000 * 1000 * 1000;
long num3 = 10 * 1000 * 1000 * 1000 * 10 * 1000 * 1000 * 1000L;
long num4 = 10L * 1000L * 1000L * 1000L * 10L * 1000L * 1000L * 1000L;
//
System.out.println("num1="+ num1);//num1=1410065408
System.out.println("num2="+ num2);//num2=7766279631452241920
System.out.println("num3="+ num3);//num3=1569325056000
System.out.println("num4="+ num4);//num4=7766279631452241920
}
}


6. Java面试题: 如何在一个 interface 中 执行一些操作

package com.test.test.java;
/**
* Java面试题: 如何在一个 interface 中 执行一些代码?
*/
public interface TestInvocation {
public static final Runnable RUNNABLE
= new Runnable() {
@Override
public void run() {
System.out.println(
"类似这样,利用类加载机制,当然,也可以是其他类的类型."
);
}
};
}

另外,Java 8里面添加了默认方法,专门拿来干这种需求的.


7. MySQL中UUID做主键如何变得有序呢?

select concat( date_format(current_timestamp, '%Y%m%d%H%i%s'),'-', UUID() );

返回的结果如下所示:
mysql> select concat( date_format(current_timestamp, '%Y%m%d%H%i%s'),'-', UUID() );+----------------------------------------------------------------------+
| concat( date_format(current_timestamp, '%Y%m%d%H%i%s'),'-', UUID() ) |
+----------------------------------------------------------------------+
| 20140705202902-f280257a-043f-11e4-989a-00163e0202ca |
+----------------------------------------------------------------------+
1 row in set (0.00 sec)


8.为什么JSON定义的标准中,属性名需要用引号引起来呢,像下面的name一样?

应该考虑到各种系统,各种关键字以及标识符的组成不同,而且会有Map等情况

9. 关于JVM

有个万(wu)能(lai) 的面试技巧,你可以问求职者,这个背后的思想是什么,你理解他的原理吗,为什么要这样实现,如果让你自己写,多长时间做一个基础版本出来?
GC 有哪几种,
每个JDK版本中有什么区别,
哪几种算法比较好,
适合什么情况,
其回收的思想是什么,
怎么实现的,
优缺点是什么、
你要如何调优。。。


10. 面试题: Java 中, 下面的这种用法有什么问题?

Date nextMonth = new Date(new Date().getTime() + 30*24*60*60*1000);

当然,这种用法是很不好的,加一个月应该使用的是 Calendar 类,Calendar是Java的标准工具类,在 java.util 包下面.
Date today = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(today);
cal.add(Calendar.MONTH, 1); // 加一个月
cal.add(Calendar.DATE, -1); // 减一天
//
Date nextM = cal.getTime();
System.out.println(nextM);

更坑的在这里:
long n = 30*24*60*60*1000;
long nl = 30*24*60*60*1000L;
System.out.println("n="+n);
System.out.println("nl="+nl);

可以参考下面的输出结果:
n=-1702967296
nl=2592000000

提示: int 值可以放下多大的值?


11. 关于List的instanceof ,请说出123

import java.util.ArrayList;
import java.util.List;
/**
*  下面的代码执行(输出)结果是什么?
*/
public class TestInstanceOf {
public static void main(String[] args) {

List<String> listS = new ArrayList<String>();
List<TestInstanceOf> listI = new ArrayList<TestInstanceOf>();
// 下面的代码执行(输出)结果是什么?
if (listS instanceof List<TestInstanceOf>) {
System.out.println("listS instanceof List<TestInstanceOf>="+true);
} else {
System.out.println("listS instanceof List<TestInstanceOf>="+false);
}
}
}

12.1. 怎么理解Spring?

> 容器,工厂,消除直接依赖,多个启动阶段,core,context包的作用等。


12.2. Spring 的AOP是使用什么方式实现的?

> 代理,反射机制,cglib...


13. MySQL数据库的隔离界别

> 4个,默认是可重复读


14. Oracle 查询树形结构的关键字

> connect by prior , 大数据量可能会卡死

15. MySQL 可重复读场景

> 假设100万条数据,开启事务,读取到50万条了,现在另一个连接删除了后50万条,并提交。
>
> 问: 第一个客户端还能继续读取到后面的数据吗? 如何实现的

> redo,undo日志,为第一个连接进行模拟恢复


16. MySQL 的 bin-log 的理解

> 两种格式: 基于语句,基于行


17. HTTP,TCP/UDP所处的层

> 应用层,传输层


18. redis,mongoDB,HBase的适用场景

> redis, 缓存,分布式序列
> mongo, 小文件,图片,对象
> hbase, 写多读少,放日志,或者存储大字段数据

19. redis 的数据类型


20. redis 的 过期时间 有什么用,实现原理

> 数据库数据有变更时,通知缓存失效. 类似会话数据之类的,增加时就设置过期时间
>
> 后台有线程定期进行清理. 每次查询时也进行判断. 底层将 key 与 过期时间(戳)放在一起。


21. Linux 安装Oracle的JDK, 配置文件放在何处

> /etc/profile.d/

22. 性能调优有哪些手段

23. JVM怎么进行分析

24. Dubbo

> RPC, 注册中心,容灾机制

25. MyBatis 的 #,$

26. 项目案例,担任角色


27. HashMap 的实现原理

> hash, bucket/数组,链表


28. ConcurrentHashMap 实现原理,锁的粒度

> 每个bucket就是一个锁

29. 写一段程序,实现 冒泡排序

> 说原理不行,必须手写


30. Integer 的缓存, 127, ==, equals 问题


31. AtomicXXX 的使用


32. Lock 的各种实现,类型,消耗,以及适用场景

33. 具体调优案例及分析


34. JVM 内存分区,如何查看各个空间的大小


35. GC的适用场景, G1, CMS,各个内存区的回收算法

36. 线程池

> 异步任务,分类,submit() 与 excutive() 的区别: 有无返回值


37. 数据库方面(SQL优化、SQL注入、越权、索引等)、


38. ThreadLocal 原理

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: