人生第一次面试之依托答辩

今天收到人生的第一场面试,是东华软件集团。答的那是依托答辩,就面了20分钟,还没考算法。其实依托答辩的效果是意料之中的,这次面试也只是想练练手。

目录

静态变量什么时候加载的?

重写和重载有什么区别?

如何优化sql?

索引过多会怎样?

not in可以用什么代替?

讲一下ArrayList和LinkedList?

讲一下hashmap和treemap?

SpringBoot核心注解?

微服务中gateway的作用?

讲讲mysql中的分页查询?

linux查看进程命令

linux查看日志命令:

对未来有什么规划?

期望实习薪资多少?


自我介绍

“从大一开始学习Java,一路学习Java基础,javaweb,ssm,springboot,springcloud,包括相关中间件,了解设计模式,大三开始准备考研,刚考完研准备找份实习”

静态变量什么时候加载的?

这题没见过,真不会,一下子就慌了,就随便说了句类加载的时候吗?她一听立马换下一道题了。

正确答案:

     Java中的静态变量在类加载阶段被初始化。当Java虚拟机(JVM)加载类时,它会执行类的初始化过程,它包括为静态变量分配内存并赋予默认值或者显示指定的初始值。具体来说,以下事件发生时静态变量会被加载:

    1.首次主动使用类:当程序首次通过以下方式之一访问某个类时,会触发该类的初始化,从而加载静态变量:

     -创建类的实例(即new一个对象)

     -访问类的静态或静态字段

     -使用反射来访问类中的任何成员

     -初始化该类的子类(这会导致父类也被初始化)

     -将该类作为参数传递给java.lang.invoke.Methodhandle.Lookup的查找方法

    -调用某些反射方法,比如Class.forName()加载类时,如果没有指定ClassLoder且该类还未初始化。

   2.静态内部类的加载: 如果静态变量位于静态内部类中,那么这个静态内部类会在其首次引用时加载,即使外部类之前已经加载过。

      静态变量的加载和初始化发生在类的构造器方法中,该方法是由编译器根据类中的静态变量赋值语句和静态代码块自动生成的。这个过程保证了静态变量在类的任何实例(对象)创建之前就已经准备就绪,并且静态变量方法只被初始化一次。

    总结来说,静态变量的加载时机与类的初始化时机紧密相关,是在首次被JVM主动使用时完成的。

重写和重载有什么区别?

我心想坏了,这肯定是刚才答得不好,开始瞧不起我了,大一就知道的题都问出来了。

“重写就是对原来的方法直接重新写过,比如toSrting()方法,本来原来是有一个方法体的,重写之后就会按照你重写的方法进行string格式的编写,重载是通过修改参数的类型和个数以及返回值类型来创建一个同名的方法”,她反问“返回值类型不同也是重载吗”,我答“是啊”。

犯了根本错误:返回值类型不同不是重载!

正确答案:

       方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。

如何优化sql?

  这道题见过很多次,但是记不起来了。“避免使用联表查询,对于经常使用的列可以建立索引,emm...暂时只能想到这些”

正确答案:

(1)表设计优化

          1.比如设置合适的数值(tinyint int bigint),要根据实际情况选择

          2.比如设置合适的字符串(char和varchar)char定长效率高,varchar可变长度,效率稍低

(2)SQL语句的优化

           1.select语句务必指明字段名称(避免使用select *)

           2.SQL语句要避免造成索引失效的写法

           3.尽量使用union all代替union union会多一次过滤,效率低

            4.避免在where子句中对字段进行表达式操作

             5.jion优化 能用innerjoin就不用left join right join,如果必须使用一定要以小表为驱动,内                    连接会对两个表进行优化,优先把小表放外边,大表放里边。left join或right join不会重                   新调整顺序

索引过多会怎样?

不知道,又是乱说了一句“会导致回表查询效率变慢”

正确答案:

1. 写操作性能下降
插入(INSERT)、更新(UPDATE)、删除(DELETE)等写操作会因为索引的增多而变得更为耗时,因为每次写操作都需要同步更新索引,特别是在频繁写操作的情况下。

2. 存储空间占用增加
每个索引都需要占用一定的存储空间,当索引过多时,会占用大量的存储空间,增加数据库的整体存储需求。

3. 查询性能下降
虽然索引可以加速查询操作,但过多的索引可能会导致索引的失效,使得数据库优化器很难选择到最合适的索引,从而导致查询性能下降。此外,索引过多也可能导致索引之间相互竞争,加剧查询性能下降。

