我的凉经

我的凉经(持续更新)

今天2022.11.9开始了第一次Java面试,记录一下。

字节后端实习一面(50min)

  1. 自我介绍

  2. Spring的理解
    没准备 跳了

  3. 讲一下tcp协议

  4. tcp谁先建立连接可以是服务端先发吗?

    有点懵 一般情况下都是客户端发起,服务端的TCP进程先创建传输控制块TCB(Transmission control module),准备接收客户端进程的连接请求,然后服务端进程处于LISTEN,等待客户端的连接请求,如有,则作出响应。

  5. 为什么是三次握手、四次挥手

  6. UDP为什么不安全?
    讲得不太好 没看这块儿的八股。UDP为什么不可靠

  7. Ajax是做什么的?全称是什么?是HTTP的吗?不理解 为啥

    Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)

    Ajax原理 这个链接讲得挺全的

  8. 使用过程中HTTP有哪些知识点知道吗?

    这里感觉面试官不是很喜欢我刚才提到的八股 刻意的避开了。然鹅平时好像也没用到啥http相关,就无了。

  9. 什么是线程什么是进程
    这里也没复习好,应该是经典问题了。

  10. CPU的时间进程和线程怎么分?

正确答案:cpu调度的是进程中的线程! 线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
我还说了个线程对于操作系统是不透明的 对于进程是透明的 太蠢啦。。。

  1. 快排算法讲一下 时间空间复杂度是多少 为什么? 空间复杂度

    时间复杂度应该是最好和平均是O(NlogN) 最坏是O(N2)
    空间复杂度递归算法的空间复杂度 = 每次递归的空间复杂度O(1) * 递归深度 所以是O(logN)

  2. 题目:单链表倒数第K个节点的值
    这里没有封装到函数里 被吐槽了一下,节点需要自己new。如果链表长度不足K如何处理。

  3. 多线程 打印两个字符

    写出来了,让写个线程不安全的案例:

    这里遇到了个问题 就是主函数里的两个线程无法改变主函数里的变量 会报错,只能拿到类里面去才行。。。被逮到问这是为啥?

    public class test {
        public static void main(String[] args) {
             int num = 1;
            new Thread(() -> {
                for (int i = 0; i < 10; i++) num++;
            }, "A").start();
            new Thread(() -> {
                for (int i = 0; i < 10; i++) num++;
            }, "B").start();
        }
    }
    

    这里nums++位置会报错:Variable used in lambda expression should be final or effectively final。

    意思是:在lambda表达式中,变量应当是final或 effectively final的。
    原因:lambda 表达式是由匿名内部类演变过来的,它们的作用都是实现接口方法,于是类比匿名内部类,lambda 表达式中使用的变量也需要是 final 类型。
    匿名内部类为啥要final?

    被匿名内部类引用的变量会被拷贝一份到内部类的环境中但其后,在外部,该变量如果被修改,则内部外部不一致Java为了避免数据不同步的问题,做出了匿名内部类只可以访问final的局部变量的限制。

    总结下来就是:

    1. Java设计者想要匿名函数或者Lambda函数内部外部保持数据一致性(知道了目的才好理解)
    2. 然而Java只是实现了capture-by-value形式的闭包,也就是匿名函数内部会重新拷贝一份自由变量,然后函数外部函数内部就有两份数据
    3. 那么要想实现1中的目的,只能要求两处变量不变。JDK8之前要求使用final修饰,JDK8聪明些了,可以使用effectively final(effective:有效的;既成事实上的final变量,lambda表达式中使用)的方式。java8里不用final修饰局部变量也可以编译通过。总之,两边不变就行了

    Java 8 之后,在匿名类或 Lambda 表达式中访问的局部变量,如果不是 final 类型的话,编译器自动加上 final 修饰符,即 Java8 新特性:effectively final。

    其实能感觉到面试官想引导我说出上面那些。。。故意问了我()->{}是什么,是怎么执行的?感觉就是想让我联想起匿名内部类中变量也是只能用final类型的吧,可惜并不知道。

  4. lambda表达式是对象还是类?
    回答错了。。。应当是对象的。

  5. sql题
    设计表结构 记录学生成绩
    Student: id Name
    Class:id name
    Grade:id grade clid stuid

    1. 查一下每门课程的最高成绩
      当时没写出来。。Mysql回来恶补

      select c.name,max(grade) from Grade as g,Class as c where g.clid=c.id GROUP By c.name;
      
    2. 上一题没写出来,让查一下语文课的最高分数。。降级了一下

      SELECT MAX(grade) from grade,class WHERE class.`name`="语文";
      
    3. 第二个的逻辑用Join能写吗

      SELECT MAX(grade) from grade INNER JOIN class WHERE class.`name`="语文";
      

      其实直接给逗号换成inner join就行了,问题是没复习完全没印象。。

  6. 用Springboot需要写哪些东西?
    自己说了个三层架构,然后又说不上太来那三层

    三层架构
    表现层:就是我们平常说的web层,它负责接收客户端的请求,并向客户端响应结果,通常是客户端使用http请求web层,web层需要接收http请求,并完成http请求。
    依赖于业务层,当表现层接收到客户的请求,会调用业务层进行业务管理,并将结果响应给客户端。
    业务层:就是我们平常说的service层,负责进行逻辑业务处理。
    注意:虽然说表现层依赖业务层,但是业务层并不依赖表现层,但是业务层在进行业务处理时会依赖持久层
    持久层:
    就是我们平常说的dao层,负责数据的持久化,与数据库交互,对数据库进行增删改查。

https://baiyuliang.blog.csdn.net/article/details/109253654 多看看Spring和SpringBoot慢慢来吧 感觉还差好多。。。

聆心智能一面(20min)

  1. 介绍项目
  2. Mysql的索引介绍一下
  3. 项目中用户登录校验,应该是整个token之类的,不过我是直接放到浏览器里localStorage。
  4. Java基本数据类型
  5. Maven了解吗 用过一点
  6. git的简单命令 拉取文件
    git clone https://github.com/tianqixin/runoob-git-test another-runoob-name
  7. docker的后端代码更改怎么做的。。。我直接kill掉然后重启。面试官:哎呦我去
  8. ReetrantLock介绍下
  9. CAS举了个例子
  10. 算法:lc 283. 移动零

反问:项目做啥的。

聆心智能终面(22min)

  1. 自我介绍
  2. 问老师方向,为啥要整深度学习,为啥走开发不走算法岗
  3. Springboot的设计模式?bean都是单例吗?
  4. JVM调优咋监控 有个JProfiler 观察dump文件。有项目实际的使用吗?无
  5. 项目权限怎么做的?
  6. 项目难点是什么?
  7. 项目有没有并发?无
  8. 文件存储到和程序一个服务器?确实。。。一个寄了全寄了
  9. 到岗时间

反问:实习内容做什么

posted @ 2022-11-16 21:47  杀戒之声  阅读(31)  评论(0编辑  收藏  举报