
netstat命令:端口是否被占用
-p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
grep
rwx:r代表可读,w代表可写,x代表该文件是一个可执行文件 4,2,1
ps -ef 查看所有正在运行的进程
是媒体或带宽的共享。这是来自多个来源的多个信号被组合并通过单个通信/物理线路传输的过程。

应表会 传网 数物
应 ------传网–网


先来先服务
非抢占式的调度算法,按照请求的顺序进行调度。
短作业优先
非抢占式的调度算法,按估计运行时间最短的顺序进行调度。
最短剩余时间优先
按剩余运行时间的顺序进行调度。 当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。
时间片轮转
将所有就绪进程按 FCFS(先来先服务) 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,停止进程。


每个进程都需要一个父进程。当子进程终止时,它会向父进程发送一个SIGCHLD信号,告诉父进程它已经终止。如果父进程没有处理这个信号,就会导致子进程成为僵尸进程。
B+树是一棵多路搜索树可以降低树的高度,提高查找效率,为了让一个查询尽量少地读磁盘,就必须让查询过程访问尽量少的数据块


##3. acid
原子性:原子性是指一个事务是一个不可分割的单位,要么全部成功,要么全部失败。便可以利用undo log中的信息将数据回滚到修改之前的样子。
持久性:持久性是指一个事务一旦提交,它对数据库的改变是永久性的。当数据库的数据要进行新增或修改的时候,还要把这次的操作记录 到redo log里面。如果MySQL宕机了,还可以从redo log恢复数据。
隔离性:不同事务之间不能相互影响。写-写操作主要是通过锁实现的。如果是读- 写操作则是通过mvcc
一致性:事务不能破坏数据的完整性和业务的一致性。例如在转账时,不管事务成功还是失败,双方钱的总额不变。
图片来源:
添加链接描述




重要的:插入排序-堆排序-归并排序-快速排序
选泡插,
快归堆希统(桶排序)计(计数)基,
恩方恩老恩一三,
对恩加k/恩乘K
选堆希快不太稳

视频讲解的很好
冒泡排序

插入排序

选择排序
已排序和未排序

快速排序


不稳定
用双指针去找pvot大的和小的

归并排序

堆排序

堆的上浮和下潜,以及优先队列的应用
多态是面向对象编程中的一个重要概念,它允许不同类型的对象对同一方法进行不同的实现。 父类的引用变量来引用子类的对象,从而实现对不同对象的统一操作。
静态代码块以用来优化代码性能,只会在类加载的时候执行一次





Redis是一种存储key-value的内存型数据库,它的key都是字符串类型,value支持存储5种类型的数据:String(字符串类型)、List(列表类型)、Hash(哈希表类型、即key-value类型)、Set(无序集合类型,元素不可重复)、Zset(有序集合类型,元素不可重复)。
贪心算法:



public static boolean isCircleByHash(ListNode head){
if (null == head){
return false;
}
Set<ListNode> set = new HashSet<>();//定义哈希集合
while (null != head){
if (set.contains(head)){//存在说明有环
return true;
}
set.add(head);
head = head.next;
}
return false;
}
class LinkNode{
int key;
int val;
LinkNode front;
LinkNode next;
public LinkNode(int key, int val){
this.key = key;
this.val = val;
}
}
class LRUCache {
Map<Integer,LinkNode> map = new HashMap<>();
LinkNode head = new LinkNode(0,0);
LinkNode tail = new LinkNode(0,0);
int capacity;
public LRUCache(int capacity){
this.capacity = capacity;
head.next = tail;
tail.front = head;
}
public void put(int key, int value) {
if(!map.containsKey(key)){
if(map.size() == capacity) deleteLastNode(); //weixie
LinkNode added = new LinkNode(key,value);
addFirst(added); //weixie
map.put(key,added);
}else{
LinkNode node = map.get(key);
node.val = value;
moveNodeTop(node); //weixie
}
}
public void deleteLastNode(){
LinkNode last = tail.front;
last.front.next = tail;
tail.front = last.front;
map.remove(last.key);
}
public void addFirst(LinkNode node){
LinkNode temp = head.next;
head.next = node;
node.front = head;
node.next = temp;
temp.front = node;
}
public void moveNodeTop(LinkNode node){
node.front.next = node.next;
node.next.front = node.front;
addFirst(node);
}
public int get(int key){
if(map.containsKey(key)){
LinkNode node = map.get(key);
moveNodeTop(node);
return node.val;
}else{
return -1;
}
}
}
/**
* Your LRUCache object will be instantiated and called as such:
* LRUCache obj = new LRUCache(capacity);
* int param_1 = obj.get(key);
* obj.put(key,value);
*/
主线程sleep
子线程join
使用CountDownLatch
使用CycleBarrier
参考链接:
方法一:利用map
利用map的key -value模型来存放arr[i]和相对应出现的次数,最后用次数去跟数组长度一半去比较
方法二:排序求中间值
出现的次数超过长度一半,那给数组排序以后,它一定处在最中间的位置;
方法五:target-other>=1
因为这个数字出现次数超过数组长度的一半,所以目标数字的个数 减去其他数字的个数总和 一定是大于等于1的,当我们遇到目标值时+1,否则-1,当count为0时重新设置目标值,最后记录的位置一定是目标数字
我:(我回答了spring+mybatis时因为mapper.xml文件没有配置好,导致出的错误)
面试官:你这个问题是比较小的,我想问的是那种大的
我:我具体做这个的时候,代码方面是没出过问题的,唯一算作比较大的就是之前需求没有理解好,项目中途得加模块)