4. 索引维护成本增加
随着索引数量的增加,数据库的索引维护成本也会相应增加。维护成本包括索引的创建、更新、重建和删除等操作,可能需要消耗较多的系统资源和时间。

5. 索引选择困难
当存在大量的索引时,数据库优化器在选择最佳的索引时可能会变得更加困难,这可能导致查询执行计划的选择不够有效,进而影响查询性能。

因此,合理地设计和维护索引对于数据库的性能是非常重要的,应尽量避免过多的索引,而是根据实际的查询需求和数据访问模式选择合适的索引来优化数据库性能。

not in可以用什么代替?

“不知道”

正确答案:

1.使用 LEFT JOIN 和 IS NULL

第一种替代方案是使用 LEFT JOIN 和 IS NULL。我们可以通过将要排除的值列表作为另一张表的数据,然后通过 LEFT JOIN 操作将两张表连接起来,最后使用 IS NULL 来获取不在列表中的值。

SELECT employee.id, employee.name
FROM employee
LEFT JOIN terminated_employee
ON employee.id = terminated_employee.id
WHERE terminated_employee.id IS NULL;

2.使用 NOT EXISTS

NOT EXISTS 是一种条件表达式,用于判断一个子查询的结果是否为空。我们可以使用 NOT EXISTS 来排除某个表中的一组值。

SELECT *
FROM orders o
WHERE NOT EXISTS (SELECT *FROM excluded_products eWHERE o.product_id = e.product_id
);

3.使用 LEFT JOIN 和 CASE WHEN

第三种替代方案是使用 LEFT JOIN 和 CASE WHEN。我们可以通过将要排除的值列表作为另一张表的数据,然后通过 LEFT JOIN 操作将两张表连接起来,最后使用 CASE WHEN 来判断列表中的值是否为空,进而实现排除的效果。

讲一下ArrayList和LinkedList?

终于到一道会的题了,“Arraylist底层是动态数组,LinkedList底层是双向链表,所以ArrayList可以用下标访问,而LinkedList不能用下标访问,查询时间复杂度为O(n),但ArrayList的删除和添加需要移动元素,时间复杂度为O(n),LinkedList只用改指针效率更高,所以经常访问的数据适合用ArrayList经常删除和添加的数据适合用LinkedList,他们都是线程不安全的"

这道题正确答案和这差不多

讲一下hashmap和treemap?

hashmap知道,treemap不知道。“hashmap底层是数组加链表,当链表长度大于8且数组长度大于64是链表会变成红黑树,treepmap底层是数组加树(treemap完全乱说的)”

正确答案:

1.相同点
首先,它们都是Java集合框架中的重要成员,都实现了Map接口,因此具有Map接口的基本功能,如存储键值对、根据键查找值等。

其次,它们都能够存储null键和null值(尽管在实际应用中,HashMap对null键和null值的处理更为宽松,而TreeMap则会在某些情况下抛出异常)。

最后,它们都是线程不安全的,如果在多线程环境下使用,需要额外的同步措施来保证线程安全。

2.不同点

(1)存储结构:
HashMap采用了哈希表的结构,通过哈希函数将键映射到表中的某个位置。这种结构使得HashMap在查找、插入和删除操作上都有着极高的效率,但同时也意味着它无法保持数据的有序性。而TreeMap则采用了红黑树的结构,通过比较器对键进行排序。这种结构使得TreeMap在保持数据有序性的同时,也能够在一定程度上保证查找、插入和删除操作的效率。

(2)时间复杂度:
HashMap的查找、插入和删除操作的时间复杂度都是O(1)(在理想情况下,即哈希函数分布均匀且没有哈希冲突时)。然而,在实际应用中,由于哈希冲突和链表或红黑树转换的影响,这些操作的时间复杂度可能会上升到O(n)。相比之下,TreeMap的查找、插入和删除操作的时间复杂度都是O(log n),因为它需要维护红黑树的平衡性。

(3)有序性:
正如前面所说,HashMap是无序的,它无法根据键的自然顺序或自定义比较器对键值对进行排序。而TreeMap则是有序的,它可以根据键的自然顺序或自定义比较器对键值对进行排序。这种有序性使得TreeMap在需要保持数据有序性的场合中更加适用。

SpringBoot核心注解?

没听过springboot核心注解,讲了一些常见的注解什么controller,mappaing,congfiguration,autowired,value等等

正确答案:

1.@SpringBootConfiguration
声明为配置类(根配置类,首先扫描该类,本身是一个IOC容器的配置类),将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到spring容器中,并且实例名就是方法名。
SpringBoot使用Java Config技术进行配置,Java Config使用注解和Java代码的方式代替xml配置文件

  • 任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。
  • 任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id

