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 ... 
随机推荐
- [模板]LCA
			洛谷P3379 注意:不能与LCA搞混(打久了就会发现两个还是有很大区别的) 位运算一定要加括号! for循环从0到logn还是从logn到0看当前的状态更适合哪种 第53行预处理一定要注意!(因为没 ... 
- 借助Algorithmia网站API:用AI给黑白照片上色,复现记忆中的旧时光
			先看DEMOhttps://demos.algorithmia.com/colorize-photos/ 了解ColorfulImageColorizationhttps://algorithmia. ... 
- Oracle中为表设置自动增长的标识列
			-- Create sequence create sequence INNERID minvalue 1 maxvalue 99999999999999 start with 1 increment ... 
- AX_InventCounting
			static void Job649(Args _args) { ItemId ItemId = "000XA00612R1& ... 
- 别人的Linux私房菜(10)vim程序编辑器
			很多软件的编辑接口会主动调用vi vi分一般命令模式.编辑模式.命令行模式. 使用vi :/bin/vi welcome.txt 下下端显示文本有多少行,多少字符, 一般命令模式: 上下左右移动光标k ... 
- Ubuntu 14.04 LTS 初装成
			原先博客放弃使用,几篇文章搬运过来 Windows 7下使用win32diskimager 制作启动盘,安装Ubuntu OS安装完成后,安装DrclientLinux. 安装搜狗输入法 Linux下 ... 
- hdu 4034
			比赛时才发现自己基础算法都忘得光光了,逆向floyd i->j经过k点,只要i到j的距离大于或者等于,就把这边标记,实为去掉...此时整个图就减一条边 #include<iostream& ... 
- WPF学习笔记(6):DataSet更新后台数据库个别列失败的问题
			WPF窗体中建有一个DataGrid,运行后修改各行数据,通过Update方法更新后台数据库.发现在数据库中,其中一列FAcctID(文本型)每次都会变为0,还有一列FDebit(货币型)不能更新,其 ... 
- [转]kaldi上的深度神经网络
			转:http://blog.csdn.net/wbgxx333/article/details/41019453 深度神经网络已经是语音识别领域最热的话题了.从2010年开始,许多关于深度神经网络的文 ... 
- Java 实现将其他类型数据转换成 JSON 字符串工具类
			这是网上一个大神实现的,具体出处已找不到,在这做个记录,方便以后使用. package com.wb.test; import java.beans.IntrospectionException; i ... 
