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