2.@ComponentScan

自动扫描当前包及子包下被@Component,@Controller,@Service,@Repository注解标记的类,将其作为bean加载到IOC容器中。
不指定范围则默认从注解所在类的包下进行扫描。

3.@EnableAutoConfiguration

核心注解,是自动配置的入口,SpringBoot根据添加的jar包来进行项目的默认配置

微服务中gateway的作用?

“将不同请求转发到对应的微服务上“

正确答案:

1.路由转发

在spring cloud gateway中我们可以自定义路由,将请求根据不同的路径或条件转到相应的下游服务中去。这对整个微服务架构中的服务管理来说非常简单、高效。

2.负载均衡
因为网关是做路由转发的,所以在网关中可以很方便的实现负载均衡。Spring Cloud官方默认的是采用spring-cloud-loadbalancer组件,如上面的代码中uri: lb://customer-service, 就是采用默认的负载均衡算法,请求到customer-service集群。

3.统一鉴权
在gateway中我们可以集成spring security和JWT等安全框架,进行统一的登录和鉴权。在网关中任何一个请求,我们都会先判断当前请求的用户是否已经登录,如果没有登录则会路由到登录页面进行登录,如果已经登录了则会继续鉴权,判断当前用户是否有访问该接口的权限,如果鉴权成功则会将请求路由给对应的服务进行处理。

4.流量的过滤
就像之前的统一鉴权一样,我们也可以基于网关做一些流量的过滤,比如一些恶意流量的过滤、黑名单的过滤。

5.限流降级
在网关中我们还可以做限流降级,目前官方推荐我们使用resilience4j组件来进行限流。这样我们就可以在网关层面进行流量的统一管控,从而避免大量的流量压垮我们的服务集群。

6.解决跨域的问题
在微服务架构中,我们的服务通常都会分布在不同的域中。Spring Cloud Gateway提供了跨越请求支持,使得不同域中的服务可以进行安全的通讯。

spring cloud gateway就是一个流量的统一入口,所以它能做很多事情,如路由转发、负载均衡、统一鉴权和限流等保护服务的机制。

但是,另外一方面作为所有流量的入口,网关会处理大量的请求,容易成为我们系统的瓶颈。所以,我们需要对资源进行合理的分配,做好网关应用的监控,如发现异常需及时进行处理。

讲讲mysql中的分页查询?

“利用limit关键字,要传两个参数,一个是每页的数据条数,总的数据条数,底层不太了解”

大错特错!

正确答案:

select * from table order by id limit m, n;

查询m+n条记录,去掉前m条,返回后n条。无疑该查询能够实现分页,但m越大,查询性能就越低,因为MySQL需要扫描全部m+n条记录。

SELECT * FROM table_name ORDER BY id LIMIT 10 OFFSET 1000;

查询返回从第1001条记录开始的10条记录。这种方法在数据量小或中等时效果良好,但在数据量非常大的情况下,性能会显著下降。

linux查看进程命令

“不知道”

正确答案:

1.静态查看进程

ps aux #查看进程使用情况
ps aux | less # 查看进程使用情况,考虑到显示过多,使用分管符和less命令查看
ps aux --sort CPU #查看进程使用情况,并按照CPU的使用率升序排列
ps aux --sort -CPU #查看进程使用情况,并按照CPU的使用率降序排列
ps aux --sort rss #查看进程使用情况,并按照内存的使用升序排列
ps aux --sort -rss  #查看进程使用情况,并按照内存的使用降序排列
ps -ef | grep XXX #查看指定的进程是否开启
ps axo user,pid,ppid……  #查看进程,并且只查看后面列举出的信息

2.动态查看进程

top命令可以动态查看进程,top命令常用参数如下:
-d 表示刷新的时间间隔,单位为s
-p 表示查看指定PID的进程
-u 表示查看指定用户的进程
-n 表示top刷新指定次数后退出

top -d 1
top -p 100
top -n 3 >123.txt
top -u nginx

linux查看日志命令:

“不知道,linux命令这块实在不太了解”

正确答案:

1tail

tail -n 10 test.log 查询日志尾部最后10行的日志;
tail -n +10 test.log 查询10行之后的所有日志;
tail -fn 10 test.log 循环实时查看最后1000行记录(最常用的)
tail -fn 1000 test.log | grep '关键字'
tail -n 4700 aa.log |more -1000 可以进行多屏显示(ctrl + f 或者 空格键可以快捷键)

 2、less

