面试题day3

汉德信息

  • 自我介绍

  • 原始jdbc使用流程

         //首先加载驱动	
         Class.forName("com.mysql.cj.jdbc.Driver");
         //提供JDBC连接的URL
         String url="jdbc:mysql://0.0.0.0:3306/xxxx";
         String username="root";
         String password="root";
         //创建数据库的连接
         Connection con = DriverManager.getConnection(url,username,password);
         //创建一个statement执行者
         String sql="SELECT * FROM biz_spot WHERE spot_id = ?";
         PreparedStatement statement = con.prepareStatement(sql);
         statement.setLong(1,11L);
         //执行SQL语句
         ResultSet result = statement.executeQuery();
         //处理返回结果
         while (result.next()){
             System.out.println(result.getString("xxx") + "---" + result.getString("xxx"));
         }
         //关闭JDBC对象
         con.close();
         result.close();
         statement.close();
    
  • statement和preparedstatement的区别

    是否进行预编译,放置sql注入

  • 三大集合的区别

    list 有序 可重复

    set 无序 不重复

    map 无序 键不重复,值可重复 存储键值对

  • hashmap底层

    链表散列

  • arraylist和linkedlist使用场景

    arraylist 多读少写

    linkedlist 多写少读

  • 面向对象的特性,重写和重载的区别

    重载 类中方法名字相同,而参数不同。返回类型可以相同也可以不同

    重写 子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

  • Java8新特性

    函数式接口 lambda表达式 方法引用

    stream api

    data api

    optional

  • Java中的io方式

    bio nio aio

  • io输入与输出的分别相对于谁来说

    针对内存

    input(输入)和output(输出) 计算机中,从硬盘等外部储存设备向内存读入数据叫做输入,反之叫做输出

  • 数据库事务4大特性

    acid 原子性 隔离性 持久性 一致性

    undolog mvcc+锁 redolog

  • 什么时候要建立数据库索引

    加快数据访问速度

  • 数据库 全/左外/右外/内 链接简单说明

    外连接 保留所有行,无对应补null

    左连接 保留条件都相等的行及左表未对应的行,无对应补null

    有链接 保留条件都相等的行及右表未对应的行,无对应补null

    内连接 只保留两表条件都相等的行

  • 数据库中用过那些聚合函数

    sum() count() avg() min() only()

  • jvm的基本结构

    程序计数器

    虚拟机栈 局部变量表 操作数栈 动态链接 方法返回

    本地方法栈

    方法区

    直接内存

  • jvm中那些结构是线程独有和共有的

    独有 堆 方法区

    私有 程序计数器 虚拟机栈 本地方法栈 直接内存

  • jsp有没有用过

  • spring mvc的基本结构和程序流程

    • 请求传入dispatcherservlet
    • 传入处理器映射器,转换为controller,返回执行链
    • 传入处理器适配器,调用底层的方法,返回ModelAndView
    • 传入视图解析器,返回View
    • 解析View,返回响应
  • spring mvc用过那些注解

    @controller @restcontroller @requestmapping @requestbody @reponsebody @requestparam

  • spring的特性

    Spring IOC 容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。 IOC 容器负责创建对象,将对象连接在一起,配置这些对象,并从创建中处理这些对象的整个生命周期,直到它们被完全销毁。

    Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理。常用于计算接口运算时间、记录日志。

  • spring和springboot的关系,为什么要有springboot

    auto-configuration组件;starter组件;springboot cli组件;actuator组件

  • 项目中如何去暴露controller中的接口

    @controller @requestmapping

  • cookie和session的区别

    • 存储角度:

      • Session是服务器端的数据存储技术,cookie是客户端的数据存储技术
    • 解决问题角度:

      • Session解决的是一个用户不同请求的数据共享问题,cookie解决的是不同请求的请求数据的共享问题
    • 生命周期角度:

      • Session的id是依赖于cookie来进行存储的,浏览器关闭id就会失效 Cookie可以单独的设置其在浏览器的存储时间。
  • mybatis用过什么标签

    select表示为查询语法。

    insert表示为插入语法。

    update表示为修改语法。

    delete表示为删除语法

    sql表示可通用的sql片段,使用id可以引用。

    resultMap

  • mybatis#和$的区别

    是否预编译

  • 为什么要使用mybatis,而不是jdbc

    消除了JDBC大量冗余的代码,不需要手动开关连接

    MyBatis的sql语句在xml文件里面编写,改变sql语句不再需要重新编译

  • spring事务的了解

    • 事务级别
      • 数据库默认
      • ru rc rr s
    • 事务传播行为
      • 支持当前事务
        • 不存在当前事务、新事务执行
        • 不存在当前事务、非事务执行
        • 不存在当前事务抛异常
      • 不支持当前事务
        • 存在挂起当前事务、新事务执行
        • 存在挂起当前事务、非事务执行
        • 存在当前事务抛异常
      • 嵌套
  • git分布式版本控制能干什么

  • git分支合并的命令

  • linux你使用过吗,用到了那些命令

    sudo

    makdir

    chomd

    wget

    make&make install

    netstat

    tail net

    ps -aux|grep

    pstree -pu

  • Maven的理解

  • springboot使用那些设计模式

    工厂模式 单例模式 代理模式

  • Ajax技术的基本使用和原理

  • springboot中bean的生命周期

    构造方法初始化

    自动装配

    aware

    前置后置方法

    init方法

欧科云链

