京东支付java现场面经

  1. redis 和 MongoDB 的区别。几个概念对比,还有底层实现。
  2. JVM 垃圾回收机制?CMS 收集器?
  3. 如何防止form表单重复提交?
  4. redis如何处理分布式服务器并发造成的不一致
  5. 服务器模型以及之间的区别
  6. jvm如何判断对象是否失效,可达性分析是否可以解决循环引用
  7. Redis 加锁方案?Zookeeper 加锁方案?各有什么优缺点?
  8. 微信二维码扫码如何实现,除了轮询之外有什么别的方法
  9. JDK1.8之后如何链地址法,链表长度是多少的时候会转换成红黑树。
  10. redis的并发竞争问题如何解决?
  11. 什么时候用单线程、什么时候用多线程场景,多线程有什么问题,单线程有不足的地方吗?
  12. top命令主要看什么参数
  13. 聚集索引和非聚集索引的区别?
  14. innDB 和 MyISAM 的区别?
  15. 假设有1000万身份证数据在一个txt文档里,怎么设计一个java项目可以每次获取某个身份证在不在这堆数据里
  16. 索引的作用?和它的优点缺点是什么?
  17. maven依赖树,maven的依赖传递,循环依赖
  18. Redis 数据结构有哪些?如何实现 sorted set?这种数据结构在极端情况下可能有什么问题?二叉平衡树?
  19. 为什么hashmap1.8后面用红黑树了?红黑树和别的树有什么不同
  20. 请说一下为什么会存在zookeeper,它可以用在哪里?
  21. 讲一讲TCP和UDP的区别,为什么是TCP三次握手,四次挥手?为什么是三次?
  22. 存储了0-100的数据,如何删除其中小于10的数字(其实问的是list中如何删除元素——迭代器)
  23. 如何只使用(传输层)TCP/IP协议,传输数据?
  24. 既然线程会共享进程的程序和数据,那么如何保证各个线程之间互不干扰相互独立呢
  25. java又是怎么保证线程同步(安全)的呢
  26. equals和==的区别,两个String之间判别,两个Integer之间判别

编程题

实现一个函数,给三个参数,data是整形数组,m和sum都是一个整数,从data中取出n个整数,使它们的和为sum,求出一种组合即可。

我的思路是穷举data中的n个key的组合,假设data有6(n)个元素,从中取出3(m)个数,那么它key的组合就有:[0,1,2]、[0,1,3]、[0,1,4]、[0,1,5]、[0,2,3]、[0,2,4]、[0,2,5]、...、[3,4,5] 列出它的所有组合就好办了,直接用这些key去data里面取数,如果找到答案就退出程序。

下面仅给出穷举组合的算法,为了简单,相关参数写死并忽略全局污染:

// 数组a用于存放key的组合,data并没有出现,只给出data元素个数n
var a=[0,1,2], oldA = [],n = 6, len = a.length;
function listArr(key){
    let same = true
    for(let i = 0 ; i < len ; i++){
        if(a[i] !== oldA[i]){
            same = false
            break
        }
    }
    if(!same){
        console.log(a)
        oldA = Array.prototype.slice.call(a)
    }
}
function list(currentKey, initValue){
    if(currentKey >= len || initValue >= n){
        return
    }
    for(let v = initValue ; v <= n + currentKey - len ; v++){
        a[currentKey] = v
        arguments.callee(currentKey+1, v+1)
        listArr(currentKey);
    }
}
list(0,0)