java高级工程师开放面试题集<一>

临近年关,不少人蠢蠢欲动,有童鞋问我java后端面试会面试什么?
作为一个java后端老鸟,跌打滚爬多次被面试和面试别人,总结了一些经验,希望对大家有所帮助。
特别说明,仅仅针对工作两年以上的java后端开发。以开放性题目为主。
1.数据结构相关
假设1亿整数存放在一个txt文件中,如何去重和排序?
思路:
1.1.面试者要评估一下一亿整数的大小。一个int占4个字节,1亿呢?
1.2.去重的数据结构有哪些?HashSet--->引申到HashMap--->ConcurrentHashMap
1.3 数据量增大到十亿百亿怎么去重?
布隆过滤器,优点,缺点
1.4.其他方式?
数据库distinct order by,txt怎么导入到数据库?load
redis去重排序,redis的数据结构-->引申到其他数据结构 String,list,hash,set,sorted set,hyperloglog,geo
mongo去重排序,
....
2. 算法相关,主要考察代码能力
斐波那契数列(fabnacci)实现,首先介绍一下该算法的思想

2.1 第一级别实现: 两层递归
public static long fibonacci(int n){
if(n==0) return 0;
else if(n==1) return 1;
else
return fibonacci(n-1)+fibonacci(n-2);
}
问算法复杂度及评估一下性能问题,提示可以优化。
2.2 第二级别:减少一层递归
public static void main(String[] args) {
long tmp=0;
// TODO Auto-generated method stub
int n=10;
Long start=System.currentTimeMillis();
for(int i=0;i<n;i++){
System.out.print(fibonacci(i)+" ");
}
System.out.println("-------------------------");
System.out.println("耗时:"+(System.currentTimeMillis()-start));
}
public static long fibonacci(int n) {
long result = 0;
if (n == 0) {
result = 0;
} else if (n == 1) {
result = 1;
tmp=result;
} else {
result = tmp+fibonacci(n - 2);
tmp=result;
}
return result;
}
问题,算法复杂度,引导有没有不用递归的?
2.3 无递归
public static long fibonacci(int n){
long before=0,behind=0;
long result=0;
for(int i=0;i<n;i++){
if(i==0){
result=0;
before=0;
behind=0;
}
else if(i==1){
result=1;
before=0;
behind=result;
}else{
result=before+behind;
before=behind;
behind=result;
}
}
return result;
}
3.并发问题
给出一个普通的spring mvc controller,如下:
@Controller
public class WelcomeController { private final Logger logger = LoggerFactory.getLogger(WelcomeController.class);
@Autowired
private final HelloWorldService helloWorldService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index(Map<String, Object> model) {
logger.debug("index() is executed!");
model.put("title", helloWorldService.getTitle(""));
model.put("msg", helloWorldService.getDesc());
return "index";
}
}
问题:
3.1.线程模型是什么?单线程
3. 2.如何提升qps?线程池 executor
3.3.在线程池下如何控制并发?信号量Semaphore或者计数器CountDownLatch
引申到:Java中的可重入锁:synchronized 和 java.util.concurrent.locks.ReentrantLock
4.数据库相关
场景:一张表 test(a,b,c,e,f,g) 100w记录 常用查询条件 ab abc abe,如何提升查询效率?
4.1.索引,
4.2.复合索引的规则:最左原则。查询条件ae走不走索引?
4.3 1000w,1亿,十亿以上条记录查询是否会有什么不同?
4.4 多线程下如何保证数据一致性?乐观锁/悲观锁,应用场景不同点
5.设计模式相关
public class Test {
@Test
public void test() throws InterruptedException, ExecutionException {
AsyncTaskExecutor executor = new SimpleAsyncTaskExecutor("sys.out");
Future<String> future = executor.submit(new OutThread());
System.out.println(future.get());
System.out.println("Hello, World!");
Thread.sleep(10000 * 1000L);
}
static class OutThread implements Callable<String> {
public void run() {
}
@Override
public String call() throws Exception {
String ret = " i test callable";
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(2 * 1000L);
System.out.println("i sleep 1s");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return ret;
}
}
}
5.1 看程序说明
5.2 引申到reactor模型
spring reactor
vert.x
akka
5.3 servlet 3 响应式编程
太累,先写到这里吧。
java高级工程师开放面试题集<一>的更多相关文章
- java高级工程师开放面试题集<二>
临近年关,不少人蠢蠢欲动,有童鞋问我java后端面试会面试什么? 作为一个java后端老鸟,跌打滚爬多次被面试和面试别人,总结了一些经验,希望对大家有所帮助. 特别说明,仅仅针对工作两年以上的java ...
- Java程序员面试题集(71-85)(转)
转:http://blog.csdn.net/jackfrued/article/details/17566627 Java程序员面试题集(71-85) 摘要:这一部分主要包括了UML(统一建模语言) ...
- Java程序员面试题集(136-150)(转)
转:http://blog.csdn.net/jackfrued/article/details/17740651 Java程序员面试题集(136-150) 摘要:这一部分主要是数据结构和算法相关的面 ...
- Java程序员面试题集(51-70)(转)
转:http://blog.csdn.net/jackfrued/article/details/17403101 Java程序员面试题集(51-70) 摘要:这一部分主要讲解了异常.多线程.容器和I ...
- Java程序员面试题集(1-50)(转)
转:http://blog.csdn.net/jackfrued/article/details/17339393 下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和 ...
- Java程序员面试题集(1-50
下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...
- Java程序猿面试题集(181- 199)
Java面试题集(181-199) 摘要:这部分是包括了Java高级玩法的一些专题,对面试者和新入职的Java程序猿相信都会有帮助的. 181. 182. 183. 184. 185. 186. 1 ...
- Java程序员面试题集2
51.类ExampleA 继承Exception,类ExampleB 继承ExampleA. 有如下代码片断: try{ throw new ExampleB("b") }catc ...
- Java程序员面试题集(151-180)
Java面试题集(151-180) 摘要:这部分包含了Spring.Spring MVC以及Spring和其他框架整合以及测试相关的内容,除此之外还包含了大型网站技术架构相关面试内容. 151. Sp ...
随机推荐
- Android 获得本地IP地址、外网IP地址、本设备网络状态信息、本地Mac地址
本地内网IP和外网IP的区别: 根据我的经验一台电脑需要两个ip才可以上网,一个是本地的内网ip 一个是外网的ip 本地的ip 一般是192.168.1.2这种样子 只要在不同的路由器上可以重复 外 ...
- BZOJ1026或洛谷2657 [SCOI2009]windy数
BZOJ原题链接 洛谷原题链接 简单的数位\(DP\),套模板就好. #include<cstdio> #include<cstring> using namespace st ...
- python基础之Day8
一.什么是文件 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位 文件的操作核心就:读.写 即我们只需要对于进行读写操作,就是对操作系统发起请求,然后由操作系统将用户或者应用程序对文件的读写 ...
- C++学习札记(1)
指针 按别名传递 下面是个例子: #include <iostream> using namespace std; void swap(int &a,int &b) { i ...
- linux mysql 5.7.25 安裝
1.下载 https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 2.解压 tar ...
- ssh 绕过The authenticity of host '*.*.*.*' can't be established 直接输入密码
只需要使用命令 ssh webgate@10.129.6.237 -o "StrictHostKeyChecking no" 即可以绕过 insp_ap@inspect02:/ho ...
- 引用数据类型 Scanner和 Random
键盘录入Scanner 获取键盘录入的数据,对获取数据的具体操作进行了封装,只需要调用方法,即可得到键盘录入的数据 A:导包 import java.util.Scanner; ...
- oracle数据库创建分区表
参考资料:http://blog.chinaunix.net/uid-21943216-id-4062400.html 一.建按月自增分区表:1.1建表SQL> create table mon ...
- hiho 第六周 01背包
简单的01背包,没有报名,这周的没有权限提交 #include<iostream> #include<memory.h> using namespace std; #defin ...
- 基于Docker+Jenkins+Gitlab搭建持续集成环境
随着DevOps理念和敏捷理念的发展,我们希望通过自动化技术,加快项目的迭代.尤其是当使用微服务方案后,面临在大量的项目构建和部署工作,借助于jenkins的持续集成,可以快速把应用打包成docker ...