less log.log
shift + G 命令到文件尾部 然后输入 ?加上你要搜索的关键字例如 ?1213
按 n 向上查找关键字
shift+n 反向查找关键字
less与more类似,使用less可以随意浏览文件,而more仅能向前移动,不能向后移动,而且 less 在查
看之前不会加载整个文件。
less log2013.log 查看文件
ps -ef | less ps查看进程信息并通过less分页显示
history | less 查看命令历史使用记录并通过less分页显示
less log2013.log log2014.log 浏览多个文件

参数:

less与more类似,使用less可以随意浏览文件,而more仅能向前移动,不能向后移动,而且 less 在查
看之前不会加载整个文件。
less log2013.log 查看文件
ps -ef | less ps查看进程信息并通过less分页显示
history | less 查看命令历史使用记录并通过less分页显示
less log2013.log log2014.log 浏览多个文件
常用命令参数:
-b <缓冲区大小> 设置缓冲区的大小
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
h 显示帮助界面
q 退出less 命令

3.vi

vi test.log 
命令模式下敲斜杆( / ) 
屏幕右下角出现了 "/" 
然后输入你要查找的关键字敲回车就可以了。 
如果你要继续查找此关键字,敲字符 n 就可以继续查找了。
敲字符N(大写N)就会向前查询;如何退出查询:
按住 Esc 然后 :q!  

对未来有什么规划?

 “赶紧找个实习,后面好找工作”

期望实习薪资多少?

“只要能活就行,2千3千都行”

”面试结束“。“啊,不考道算法吗”。“不用了,一周之内面试通过会给你打电话”,“好的,谢谢,这是我第一次面试,我知道效果不好,这也意料之中,感谢您和您公司给我一次面试的机会,谢谢。”“好的,再见”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/892161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩机搞机基本常识-------列举安卓机型一些不常用的adb联机命令

前面分享过很多 常用的adb命令&#xff0c;今天分享一些不经常使用的adb指令。以作备用 1---查看当前手机所有app包名 adb shell pm list package 2--查看当前机型所有apk包安装位置 adb shell pm list package -f 3--- 清除指定应用程序数据【例如清除浏览器应用的数据】 …

【25考研】川大计算机复试情况,重点是啥?怎么准备?

24年进入复试的同学中&#xff0c;有10位同学的复试成绩为0分。具体是个人原因还是校方原因&#xff0c;还尚不明确。但是C哥提醒&#xff0c;一定要认真复习&#xff01;复试完后不要跟任何人讨论有关复试的题目及细节&#xff01; 一、复试内容 四川大学复试内容较多&#xf…

计算机的错误计算(二百零五)

摘要 基于一位读者的问题&#xff0c;提出题目&#xff1a;能用数值计算证明 吗&#xff1f;请选用不同的点&#xff08;即差别大的数&#xff09;与不同的精度。实验表明&#xff0c;大模型理解了题意。但是&#xff0c;其推理能力值得商榷。 例1. 就摘要中问题&#xff0…

回归预测 | MATLAB实GRU多输入单输出回归预测

回归预测 | MATLAB实GRU多输入单输出回归预测 目录 回归预测 | MATLAB实GRU多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 回归预测 | MATLAB实GRU多输入单输出回归预测。使用GRU作为RNN的一种变体来处理时间序列数据。GRU相比传统的RNN有较好的记…

unity学习12:地图相关的一些基础2, 增加layer种草种树

目录 参考学习 1 地图设置 1.1 上次制作的地图&#xff0c;稍微加点地形完善下. 1.2 调整下camera 1.3 摄像机camera的移动速度 1.4 地图属性&#xff0c;terrain settings 1.5 但是&#xff0c;地图看起来像沙漠一样&#xff0c;很单调 2 paint terrain / paint textu…

数据挖掘——数据预处理

数据挖掘——数据预处理 数据预处理数据预处理 ——主要任务数据清洗如何处理丢失的数据如何处理噪声数据如何处理不一致数据 数据集成相关分析相关系数(也成为皮尔逊相关系数)协方差 数据规约降维法&#xff1a;PCA主成分分析降数据——抽样法数据压缩 数据预处理 数据预处理…

Python入门教程 —— 网络编程

1.网络通信概念 简单来说,网络是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。 使用网络的目的,就是为了联通多方然后进行通信,即把数据从一方传递给另外一方。 前面的学习编写的程序都是单机的,即不能和其他电脑上的程…

鸿蒙APP之从开发到发布的一点心得

