字符串
字符串反转
- 字符串倒转,时间复杂度和空间复杂度?
https://leetcode.com/problems/reverse-string/
class Solution {
public void reverseString(char[] c) {
for (int i = 0; i < c.length / 2; i++) {
c[i] = (char) (c[i] ^ c[c.length - i - 1]);
c[c.length - i - 1] = (char) (c[i] ^ c[c.length - i - 1]);
c[i] = (char) (c[i] ^ c[c.length - i - 1]);
}
}
}
时间复杂度O(n)
空间复杂度O(1)
- 含特殊字符不反转
public static String reverseString3() {
String s = "AB#$C%D";
char[] chars = s.toCharArray();
int i = 0, j = chars.length - 1;
while (i < j) {
if ((chars[i] >= 'A' && chars[i] <= 'z') && (chars[j] >= 'A' && chars[j] <= 'z')) {
chars[i] = (char) (chars[i] ^ chars[j]);
chars[j] = (char) (chars[i] ^ chars[j]);
chars[i] = (char) (chars[i] ^ chars[j]);
i++;
j--;
continue;
}
if (!(chars[i] >= 'A' && chars[i] <= 'z')) {
i++;
}
if (!(chars[j] >= 'A' && chars[j] <= 'z')) {
j--;
}
}
return new String(chars);
}
字符串匹配
最长公共子序列
-
设计一个Cache,大小为10,按照LRU实现put和get方法
https://leetcode.com/problems/lru-cache/
整体实现 是 HashMap+双向链表 -
设计一个Cache,大小为10,按照LFU实现put和get方法
https://leetcode.com/problems/lfu-cache/ -
从 A、B两个数组各取一个数,求两数差值最小?
nlog(n)解法
public int smallestDifference(int[] A, int[] B) {
// write your code here
if (A == null || A.length == 0 || B == null || B.length == 0) {
return 0;
}
Arrays.sort(A);
Arrays.sort(B);
int ai = 0, bi = 0;
int min = Integer.MAX_VALUE;
while (ai < A.length && bi < B.length) {
min = Math.min(min, Math.abs(A[ai] - B[bi]));
if (A[ai] < B[bi]) {
ai++;
} else {
bi++;
}
}
return min;
}
-
N个数组取两个数差值最小?
-
zookeeper中的leader选举,为什么要leader选举?
(1)什么是leader选举?
在zookeeper集群中也是一样,每个节点都会投票,如果某个节点获得超过半数以上的节点的投票,则该节点就是leader节点了。
(2)我们有一个zookeeper集群,有好几个节点。每个节点都可以接收请求,处理请求。那么,如果这个时候分别有两个客户端向两个节点发起请求,请求的内容是修改同一个数据。比如客户端c1,请求节点n1,请求是set a = 1; 而客户端c2,请求节点n2,请求内容是set a = 2;
那么最后a是等于1还是等于2呢? 这在一个分布式环境里是很难确定的。解决这个问题有很多办法,而zookeeper的办法是,我们选一个总统出来,所有的这类决策都提交给总统一个人决策,那之前的问题不就没有了么。
参考资料:https://www.cnblogs.com/yuyijq/p/4116365.html
- 数据库索引的实现?
B+数。具体如何分页,可以非常深入 - InnoDB和MyISAM的区别
- 悲观锁 乐观锁 并发相关的内容
- 怎么对IP进行限流,比如某个IP1小时最多访问1万次,写出代码
- 自己做的系统如何优化的?
- redis pool线程池工作原理?JDK如何实现?
https://blog.csdn.net/fuyuwei2015/article/details/72758179 - redis和memcached的区别
- HashMap和ConcurrentHashMap的区别
- JVM的OOM能介绍几种情况
- Spring ,事务传播机制
- redis的选举算法
- spring aop的实现原理
java中常用到的数据结构有哪些
jvm调优和并发方面;
concurrenthashmap atomiclong的实现原理
redis的分块分表,redis 主从实现原理,es分片原理,memerchae 的数据落地怎么实现的,spring的aop实现原理
treemap和hashmap的区别
二分查找 - 电梯算法,每层有一个value表示可上或可下value层,求A层到B层的最短按键数
2、java垃圾回收算法
3、spring中bean的生命周期
4、谁继承了java的collection接口
5、collection有什么方法
jdk1.7 用的是哪种垃圾回收机制 1.8用的是啥
spring3.x和4.x的区别
实现一个栈, 有push pop 获取最小值 三个方法 要求 快!
用过netty么
hdfs文件默认大小
set有序么?
一面问了点项目中遇到的问题和解决方案 写了一个懒加载的单例 一个链表反转
动态规划
二叉树
股票的最大利润(一次卖出)
一个数组代表股票每天的价格,可以选择从某一天买入,然后之后的一天卖出,求能够获得的最大收益。
例如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。在价格为5的时候买入并在价格为16时卖出,则能获得最大的利润为11.
1、 归并排序。
2、 数据结构:设计一个hashmap,写明接口和实现。(开地址法解决冲突的方法)
https://blog.csdn.net/m0_38141699/article/details/90481400
3、 树的先序遍历,要求不使用递归实现。
https://blog.csdn.net/m0_38141699/article/details/93032526
4、 速算:6的15次方。
5、 Kmeans的时间复杂度,要有迭代次数。
二
- 写一个函数,输入有序数组,输出哈夫曼树。
public class HuffmanTree {
public static Node createTree(List<Node> nodes) {
while (nodes.size() > 1) {
Collections.sort(nodes, (o1, o2) -> (int) (o2.weight - o1.weight));
Node node1 = nodes.get(nodes.size() - 1);
Node node2 = nodes.get(nodes.size() - 2);
Node parent = new Node(null, node1.weight + node2.weight);
parent.left = node1;
parent.right = node2;
nodes.remove(nodes.size() - 1);
nodes.remove(nodes.size() - 1);
nodes.add(parent);
}
return nodes.get(0);
}
public static void breadthFirst(Node root) {
if (root == null) {
return;
}
Queue<Node> queue = new LinkedList();
Node p = root;
queue.add(p);
while (!queue.isEmpty()) {
p = queue.poll();
System.out.print(p.weight + " ");
if (p.left != null) {
queue.add(p.left);
}
if (p.right != null) {
queue.add(p.right);
}
}
}
public static class Node<E> {
E data;
double weight;
Node left;
Node right;
public Node(E data, double weight) {
this.data = data;
this.weight = weight;
}
}
public static void main(String[] args) {
List<Node> nodes = new ArrayList<>();
nodes.add(new Node("A", 40.0));
nodes.add(new Node("B", 8.0));
nodes.add(new Node("C", 10.0));
nodes.add(new Node("D", 30.0));
nodes.add(new Node("E", 10.0));
nodes.add(new Node("F", 2.0));
Node root = HuffmanTree.createTree(nodes);
System.out.println(root.weight);
breadthFirst(root);
}
}
参考资料:https://blog.csdn.net/bruce_6/article/details/38656413
3. 已知十个数组, 求这十个数组的交集和并集。
4. 矩阵顺时针旋转90度。
5. 已知一个整形数组,数组相邻两个元素之间的差值始终是1或者-1,给定一个数n,在数组中查找n第一次出现的位置。
比如:[1,2,3,2,1,0,-1,0,1,2,3,4,5] 中查找 3
两个链表,存放大数,高位在前。求两个链表的和,存放到一个新的链表里,要写代码的;方法是先转置,然后再按位相加
广告算法:两个排序的数组,求第n 小,说出最优方案
求n个数和输入数的海明距离最大的k个
多路归并
- 多个有序的vector求交
Vector join(vector<vector> data)
此题就一直双链求交就行了。 - 股票交易求最大收益
如(1,3,2,6,9,7,8)最大收益为9-1=8,只能一次买卖
1、设计模式;
2、单态模式的写法;
3、90度旋转一个二维数组;
4、比较两个文件中url的不同;
5、一个人走楼梯,可以一次走一阶、二阶、三阶,n阶楼梯有多少种走法;
6、以技术问题为主,smarty模板什么的,项目上的问题比较多,尤其是项目中框架的使用;
7、一张上亿数据表,只存不连续ID和时间,给你一个时间,找出这个时间所对应的ID;
8、侧重问大数据的问题,纸上实现。
1、90度旋转一个数组;
2、比较两个文件中url的不同,然后问执行速度;
3、完整讲一遍项目中遇到的MySQL双机双备;
4、快速排序算法怎么用PHP实现;
5、树的非递归后序排序算法;
6、分表,系统运行时修改表结构。
第一个题目:递归算法;
第二个题目:排序算法;
第三个题目是:一个人要去往B地,现在到达一个岔道口,分别是A地和B地,这时遇到两个人,已知一人是A地,另一人是B地,而且一人说真话,一人说假话,请用最少的问法知道那条路是B地;
第四个题目:用9个点化10条直线,每条直线至少包含3个点;
第五个题目:已知你有无穷多的水,现在有两个提桶,一个装满水是3公升,一个装满水是5公升,这两个桶形状都不一样,怎么得到4公升的水; - 让实现一个字符串函数,能够写出
2.对于一个文件系统,如何实现快照?
设定条件:假设文件系统操作只有如下三种:
a)创建删除文件
b)追加写
3.hbase的压缩存储是如何实现的
4.mapreduce为什么设计成map和reduce两个阶段
5.代码题:字符串模糊匹配,假设有字典库,里面有1000万个字符串,前端发送来一个字符串,如何能快速得到字典库中与之匹配度最高的字符串。
匹配度假设可以通过一个match(str, target_str)函数得到
代码题:1->3->4->8 + 3->4 = 1->3->8->2
缓存和数据库的基础题
redis数据hash的实现原理
1.AB#$C%D 翻转字母顺序,符号顺序不变
2.一个数组先上升后下降,找到最大值
3.千万级用户,有积分系统,积分排名,前1000面的排名精确,后面的排名不要求,积分会频繁变化
4.java的wait notify使用
5.mq系统的使用,处理重复发送 消息丢失