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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 上一篇文章位于这里: 面试题积累: http://blog.csdn.net/renfufei/article/details/8754239因为太旧所以CSDN不让更新.其中 1-11 题是旧题目。

上一篇文章位于这里: 面试题积累: 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 原理

2016年3月29日更新

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
2月前
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
367 83
|
1天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
19 4
|
25天前
|
存储 安全 算法
Java面试题之Java集合面试题 50道(带答案)
这篇文章提供了50道Java集合框架的面试题及其答案,涵盖了集合的基础知识、底层数据结构、不同集合类的特点和用法,以及一些高级主题如并发集合的使用。
72 1
Java面试题之Java集合面试题 50道(带答案)
|
14天前
|
存储 Java 程序员
Java面试加分点!一文读懂HashMap底层实现与扩容机制
本文详细解析了Java中经典的HashMap数据结构,包括其底层实现、扩容机制、put和查找过程、哈希函数以及JDK 1.7与1.8的差异。通过数组、链表和红黑树的组合,HashMap实现了高效的键值对存储与检索。文章还介绍了HashMap在不同版本中的优化,帮助读者更好地理解和应用这一重要工具。
33 5
|
13天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
15 1
|
22天前
|
Java 程序员
Java 面试高频考点:static 和 final 深度剖析
本文介绍了 Java 中的 `static` 和 `final` 关键字。`static` 修饰的属性和方法属于类而非对象,所有实例共享;`final` 用于变量、方法和类,确保其不可修改或继承。两者结合可用于定义常量。文章通过具体示例详细解析了它们的用法和应用场景。
22 3
|
25天前
|
Java
Java面试题之cpu占用率100%,进行定位和解决
这篇文章介绍了如何定位和解决Java服务中CPU占用率过高的问题,包括使用top命令找到高CPU占用的进程和线程,以及使用jstack工具获取堆栈信息来确定问题代码位置的步骤。
68 0
Java面试题之cpu占用率100%,进行定位和解决
|
29天前
|
存储 安全 Java
java基础面试题
java基础面试题
27 2
|
29天前
|
缓存 NoSQL Java
Java中redis面试题
Java中redis面试题
33 1