Java 一面

  • Java里序列化怎么做(实现Serializable接口······)

  • 那实现接口和继承有什么区别,为什么要有接口和继承;

    单继承 多实现

    方法 可以是非abstract 必须是abstract

    变量 friendly public static final

    为了实现多态,体现了数据抽象的思想

  • Java的类加载过程、机制,每个过程的作用;

    加载

    连接 验证 准备 解析

    初始化

    使用

    退出

    双亲委派机制

  • TCP三次握手的过程,粘包,会不会丢包,服务器端的TCP如果长时间没有通讯,可以自动断开吗;

    三次握手 syn j ack j+1、syn k ack k+1

    不会丢包

    长时间不通信,服务端会给客户端发送一个TCP Keep-Alive来查看客户端是否还存活,如果客户端没有应答,服务端超时没有收到回复就会再次重新发送;连续发送三次后,服务端都没有收到应答,服务端就会主动断开连接。

  • 数据库的悲观锁、乐观锁、间隙锁;

    乐观锁 操作后加锁 版本号 cas

    悲观锁 操作前加锁 select … for update、select … lock in share mode、update、delete、insert 事务

    间隙锁 rr级别 加锁会有间隙锁

  • 用过Redis的哪些数据类型;了解Kafka的原理吗;

    • string 缓存 session共享 分布式锁
      • int
      • embstr 编码的简单动态字符串
      • 简单动态字符串
    • list 消息队列
      • ziplist
      • linkedlist
    • hash 存储对象
      • ziplist
      • hash
    • set 集合
      • intset
      • hash
    • zset 排行榜
      • ziplist
      • skiplist
  • 为什么用Elasticsearch,为什么ES的查询速度快

抖音电商

2022届秋招补录、base上海、抖音电商

一面 2021年11月22日

二面 2021年12月2日

三面 2021年12月6日

  • 自我介绍

  • 实习项目、自己做的社区网站项目

  • 一致性哈希

  • 分布式系统、rpc调用过程、了解dubbo吗?

  • http和https的区别?https加密的过程?

    端口 前缀名 安全性

    非对称加密来加密对称加密的密钥

  • tcp三次握手、拥塞控制、time_wait状态

    三次握手 syn j ack j+1、syn k ack k+1

    在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

    为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口(cwnd)的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

    TCP 的拥塞控制采用了四种算法,即慢开始、拥塞避免、快重传和快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。

    慢开始:慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd 初始值为1,每经过一个传播轮次,cwnd 加倍。

    拥塞避免:拥塞避免算法的思路是让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间 RTT 就把发送方的 cwnd 加1.

    快重传与快恢复:在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。 当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

    local peer主动调用close后,此时的TCP连接进入TIME_WAIT状态,处于该状态下的TCP连接不能立即以同样的四元组建立新连接,即发起active close的那方占用的local port在TIME_WAIT期间不能再被重新分配。由于TIME_WAIT状态持续时间为2MSL,这样保证了旧TCP连接双工链路中的旧数据包均因过期(超过MSL)而消失,此后,就可以用相同的四元组建立一条新连接而不会发生前后两次连接数据错乱的情况。

    time_wait状态 第三次挥手时不会直接关闭,会等待一段时间。

  • mysql索引的底层实现

    b+树

  • mysql锁机制

    行锁 表锁 页面锁

    读锁 写锁

    意向锁

    gap next-key

  • MVCC

    多版本并发控制

  • 保证幂等性的方案

    数据库唯一主键+数据库乐观锁

    防重 Token 令牌

  • select for update 是加表锁还是行锁

    myisam 表锁

    innodb rr 索引查询为行锁 其余为表锁

  • 算法题:全排列 https://leetcode-cn.com/problems/permutations/

  • 自我介绍

  • 实习项目

  • redis怎么实现分布式锁

  • 设计题1:使用redis实现分布式锁、写代码 ,只写了线程获取锁的步骤和伪代码

  • 设计题2:商家入驻抖音电商需要缴纳一笔保证金,设计一个系统,记录商家缴纳的保证金及相关信息,缴纳的保证金可以修改,比如商家入驻第一年缴纳5w,第二年为10w,不同商家缴纳的保证金是不同的。聊了挺久。

  • 算法题: https://leetcode-cn.com/problems/subsets/

  • 实习项目

  • 操作系统执行一个程序的过程?

    • 当用户通过键盘输入“./hello”的字符串,shell程序将输入的字符逐一读入寄存器,处理器将hello这个字符放入内存中。

    • 当完成输入,按下回车键,shell程序得知已经完成了命令输入,然后执行一系列指令来加载可执行文件hello,这些指令将hello中的数据和代码从磁盘中复制到内存中,数据就是我们想显示的hello,world。这个复制过程利用DMA技术,使得数据可以不经过处理器,从磁盘直接到达内存中。

    • 当可执行文件的hello中的代码和数据被加载到内存中,处理器就开始执行mian函数中的代码。最后通过io桥传输给图形适配器,然后呈现给用户。

  • mysql索引的底层实现?

    b+树

  • 有1亿数据,走主键索引,mysql底层 IO次数是多少?

    主键索引类型是bigint 8B,指针 6B;

    非叶子节点,索引和指针间隔存在,14B,16KB/14B=1170;

    \[\log_{1170}^{100000000}=2.6074 \]

  • 算法题:链表快排

posted @ 2022-07-12 17:26  Faetbwac  阅读(40)  评论(0编辑  收藏  举报