面试题总结-2

1.抽象类与接口的区别

1.抽象类和接口都不能被实例化。
2.抽象类要被子类继承,接口要被实现。
3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通成员变量。
4.抽象类里可以没有抽象方法。
5.接口可以被类多实现(被其它接口多实现),抽象类只能被单继承。
6.接口中没有this指针,没有构造函数,不能拥有实例字段(实例变量)或实例方法。
7.抽象类不能在Java8的lamba表达式中使用。

2.string、stringbuffer、strinbuilder的区别

String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

3.如果保证多线程下,t1,t2,t3顺序执行

t2线程在run方法中调用t1.join();引用t1线程,t2线程会等待t1线程执行完成后开始执行。在t3线程中的run方法调用t2.join(),等待t2线程执行完成后执行。

4.为什么是调用线程的start启动线程而不是run方法

图片来源网络

不管使用哪一种方式,启动线程都是thread.start()方法,如果你做过实验的话,你会发现 thread.run()也可以执行,为什么就一定需要调用thread.start()方法呢?
先说说结论:首先通过对象.run()方法可以执行方法,但是不是使用的多线程的方式,就是一个普通的方法,要想实现多线程的方式,一定需要通过对象.start()方法。
Java 中实现真正的多线程是 start 中的 start0() 方法,run() 方法只是一个普通的方法。

5.thread,和runnable的区别。

1、Runnable适合于多个相同程序代码线程去处理统一资源的情况,把虚拟的cpu(线程)同程序的代码,数据有效分离,较好体现面向对象的编程的思想
2、Runnable可以避免由于java的单继承机制带来的局限。可以再继承其他类的同时,还能实现多线程的功能。
3、Runnable能增加程序的健壮性。代码能够被多个线程共享。

1.你在使用shiro框架配置权限的一个流程。

https://www.cnblogs.com/guitu18/p/11258089.html
https://www.cnblogs.com/jpfss/p/8352031.html  流程

2.使用rabbitmq做了哪些功能

https://www.cnblogs.com/zhao-yi/p/9299126.html

3.使用工作流过程中如何传递数据

https://www.cnblogs.com/liulun/archive/2010/02/27/1674960.html

4.与第三方接口的数据对接,和使用一些第三方接口

https://blog.csdn.net/yaheng100/article/details/81779849/?utm_term=%E7%AC%AC%E4%B8%89%E6%96%B9%E6%8E%A5%E5%8F%A3%E6%80%8E%E4%B9%88%E5%AF%B9%E6%8E%A5&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-2-81779849&spm=3001.4430

5.你对人员管理系统这种是否熟悉,就是一个人员关联了部门然后存在权限过滤还有其它的,你在项目中使用的导入导出,文件上传,下载。ftp文件传输。

https://blog.csdn.net/weixin_43007075/article/details/103812380
https://blog.csdn.net/Kingson_Wu/article/details/84630359
https://blog.csdn.net/u012562411/article/details/86986602
https://blog.csdn.net/qq_30156781/article/details/54949149

6.你对使用linux命令是否熟悉

https://blog.csdn.net/weixin_43215948/article/details/108307119

7.离职的原因

个人原因,

1.抽象类和接口的区别

1.抽象类和接口都不能被实例化。
2.抽象类要被子类继承,接口要被实现。
3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通成员变量。
4.抽象类里可以没有抽象方法。
5.接口可以被类多实现(被其它接口多实现),抽象类只能被单继承。
6.接口中没有this指针,没有构造函数,不能拥有实例字段(实例变量)或实例方法。
7.抽象类不能在Java8的lamba表达式中使用。

2.冒泡排序算法

/**
      * 冒泡排序
       * 循环比较相邻的两个数,将较大的数放在后面
      * @param nums 待排序数值序列
       */
      private static int[] bubbleSort(int[] nums) {
          int len = nums.length;
          if(len == 0 || len == 1) {
              return nums;
         }
         for(int i = 0; i < len; i++) {
             for(int j = 0, subLen = len - 1 - i; j < subLen; j++) {
                 if(nums[j + 1] < nums[j]) {
                     int tmp = nums[j + 1];
                    nums[j + 1] = nums[j];
                     nums[j] = tmp;
                 }
             }
         }
         return nums;
     }

3.sql分组查询

--根据部门分组,计算部门下工资总数,平均工资,最高工资
select departmant,group_concat(salary),sum(salary),avg(salary) 平均工资,max(salary) 最高工资 from employee group by departmant;

--查询每个部门的部门名称以及每个部门的人数
select departmant,group_concat('name'),count(*) from employee group by departmant;