引言&#xff1a; 做鸿蒙开发大概有1年左右时间了&#xff0c;从最开始的看官方文档、看B站视频&#xff0c;到后来成功发布两款个人APP&#xff08;房贷计算极简版、时简时钟 轻喷&#xff0c;谢谢&#xff09;。简单描述一下里边遇到的坑以及一些经历吧。 学习鸿蒙开发 个…

力扣刷题:数组OJ篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.消失的数字&#xff08;1&#xff09;题目描…

linux下多个硬盘划分到同一挂载点

Linux下多个硬盘划分到同一挂载点 需要明确的几个概念 物理卷: 物理卷是物理存储设备&#xff08;如硬盘分区、整个硬盘、RAID 阵列等&#xff09;在逻辑卷管理&#xff08;LVM - Logical Volume Manager&#xff09;系统中的抽象表示。它是构建逻辑卷组的基本单元 假设我们有…

2.STM32F407ZGT6-外部中断

参考&#xff1a; 1.正点原子。 前言&#xff1a; MCU最重要的一个领域–中断。总结下嵌套向量和外部中断的概念。达到&#xff1a; 1.NVIC是什么&#xff0c;了解中断的整体管理理念。 2.中断里面最简单的外部中断&#xff0c;怎么配置处理。 3.使用STM32CubeMX配置外部中断的…

《HeadFirst设计模式》笔记(下)

代理模式 代理要做的就是控制和管理访问。 你的客户对象所做的就像是在做远程方法调用&#xff0c;但其实只是调用本地堆中的“代理”对象上的方法&#xff0c;再由代理处理所有网络通信的低层细节。 Java的RMI提供了客户辅助对象和服务辅助对象&#xff0c;为客户辅助对象…

【学Rust开发CAD】1 环境搭建

文章目录 一、搭建C/C编译环境二、安装Rust三、配置 PATH 环境变量四、验证安装结果五、安装编辑工具 一、搭建C/C编译环境 Rust 的编译工具依赖 C 语言的编译工具&#xff0c;这意味着你的电脑上至少已经存在一个 C 语言的编译环境。如果你使用的是 Linux 系统&#xff0c;往…

【Linux系列】Vim 编辑器中的高效文本编辑技巧:删除操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python爬虫与1688图片搜索API接口:深度解析与显著收益

在电子商务的浩瀚海洋中&#xff0c;数据是驱动业务决策的核心引擎。阿里巴巴旗下的1688平台&#xff0c;作为全球领先的B2B在线市场&#xff0c;不仅汇聚了海量的商品信息&#xff0c;还提供了丰富的API接口&#xff0c;为开发者提供了强大的数据获取工具。本文将深入探讨1688…

IDEA 字符串拼接符号“+”位于下一行的前面,而不是当前行的末尾

效果图 IDEA 默认效果是“历史效果”&#xff0c;经过修改后为“预期效果” 设置方式 在设置中找到Editor > Code Style > Java > Wrapping and Braces > Binary expressions > 勾选 Operation sign on next line 即可实现。具体设置如图。

/src/utils/request.ts:axios 请求封装,适用于需要统一处理请求和响应的场景

文章目录 数据结构解释1. 核心功能2. 代码结构分析请求拦截器响应拦截器 3. 改进建议4. 总结 console.log(Intercepted Response:, JSON.stringify(response));{"data": {"code": 0,"msg": "成功","data": {"id":…

基于FPGA的洗衣机控制器电子定时器

文章目录 功能描述 一、框架 二、verilog代码 控制模块实现 三、视频上板效果展示 功能描述 &#xff08;1&#xff09;定时启动正转20秒暂停10秒反转20秒暂 停10秒&#xff0c;定时未到回到“正转20秒暂停10秒……”&#xff0c;定时到则停止; 若定时到&#xff0c;则停…

大数据技术 指令笔记1

3.cd命令 cd命令用来切换工作目录至DirName。其中DirName表示法可为绝对路径或相对路径 例如&#xff1a; cd/ 切换到根目录 cd 切换到家目录 cd /etc/sysconfig/ 切换到/etc/sysconfig目录 cd .. 返回到父目录 4.Is命令 Is命令用来列出文件或…

Android 性能优化:内存优化(实践篇)

1. 前言 前一篇文章Android性能优化&#xff1a;内存优化 &#xff08;思路篇&#xff09; 大概梳理了Android 内存原理和优化的必要性及应该如何优化&#xff0c;输出了一套短期和长期内存优化治理的SOP方案。 那么这一篇文章就总结下我最近在做内存优化如何实践的&#xff0…