【无标题】

Linux

1.软连接和硬连接

在这里插入图片描述

命令

netstat命令:端口是否被占用
 -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。
 grep
 rwx:r代表可读,w代表可写,x代表该文件是一个可执行文件 4,2,1
 ps -ef 查看所有正在运行的进程

计算机网络

1.多路复用

是媒体或带宽的共享。这是来自多个来源的多个信号被组合并通过单个通信/物理线路传输的过程。

2.TCP/IP模型?以及每一层对应七层模型哪个

在这里插入图片描述
应表会 传网 数物
------传网–网

3.状态码

在这里插入图片描述
在这里插入图片描述

操作系统

1.页和段的区别

  • 页是信息的物理单位,分页是为实现离散分配方式,以消减内存碎片,提高内存的利用率。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
  • 页的大小固定且由系统决定;而段的长度却不固定,决定于用户所编写的程序。
  • 分页的地址空间是一维的,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址

2. 进程的调度策略与进程的状态

  • 先来先服务
    非抢占式的调度算法,按照请求的顺序进行调度。

  • 短作业优先
    非抢占式的调度算法,按估计运行时间最短的顺序进行调度。

  • 最短剩余时间优先
    按剩余运行时间的顺序进行调度。 当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。

  • 时间片轮转
    将所有就绪进程按 FCFS(先来先服务) 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,停止进程。
    在这里插入图片描述

3.进程、线程、协程

  • 进程是操作系统资源分配的最小单位,线程是cpu调度的最小单位。
    进程有独立的系统资源,而同一进程内的线程共享进程的大部分系统资源,包括堆、代码段、数据段,每个线程只拥有一些在运行中必不可少的私有属性,比如tcb,线程Id,栈、寄存器。

降低性能

4.僵尸进程

每个进程都需要一个父进程。当子进程终止时,它会向父进程发送一个SIGCHLD信号,告诉父进程它已经终止。如果父进程没有处理这个信号,就会导致子进程成为僵尸进程。

  • 父进程由于阻塞无法接收SIGCHLD信号
  • 父进程在处理SIGCHLD信号时阻塞了

数据库

1.B和B+树,平衡二叉树的区别?

  • 二叉树/平衡二叉树/红黑树等都是有且仅有2个分支,共性就是数据量大的时候树的深度变深,增加IO的次数。
  • B树会在节点上存储数据,这样一页存放的key的数量就会减少,增加树的深度。
  • B+树 中非叶子节点去除了数据,这样就会增加一页中key的数量,而且叶子节点之间是通过链表相连,有利于范围查找和分页

B+树是一棵多路搜索树可以降低树的高度,提高查找效率,为了让一个查询尽量少地读磁盘,就必须让查询过程访问尽量少的数据块

2.隔离

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

4.解决幻读

图片来源:
添加链接描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.

数据结构与算法

排序算法

重要的:插入排序-堆排序-归并排序-快速排序

选泡插,
快归堆希统(桶排序)计(计数)基,
恩方恩老恩一三,
对恩加k/恩乘K
选堆希快不太稳

在这里插入图片描述

视频讲解的很好
冒泡排序
在这里插入图片描述

插入排序
在这里插入图片描述
选择排序
已排序和未排序
在这里插入图片描述

快速排序
在这里插入图片描述
在这里插入图片描述
不稳定
用双指针去找pvot大的和小的
在这里插入图片描述
归并排序
在这里插入图片描述
堆排序
在这里插入图片描述
堆的上浮和下潜,以及优先队列的应用

Java

多态

多态是面向对象编程中的一个重要概念,它允许不同类型的对象对同一方法进行不同的实现。 父类的引用变量来引用子类的对象,从而实现对不同对象的统一操作。

  • 继承关系
  • 方法重写
  • 父类引用指向子类对象

STATIC

静态代码块以用来优化代码性能,只会在类加载的时候执行一次
在这里插入图片描述
在这里插入图片描述

线程池

在这里插入图片描述
在这里插入图片描述

jvm内存

在这里插入图片描述

redis

redis的数据结构

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

一致性hash算法

添加链接描述
文字描述

算法题

152.乘积最大的连续数组

贪心算法:
在这里插入图片描述

347 前K个高频字符

在这里插入图片描述

24.移除元素

在这里插入图片描述

链表找环

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;
}

146.LRU

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);
 */

人寿研发中心

1.为什么会选择Java开发

2.JVM内存回收机制

3.当存在多次GC,触发Full GC或者溢出情况,如何排查

  • Minor GC频繁,新生代空间较小,Eden区很快被填满,就会导致频繁Minor GC,因此可以通过增大新生代空间-Xmn来降低Minor GC的频率
  • 原因导致FGC(大对象;内存泄漏,无法被回收(比如IO对象使用完后未调用close方法释放资源),先引发FGC,最后导致OOM;显式调用了gc方法;)

4.项目RabbitMQ设计思路

5. 问了权限管理的实现,spring中aop以及在项目中的使用

6.开发时用过哪些框架,答:springboot,并且介绍了ioc和aop;

7.在开发时遇到过哪些困难;

8.项目中如何使用的java框架与技术栈

9.spring中的bean的管理,涉及到哪些设计模式

10.有了解多线程吗?主线程等待子线程的运行完成,如何实现

主线程sleep
子线程join
使用CountDownLatch
使用CycleBarrier

11.如何理解死锁?

12.无序数组中一个数数量超过一半,如何找到

参考链接:
方法一:利用map
利用map的key -value模型来存放arr[i]和相对应出现的次数,最后用次数去跟数组长度一半去比较
方法二:排序求中间值
出现的次数超过长度一半,那给数组排序以后,它一定处在最中间的位置;
方法五:target-other>=1
因为这个数字出现次数超过数组长度的一半,所以目标数字的个数 减去其他数字的个数总和 一定是大于等于1的,当我们遇到目标值时+1,否则-1,当count为0时重新设置目标值,最后记录的位置一定是目标数字

13.tcp三次握手

14.你做这个项目的时候具体遇到了什么困难嘛?你是怎么解决的。

我:(我回答了spring+mybatis时因为mapper.xml文件没有配置好,导致出的错误)
面试官:你这个问题是比较小的,我想问的是那种大的
我:我具体做这个的时候,代码方面是没出过问题的,唯一算作比较大的就是之前需求没有理解好,项目中途得加模块)

15.Set集合了解嘛?具体Set有哪些,能说一下区别嘛?

在这里插入图片描述

16. 多线程有具体的了解过嘛?能说一下怎样实现多线程?

17.集合里面,他们对于线程安全吗?

在这里插入图片描述

18.排序算法

终面

加油用的连接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值