4.说下你用rabbitmq做过哪些功能,对它的理解,生产者模式和消费者模式。

https://www.jianshu.com/p/c69e1fe9d069
生产者,消费者模式
https://blog.csdn.net/chengqiuming/article/details/103795895

5.说下你对缓存的理解,运用,使用场景

https://blog.csdn.net/weixin_43167418/article/details/110789923

6.sql优化。索引的一些问题

1.表连接数
连接的表越多,性能越差
可能的话,将连接拆分成若干个过程逐一执行
优先执行可显著减少数据量的连接,既降低了复杂度,也能够容易按照预期执行
如果不可避免多表连接,很可能是设计缺陷
外链接效果差,因为必须对左右表进行表扫描
尽量使用inner join查询
2.使用临时表
如果不可避免,可以考虑使用临时表或表变量存放中间结果。
3.少用子查询

sql语句优化:
1.尽量避免使用is null、is not null,这样会让mysql引擎放弃是用索引
2.。。。。。xmly。


索引面试问题:
https://www.cnblogs.com/williamjie/p/11187470.html

7.你对vue这些前端框架的理解

https://zhuanlan.zhihu.com/p/98521439

8.你是如何实现服务与服务之间的通信的


9.你对java的spring框架、springmvc等等这些框架的理解。

https://blog.csdn.net/qq_27607965/article/details/82181072

10.你对于排查报错的方式、步骤?

首先f12看请求参数和响应码,参数是否合法,正确(是否有权限请求url)
响应码404,400开头等等,断定是前端的错误,请求地址或者是参数格式等等。
还可以通过查看console控制台是不是js的报错,如果是就定位到对应报错的js文件进行调试
响应码是500开头,多半是后台报错,根据network的请求记录查看对应请求的url,参数,错误响应信息。
后台报错可以在后台的console控制台看报错信息,和报错前的请求路径。根据报错信息指出的具体报错代码定位,进行调试查看。
https://blog.csdn.net/w605283073/article/details/89197668

11.数据库的设计模式

数据库设计四种主要设计模式的一般使用原则
1.主扩展模式
主扩展模式通常用来将几个相似的对象的共有属性抽取出来,形成一个”公共属性表“,且“公共属性表”与“专有属性表”是“一对一”的关系。
 “专有属性表”可以看做是“公共属性表”的 扩展,两者合在一起就是对一个特定对象的完整描述,故此得名“主扩展模式”。
对象的个数不多;各个对象之间的属性有一定差别;各个对象的属性在数据库设计阶段能够完全确定;各个扩展对象有独立的、相对比较复杂的业务处理需求,此时用“主扩展模式”。将各个对象的共有属性抽取出来设计为“主表”,将各个对象的剩余属性分别设计为相应的“扩展表”,“主表”与各个“扩展表”分别建立一对一的关系。
 2.主从模式
主从模式,是数据库设计模式中最常见,也是大家日常设计工作中用的最多的一种模式,他描述了两个表之间的主从关系,是典型的一对多关系。
对象的个数较多且不固定;各个对象之间的属性几乎没有差异;对象的属性在数据库设计阶段能够完全确定;各个对象没有独立的业务处理需求,此时用“主从模式”。将各个对象设计为“从表”的记录,与“主表”对象建立一对多的关系。
 3.名值模式
名值模式,通常用来描述在系统设计阶段不能完全确定属性的对象,这些对象的属性在系统运行时会有很大的变更,或者是对个对象之间的属性存在很大的差异。 
对象的个数极多;各个对象之间的属性有较大差异;对象属性在数据库设计阶段不能确定,或者在系统运行时有较大变更;各个对象没有相互独立的业务处理需求,此时用“名值模式”。
 4.多对多模式
多对多模式,也是比较常见的一种数据库设计模式,他所描述的两个对象部分主次,地位对等,互为一对多关系。
多对多模式需要在两个表之间建立一个关联表,这个关联表是多对多关系的核心。
两个对象之间互为一对多关系,则使用“多对多模式”。

12.数据库的分库分表

https://www.cnblogs.com/mfmdaoyou/p/7246711.html

13.什么是负载均衡?什么是高可用?说说常见的负载均衡案例!

https://blog.51cto.com/u_14257804/2423540

14.你对linux部署项目是否熟悉,是否熟悉linux命令

https://blog.csdn.net/weixin_30399821/article/details/94866087

15.你对docker的了解

https://www.cnblogs.com/baxianhua/p/9728891.html

16.集群分布式

https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/107526523

16.如何处理高并发的一个场景

https://www.cnblogs.com/heikedeblack/p/14373658.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值