2021年.7月面试经历(失败)

2021年.7月面试经历(失败


本人大三在读,刚好考完试放暑假。受到身边同学的影响,我想提前出来找实习工作锻炼一下自己,以便大四毕业能够有个实习经历,在简历上添上一笔,给自己加点分。没想到,最后只收获了一些面试经验o(╥﹏╥)o。

  • 确认职位方向
  • 各大招聘APP上海投
  • 约面试
  • 笔试、面试、HR
  • 等结果(┭┮﹏┭┮)

以下是我在这段时间投递的公司以及还记得的面试题目以及找到的答案


面试题目

1. 广州丰石科技有限公司

  • 打call,是我第一家面试的公司,笔试答得不好,面试基本聊天,但题目记不太清了
  • 面试官很nice,后面跟我讲了现在公司主要框架springboot,springcloud,前后端分离 (现在ssm大部分是去维护旧的老项目),要我继续学一点微服务以及分布式的知识。

笔试

  1. ArrayList list = new ArrayList(20);中的list扩充几次?

  2. 多线程、jvm、mysql、HashMap (八股文还是要背背)


面试

2. 智嘉科技有限公司

  • 不记得是去酒店还是大厦面试来着,感觉不太好, 面试完给我画大饼,一个月2500,拒了。
  • 切记,找工作的时候,HR主动打电话给你,说你很满足他们的要求,约你面试,就要警惕了,一般都不要去,就是答应了也要在面试前查清该公司底细,这种行为感觉不是很正规,猜测不是外包就是培训

面试

  • SpringBoot中解决跨域问题,用到什么注解?

    • 添加注解在controller或method上
      @CrossOrigin(origins = “http://localhost:8080”,methods = RequestMethod.POST,allowCredentials = “true”)
    • 增加一个bean,重写WebMvcConfigurer
  • springmvc核心组件有哪些?

    • DispatcherServlet  中央控制器,把请求给转发到具体的控制类
    • HandlerMapping   映射处理器,负责映射中央处理器转发给controller时的映射策略
    • Controller      具体处理请求的控制器
    • ModelAndView    服务层返回的数据和视图层的封装类
    • ViewResolver    视图解析器,解析具体的视图
  • springmvc执行过程

    • 用户向服务器发送request请求,请求被SpringMVC中央控制器DispatcherServlet捕获;
    • DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping映射处理器,将请求发送给指定的Controller。
    • Controller执行完成后,将返回的数据信息封装到ModelAndView对象中,最后通过ViewResolver视图解析器选择一个合适的View 渲染视图返回界面。
  • mybatis缓存?

    • 一级缓存: 基于PerpetualCache 的HashMap 本地缓存,其存储作用域为
      Session,当Session flush 或close 之后,该Session 中的所有Cache 就
      将清空, 默认打开一级缓存。
    • 二级缓存与一级缓存其机制相同,默认也是采用PerpetualCache,HashMap
      存储,不同在于其存储作用域为Mapper(Namespace),并且可自定义存储源,
      如Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要
      实现Serializable 序列化接口(可用来保存对象的状态),可在它的映射文件中配置
    • 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存
      Namespaces)的进行了C/U/D 操作后,默认该作用域下所有select 中的缓存将
      被clear。
  • 面向对象和面向过程的异同

    • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
    • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为
    • 面向对象是以功能来划分问题,而不是步骤
  • 乐观锁和悲观锁的理解?

    • 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java 里面的同步原语synchronized 关键字的实现也是悲观锁。
    • 乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition 机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic 包下面的原子变量类就是使用了乐观锁的一种实现方式CAS 实现的。

3. 广州铭太信息科技有限公司

笔试都是JavaSE的简单题、面试中面试官要求实习要连续做一年,拒了

4. 广州八百方信息技术有限公司

  • 面试最后没过,有些题目忘了

面试

  • Mybatis是如何进行分页的?分页插件的原理是什么?

    • Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在 sql 内直接书写带有物理分页的参数来完成物理分页功能, 也可以使用分页插件来完成物理分页。
    • 分页插件的基本原理是使用 Mybatis 提供的插件接口, 实现自定义插件, 在插件的拦截方法内拦截待执行的sql,然后重写 sql,根据 dialect 方言,添加对应的物理分页语句和物理分页参数。
  • 抽象类(abstract class)和接口(interface)有什么异同?

    • 抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现, 否则该类仍然需要被声明为抽象类。
    • 接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。
    • 抽象类中的成员可以是 private、默认、 protected、public 的,而接口中的成员全都是 public 的。
    • 抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。
    • 有抽象方法的类必须被声明为抽象类, 而抽象类未必要有抽象方法。
  • 死锁以及如何避免?

    • Java 中的死锁是一种编程情况,其中两个或多个线程被永久阻塞,Java 死锁情况出现至少两个线程和两个或更多资源。
    • 产生死锁的必要条件:
      • 互斥条件
      • 请求与保持条件
      • 不剥夺条件
      • 循环等待条件
    • Java 发生死锁的根本原因是:在申请锁时发生了交叉闭环申请。
  • 死锁的原因

  • 多态概念

    • 多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。
    • 多态性分为编译时的多态性和运行时的多态性。
    • 方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。
  • 说说对SQL 语句优化有哪些方法?

  • 简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响?

    • 索引是一种特殊的文件( InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
    • 普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度。
    • 普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯一性。
    • 主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引, 主键用于唯一标识一条记录,使用关键字 PRIMARY KEY 来创建。
    • 索引可以覆盖多个数据列,如像 INDEX (columnA, columnB) 索引,这就是联合索引。
    • 索引可以极大的提高数据的查询速度,但是会降低插入、删除、更新表的速度,因为在执行这些写操作时,还要操作索引文件。
  • 什么情况下设置了索引但无法使用

    • 以" % " 开头的 LIKE 语句,模糊匹配
    • OR 语句前后没有同时使用索引
    • 数据类型出现隐式转化(如 varchar 不加单引号的话可能会自动转换为 int 型)
  • Vue与JQuery的异同

    • jQuery 是使用选择器($)选取 DOM 对象,对其进行赋值、取值、事件绑定等操作,其实和原生的 HTML 的区别只在于可以更方便的选取和操作 DOM 对象,而数据和界面是在一起的。
    • Vue 则是通过 Vue 对象将数据和View完全分离开来了。对数据进行操作不再需要引用相应的 DOM 对象,可以说数据和 View 是分离的,他们通过 Vue 对象这个 vm 实现相互的绑定。这就是传说中的 MVVM 。

5. 广东用友软件有限公司

  • 线上面试 – 7.19 20min 问题基本常见, 最后通过offer
  • 后面不想去了跟随项目走,是外派Java, 还是ERP,碰不到核心代码,实习学不到什么,不如自己再多学点拓展知识。

面试

  • MySQL优化问题

    • sql缓存

      • 用多个小表代替一个大表, 注意不要过度设计
      • 批量插入代替循环单条插入
      • 合理控制缓存空间大小,一般来说其大小设置为几十兆比较合适
      • 可以通过 SQL_CACHE 和 SQL_NO_CACHE 来控制某个查询语句是否需要进行缓存
      • 不要轻易打开查询缓存,特别是写密集型应用。如果你实在是忍不住,可以将 query_cache_type 设置为 DEMAND,这时只有加入 SQL_CACHE 的查询才会走缓存,其他查询则不会,这样可以非常自由地控制哪些查询需要被缓存
    • 索引

      • 索引类型大致分为:普通索引,唯一索引,主键索引,组合索引,全文索引
        • 普通索引:是最基本的索引,它没有任何限制。
        • 唯一索引:与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
        • 组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。
        • 主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引
        • 全文索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。
      • 索引优化
        • 只要列中含有NULL值,就最好不要在此例设置索引,复合索引如果有NULL值,此列在使用时也不会使用索引
        • 尽量使用短索引,如果可以,应该制定一个前缀长度
        • 对于经常在 where 子句使用的列,最好设置索引,这样会加快查找速度
        • 对于有多个列 where 或者 order by 子句的,应该建立复合索引
        • 对于 like 语句,以%或者 ‘-’ 开头的不会使用索引,以 % 结尾会使用索引
        • 尽量不要在列上进行运算(函数操作和表达式操作)
        • 尽量不要使用 not in 和 <> 操作
    • 表结构

      • 在查询时, MYSQL 只能使用一个索引,如果建立的是多个单列的普通索引,在查询时会根据查询的索引字段,从中选择一个
        限制最严格的单例索引进行查询。别的索引都不会生效。所以在创建表的时候,想要多个索引都生效的话用组合索引
      • 永远为每张表设置一个 ID 主键
      • 使用ENUM而不是 VARCHAR (原理:小的字段类型,偏移量就会小,效率会高很多)
      • 固定长度的表会更快
      • 垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。
      • 越小的列会越快
    • mysql 分层架构

    • sql 细节

      • 不要使用ORDER BY RAND()
        MySQL会不得不去执行RAND()函数(很耗CPU时间),而且这是为了每一行记录去记行,然后再对其排序
      • **避免使用SELECT ***
    • mysql 连接

  • 什么是依赖注入、控制反转?

    • Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指令。该元数据可以通过 XML,Java 注解或 Java 代码提供。
    • 在依赖注入中,您不必创建对象,但必须描述如何创建它们。您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。由 IoC 容器将它们装配在一起
  • 什么是AOP?

    • AOP(Aspect-Oriented Programming), 即 面向切面编程, 它与 OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角. 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面)
    • 在运行时, 动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
  • 什么是 Ajax,为什么要使用 Ajax

    • Ajax 指的是 异步 JavaScript 和 xml
    • 通俗理解:在网页中利用 XMLHttpRequest 对象和服务器进行数据交互的方式,就是 Ajax
    • 之前所学的技术,只能把网页做的更美观漂亮,或添加一些动画效果,但还是, Ajax 能让我们轻松实
      现 网页 与 服务器 之间的 数据交互
  • 面向对象的特征有哪些方面

    • 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
    • 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段
    • 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口
    • 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1).方法重写(子类继承父类并重写父类中已有的或抽象的方法);2).对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
  • 解释MySQL 外连接、内连接与自连接的区别

    • 先说什么是交叉连接:交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一个表的所有记录和另一个表中的所有记录一一匹配。
    • 内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。
    • 外连接 其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。
    • 左外连接,也称左连接,左表为主表,左表中的所有记录都会出现在结果集中,对于那些在右表中并没有匹配的记录,仍然要显示,右边对应的那些字段值以NULL来填充。右外连接,也称右连接,右表为主表,右表中的所有记录都会出现在结果集中。左连接和右连接可以互换,MySQL 目前还不支持全外连接。
  • 什么是Spring Boot?

    • 多年来,随着新功能的增加,spring 变得越来越复杂。只需访问 https://spring.io/projects 页面,我们就会看到可以在我们的应用程序中使用的所有 Spring 项目的不同功能。如果必须启动一个新的 Spring 项目,我们必须添加构建路径或添加 Maven 依赖关系,配置应用程序服务器,添加 spring 配置。因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。
    • Spring Boot 是解决这个问题的方法。Spring Boot 已经建立在现有 spring 框架之上。使用 spring 启动,我们避免了之前我们必须做的所有样板代码和配置。因此,Spring Boot可以帮助我们以最少的工作量,更加健壮地使用现有的 Spring功能。
  • 什么是 Spring

    • Spring 是一个开源应用框架,旨在降低应用程序开发的复杂度。它是轻量级、松散耦合的。它具有分层体系结构,允许用户选择组件,同时还为 J2EE 应用程序开发提供了一个有凝聚力的框架。它可以集成其他框架,如 Structs、Hibernate、EJB等,所以又称为框架的框架。
  • 索引的类型

  • 了解过的集合框架

    • ArrayList 与 LinkedList
      • 最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而LinkedList的底层数据结构书链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。
    • Hashtable 与 HashMap
      • Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的
      • Hashtable 是同步的,比较慢,但 HashMap 没有同步策略,所以会更快。
      • Hashtable 不允许有个空的 key,但是 HashMap 允许出现一个 null key。
  • List、Set、Map 和Queue 之间的区别

    • List 是一个有序集合,允许元素重复。它的某些实现可以提供基于下标值的常量访问时间,但是这不是 List 接口保证的。Set 是一个无序集合。
  • “a==b”和”a.equals(b)”有什么区别?

    • 如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true,而 a.equals(b)是进行逻辑比较,所以通常需要重写该方法来提供逻辑一致性的比较。例如,String 类重写equals() 方法,所以可以用于两个不同对象,但是包含的字母相同的比较。

参考
mysql 优化问题


结尾

太久了,找实习工作告一段落!!多面面
剩下一段时间,学一学微服务、分布式的知识,再冲!!!

2021.7.3 - 2021.7.19 记录!

猜你喜欢

转载自blog.csdn.net/weixin_44695700/article/details/119093008