关于面试的一些总结,仅供参考,希望大家指正投入学习

什么是循环依赖?

循环依赖是指两个类中的属性各自依赖对方,比如A类中有B属性,B类中有A属性,这样造成spring实例化其中一个类时,发现要填充的属性的时候,要去实例化一个类B,而填充另外一个类B属性A的时候又发现需要原来的那个类A,导致循环依赖,无限创建,到达一个阈值的会发生栈溢出。

如何解决循环依赖?

可以利用缓存机制解决循环依赖问题,但仅限于单例情况,

消息队列的作用?

1.消息队列简介

MQ(message queue),消息队列是一种应用程序的通信方法,应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。

消息队列的中间件是分布式系统中的重要组件,主要解决应用耦合,异步消息,流量削峰。

二、解耦

在这里插入图片描述

在这里插入图片描述

三、异步

先来一个场景,用户注册后,需要发注册邮件和注册短信

传统做法:

​ a.串行:将注册信息写入数据库成功后,发送注册邮件,再发送注册短信

在这里插入图片描述

​ b.并行:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信

在这里插入图片描述

使用消息队列

  • 将不是必须的业务逻辑,异步处理。改造后的架构如下:

在这里插入图片描述

四、削峰

在这里插入图片描述 在这里我们增加一个消息队列,这样的话不管你请求来多少,我先存入消息队列,然后我再让系统慢慢的处理你的请求 (按排好队的顺序进行消息处理,和排队做核酸一样,井然有序的处理)。

工单为什么没有和订单设计成同一个数据库里面?

订单表是我们项目里面数据量最多的一个,如果把工单表和订单表放在一起,会影响订单数据的插入效率和性能,所以就分开没有放在一个数据库里

为什么会有自动工单?有什么意义呢?

主要是为了降低运营以及人力成本,自动工单可以分为自动维修工单和自动补货工单两种。自动维修工单是指当设备出现故障后,自动创建维修工单。自动补货工单是每天凌晨扫描售货机的货道,根据货道的商品库存,自动的创建补货工单。

自动维修工单是怎么实现的?

自动运维工单:售货机会自动检测,如果发现某一个部件坏了,就会向MQ里面发送消息 ,发送报文,然后工单服务就会订阅这个主题,收到这个消息之后根据报文创建维修工单,创建后会指定当前售货机所在区域的工作量最少的维修人员进行维修。

自动补货工单是怎么实现的?

自动运营工单:在xxl-job里面做定时任务,在凌晨的时候开始扫描我们的售货机,看看哪些售货机需要补货,把这些需要补货的售货机的信息扫描出来,然后把这些信息发给MQ,工单微服务就会订阅这些消息,拿到这些数据就知道哪些售货机需要补货,就会创建运营工单指派给当前区域工作量最少的工作人员进行补货。(这里我们用到的技术就是xxl-job的一个进行自动化工单的的处理技术。并且还用到了xxl-job分片策略扫描需要补货的售货机。)

项目组有多少人 ?人员构成是什么?

我们项目组有1个项目负责人,1个架构师 、 4个后端开发、2个前端开发1个产品经理、1个UI设计、2个测试、1个运维。

选择kafka和rabbimq的场景是?

如果在一个项目中,是用到大数据采集,然后吞吐量高的话,那么就选择kafka,

吞吐量低则两者都可选择。

kafka是分布式流平台,对实时数据流进行处理,比如点赞然后要进行统计,那么不断有人点赞就不断统计,就用到实时流进行处理,(日志领域成熟

一般只做异步,吞吐量不高的话都会选择rabbitmq做消息中间件

redis为什么查询快?

一个它是基于内存,读写速度快。

二它是C语言编写的,

三是单线程,可以没有其他线程干扰,可以快速的执行。

IO多路复用,IO多路复用(IO Multiplexing)是指单个进程/线程就可以同时处理多个IO请求。

springcloud的工作原理是什么?

首先我们要了解springcloud的工作原理,必须要了解微服务中的几个重要组件,

服务注册与发现(nacos):微服务一启动,就将所有的微服务信息注册到nacos上,

服务消费feign:构造服务地址,进行微服务之间的调用。

负载均衡ribbon:会根据负载均衡策略进行机器的选择。

网关:gateway,这个组件是负责网关路由的,可以做一些认证鉴权,安全限流等等。

总的操作是这样的,当服务一启动,所以微服务会将信息注册到nacos,

那么当我们要调用某一个微服务

首先根据ribbon会去拉取服务注册表,然后使用默认的轮询算法,从中选择一台机器,然后feign会针对这个机器,根据接口上的@RequestMapping @feignclient @pathvariable等注解, 构造微服务地址并发起请求。从而实现微服务之间的调用

img

https://blog.csdn.net/qq_41701956/article/details/83829539?ops_request_misc=&request_id=&biz_id=102&utm_term=springcloud%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-83829539.nonecase&spm=1018.2226.3001.4187(springcloud的工作原理)

ribbon的负载均衡策略:

轮询策略、随机策略、根据响应时间的分配策略、可用性策略

如何保证 Redis 的高并发?

redis通过主从架构,实现读写数据分离,主节点负责写,并将数据同步到其他数据节点,从节点负责读,从而实现高并发。

Redis 如何保证原子性?

在业务中常见的业务有先get后set,在并发下会导致数据不一致,

incrdecrsetnx 等原子操作; 或者是客户端加锁,使用lua脚本实现cas操作

Redis 有哪些数据结构?

  • 字符串 String
  • 字典 Hash
  • 列表 List
  • 集合 Set
  • 有序集合 Zset

武汉佰钧成面试问题

@Autowired 与@Resource的区别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9CUjNiu5-1663770279096)(C:\Users\ADMINI~1\AppData\Local\Temp\1662467520654.png)]

1.首先这两个注解都是可以用来装配bean的,都可以写在属性上,**@Autowired **根据类型来装配的

2.@Resource则默认格局名称来进行装配,如果没有指定name属性,当注解写在字段上时,默认取字段名进行装配名称查找 ,作用是差不多的,只不过resouce有两个属性比较重要,分是name和type ,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

xxl-job如何添加任务:xxl先是配置的执行器,执行器的appname名字根据配置文件读取到配置类中进行对应的绑定,选择自动注册,当执行器启动的时候,会被调度中心监听到并加入到地址列表上,然后调度中心配置执行任务,然后根据corn表达式设定任务时间即可。

feign的远程调用?

feign通过feignclient注解,requestmapping以及参数注解初步构地址,然后根据构造地址,使用负载均衡策略选择某个微服务,然后发起请求。实现远程调用

es的倒排索引?

指的是将文档内容中的单词作为索引,将包含该词的id作为记录的结构,例如,如果需要在如下两个文档中查询 苏州街桔子 ,可以通过分词后 苏州街 查到 1、2,通过 桔子 查到 2,然后再进行取交集或并集取并等操作得到id去查正排,得到最终结果。

在这里插入图片描述

es的怎么实现分页?

指定from size进行数据分页,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mYFI7gxM-1663770279098)(C:\Users\ADMINI~1\AppData\Local\Temp\1662472130876.png)]

from:默认值是 0,注意不是1,代表当前页返回数据的起始值。 size:未指定,默认值是 10,代表当前页返回数据的条数,和mysql做的分页有点像

nacos是怎么注册微服务的,配置是如何读取的?(一个微服务既要读取公共配置,又要读取自己的应该怎么做)

微服务一启动时会将微服务所在机器 地址 端口注册到注册中心,每注册一个微服务到注册中心,就会给这个微服务添加心跳检测。

根据指定yaml文件或者是properties的文件,按对应文件和格式去读取配置数据。

一个微服务既要读取公共配置,又要读取自己的应该怎么做?

首先得清楚怎么开启两边的读取,搞清楚这个就行

在本地增加一个config包,底下增加bootstrap.yml文件,然后文件中配置一个访问本地配置的路径classpath:config这个,当配置中心模块一启动,就把所以的信息都读了。在这个包下的不管公共的commom.yml配置文件还是个人的bootstrap.yml配置文件都会一起读了。这样就实现了读取公共的,还有自己的了。

redis是单线程还是多线程的?

分为两个时候:1、Redis5及之前是单线程版本 2、Redis6开始引入多线程版本(实际上是 单线程+多线程 版本)

redis6单线程加多线程,多线程提升读写解析数据的效率,而在操作内存数据的时候还是用单线程。

spring和springboot的最大区别?

最大区别就是自动装配原理,springboot集成了spring,spring Boot会通过启动器开启自动装配功能以@EnableAutoConfiguration下有个选择器会扫描在meta-info下的spring.factories中的配置,然后创建bean放入spring容器中管理。

什么是数据库的mvcc机制?

MVCC (Multiversion Concurrency Control) 中文全程叫多版本并发控制,是现代数据库(包括 MySQL、Oracle、PostgreSQL 等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。

这样一来在不同的事务在并发过程中,SELECT 操作可以不加锁而是通过 MVCC 机制读取指定的版本历史记录 ,并通过一些的手段,保证读取的记录值符合事务所处的隔离级别 。解决并发场景下的读写冲突。

SEATA是什么?(阿里巴巴的开源产品)

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

底层封装好了事物的处理方法,用相应注解开启事物的处理方式。

==和equals的区别?

==是运算符

1.如果比较的对象是基本数据类型,则比较的是其存储的值是否相等

2.如果比较的是引用数据类型,则比较的是所指向对象的地址值是否相等

equals

equals是object方法,用来比较两个对象的内容是否相等,不可用于比较基本数据类型,如果没有对equals方法进行重写,则相当于“==”,比较的是引用类型的变量指向的对象的地址值;重写则是比较对象的值

线程的生命周期包括哪几个阶段?

线程的生命周期包含五个阶段,

新建,就绪,运行,阻塞,销毁

线程的状态有哪些?

image.png

新建,就绪,阻塞,等待,超时等待,终止

协西科技

了解什么是分布式事物,对于分布式事物的解决方案?

简单的说,就是不同的小操作分布在不同的服务器上,且属于不同的应用,分布式事物指要么全部成功,要么全部失败,本质上说分布式事物就是为了保证不同的数据存储的数据的一致性。

事物具有四个属性:acid,原子性、一致性、隔离性、持久性

原子性:一个事物中的所以操作,要么全部成功,要么全部不完成,不会结束在中间某个环节。事物在执行过程中发生错误,会被恢复到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。完整性包括外键约束、应用定义的等约束不会被破坏。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

分布式事务的解决方案

一个是两阶段提交XA

XA规范主要定义了(全局)事务管理器™和(局部)资源管理器(RM)之间的接口。本地的数据库如mysql在XA中扮演的是RM角色

XA一共分为两阶段:

第一阶段:所有的资源管理器rm准备执行事物并锁住需要的资源。参与者ready向全局事物管理器报告已准备就绪。

第二阶段:(commit/rollback):当事物管理者确认所有的参与者都准备好了,向所有参与者发送commit命令。

幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用
XA事务的特点是:
  • 简单易理解,开发较容易
  • 对资源进行了长时间的锁定,并发度低
TCC分为三个阶段

Try阶段:尝试执行,完成所有业务检查(一致性),预留必须业务资源(准隔离性)。

confirm:确认执行真正执行业务,不作任何业务检查,只使用 Try 阶段预留的业务资源,Confirm 操作要求具备幂等设计,Confirm 失败后需要进行重试。

Cancel 阶段:取消执行,释放 Try 阶段预留的业务资源。Cancel 阶段的异常和 Confirm 阶段异常处理方案基本上一致,要求满足幂等设计。

c033a1bda6370c72acb9874a396e9e31.png

TCC特点如下:

  • 并发度较高,无长期资源锁定。
  • 开发量较大,需要提供Try/Confirm/Cancel接口。
  • 一致性较好
  • TCC适用于订单类业务,对中间状态有约束的业务

关于工单量初始化后,你的完成订单需要存在mysql数据库不?

完成工单后,要存的先存数据库的工单表去更新被指派用户的完成任务量,然后更新redis缓存里被指派人的分值。遵循指派最少工作量的自动指派规则。

自动工单指派人规则是什么?如何实现?

自动工单指派人规则是获取当前最少的工单量的员工,这样是为了使每个人的工单量保持均衡。

为了实现查询的高效性,使用redis缓存的ZSET来实现每个员工工单数的存储,因为ZSET是可以自动排序的。我们将key 设置为日期+区域+工单类型。值为员工id,分数为工单数。

通过XXL-job定时任务,每日初始化第2天的数据,也就是让每个人的工单数为0。

当员工分配工单后都会增加redis的工单数,如果取消则减少。我们要获取自动工单指派人,只需要从ZSET提取第1条即可。

如果一个定时任务执行时间很长,我们如何缩短执行时间?分片

我们可以使用xxl-job 的分片广播策略来执行任务。我们可以在任务中获取分片总数和当前分片索引,然后在查询数据时添加个条件,用id对分片总数取余等于当前分片索引。这样我们就可以将数据进行切分。id值越连续,分片数据则越均匀。

对VO、BO、PO、DO、DTO的区别的理解?

vo(值对象):就是用于展示用的数据,不管展示方式是网页。客户端、还是app,只要这个对象是让人看到的,那就叫做vo。

DTO(Data Transfer Object) 数据传输对象 :这个传输通常指的前后端之间的传输

VO和DTO的区别

主要有两个区别:

一个是字段不一样,VO根据需要会删减一些字段;

另一个是值不一样,VO会根据需要对DTO中的值进行展示业务的解释;

po持久化对象:简单来说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象,通常PO除了get,set方法之外没有别的方法

BO:BO就是PO的组合简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象

img

单体事物发生时候,怎么解决?

try捕捉异常问题,发生业务失败后,进行回滚,没有的话,直接commit提交事务。

nginx怎么配置的?

将静态页面放到html文件夹下,通过root重新定义监听后的访问路径。访问路径就是到静态文件html文件下的路径。

关于springcloud微服务的组件?

nacos是阿里巴巴的产品。

feign,ribbon,SeaTa,

为什么选kafka在黑马头条中?

因为kafka是一个分布式流媒体平台,用于有运用到大数据的项目当中,构建可在系统或应用程序之间可靠获取数据的实时流数据管道,可以实现热点数据流的计算,在项目中的热点数据排行榜适用。

Redis中什么是Big Key(大key)问题?如何解决Big Key问题?

redis的大key指的是某个key对应的value很大,占用的redis空间很大,本质上是大value问题

大key产生的场景:redis的数据结构使用不恰当、未及时清理垃圾数据、对业务预估不准确
解决方法:1.对大key进行拆分,2.对大key进行清理,3.监控redis的内存、网络带宽、超时等指标,4.定时清理失效数据,5.压缩value

Mysql主从同步延迟原因及解决方案?

常见原因:Master负载过高、Slave负载过高、网络延迟、机器性能太低、MySQL配置不合理。

通过监控 show slave status 命令输出的Seconds_Behind_Master参数的值来判断: null,表示发生故障

0,该值为零,表示主从复制良好;

正值,表示主从已经出现延时,数字越大表示从库延迟越严重
show slave status

解决方案

1.解决从库复制延迟的问题:

架构方面

1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。

2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。

3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。

4.不同业务的mysql物理上放在不同机器,分散压力。

5.使用比主库更好的硬件设备作为slave,mysql压力小,延迟自然会变小。

硬件方面

1.采用好服务器,比如4u比2u性能明显好,2u比1u性能明显好。

2.存储用ssd或者盘阵或者san,提升随机写的性能。

3.主从间保证处在同一个交换机下面,并且是万兆环境。

总结,硬件强劲,延迟自然会变小。一句话,缩小延迟的解决方案就是花钱和花时间。

总结些多线程的面试题

1.线程和进程的区别是什么?

进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程创建,运行到消亡的过程。

线程与进程相似,但线程是一个比进程更小的执行单位 。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的方法区资源, 但每个线程有自己的程序计数器虚拟机栈本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

2.Java 实现线程有哪几种方式?

.继承 Thread 类; 实现 Runnable 接口 实现Callable接口 使用线程池。

3.启动线程方法 start()和 run()有什么区别?

调用 start() 方法是用来启动线程的,轮到该线程执行时,会自动调用 run();直接调用 run() 方法,无法达到启动多线程的目的,相当于主线程线性执行 Thread 对象的 run() 方法。
一个线程对线的 start() 方法只能调用一次,多次调用会抛出 java.lang.IllegalThreadStateException 异常;run() 方法没有限制。

线程调用start方法,进入runnable就绪状态,需要获取cpu执行权,才能去调用runnable接口的run方法,进入running运行状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWBVfPRQ-1663770279101)(C:\Users\ADMINI~1\AppData\Local\Temp\1663673421773.png)]

4.一个线程的生命周期有哪几种状态?它们之间如何流转的?

img

其他

mysql的常问面试题

CHAR 和 VARCHAR 如何选择?

对于经常变更的数据来说,CHAR 比 VARCHAR更好,因为 CHAR 不容易产生碎片。

对于非常短的列或固定长度的数据(如 MD5),CHAR 比 VARCHAR 在存储空间上更有效率。

为什么innodb选择b+tree?

1.相对于二叉树,层级更少,搜索效率更高;
2.对于b-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加书的高度,导致性能降低
3.b+tree的每一个叶子节点包含了到相邻的节点的连接,这样可以快速地进行范围遍历找到数据;(只需遍历一次,范围查询快)

sql的执行过程?

1.首先是客户端与连接器连接,一般命令是:mysql -h ip − P ip -Pip−Pport -u$user -p

2.连接建立完成后,执行select语句,这是会去查询缓存,看看之前是不是执行过这样的语句,之前查询过的话,会以key-value形式缓存此次结果,如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。

3.如果没有命中缓存,那么接下来就开始真正执行语句了,来到分析器这里,分析器做的是检查语句是否正确,以及语法是否正确,不对会报异常提示。

4.经过分析器后,就是到优化器这一步,优化器在表里面多个索引的时候,决定使用那个索引,或者是多表关联的时候,决定各个表的连接顺序,优化器阶段完成后,执行计划就已经就已经生成了

5.然后到了执行器这一阶段,执行器通过选择并操作存储引擎进行操作,返回结果。

什么是最左匹配原则?

顾名思义,最左优先,以最左边为起点任何连续的索引都能匹配上。同时遇到范围查询(>、<、between、like)就会停止匹配。

MyISAM 和 InnoDB 的区别?

InnoDB 支持事务,而 MyISAM 不支持。

2)InnoDB 支持外键,而 MyISAM 不支持。因此将一个含有外键的 InnoDB 表 转为 MyISAM 表会失败。

3)InnoDB 和 MyISAM 均支持 B+ Tree 数据结构的索引。但 InnoDB 是聚集索引,而 MyISAM 是非聚集索引。

将数据存储与索引放到一块,索引结构的叶子节点保存了行数据

回表查询,二级索引找到id再去聚集索引找到对应id的行数据, select*

中电福富

黑马头条双令牌实现?

Jwt + 网关 实现 双令牌实现登录和自动续约
1.先携带访问令牌,在这里会对访问令牌判断是否还有效,然后判断是否过期,没过期就允许通过访问对应的微服务,过期会返回一个码给前端,登陆成功后,颁发长短令牌,然后前端拿着访问令牌再次访问,访问令牌没过期当然继续访问,过期后,长令牌是没过期的,我们长令牌是可以继续用的,但是访问令牌,已经过期这时校验过期后会给前端返回错误码,前端收到后,会像后端发起一个刷新令牌的请求,然后携带刷新令牌,发送刷新令牌的请求,重新续约生成新的双令牌和时间。

​ 大于一个钟如果长令牌的有效时间减去当前时间,时间的记录方式是用当下的一个时间点为固定点,设置一个过期时间为一个钟,然后当前时间去-设置的过期时间,小于一个钟,说明访问令牌还有效,这时报个异常,然后有个就是 // tokenInfoExp.getExp() 是过期时间点(时刻) 15:01分 才过期

    // System.currentTimeMillis() 当前时间点(时刻) 15:00 分,过期时间点小于当前时间点,说明已经过期了

1.先登录。产生两个令牌 一个令牌为访问令牌 一个为刷新令牌
2.访问令牌 访问时 当过期之后,返回状态码403 表示需要刷新令牌
3.用户再发送请求,将之前产生的刷新令牌 传递到后台,后台校验通过之后,返回新的两个令牌

多态的使用场景?

像new hashmap可以用map接收,因为map是hashmap的父类,父类接收子类就是多态的表现。

多态的常见形式:

父类类型 对象名称 = new 子类构造器;

接口 对象名称 = new 实现类构造器;

//父类:
public  class People {
    public String name ="人";
    void run(){
 
    }
}
//子类1:
public class Student extends People{
    public String name = "小学生";
    @Override
    void run() {
        System.out.println("小学生跑的慢");
    }
}
//子类2:
public class Teacher extends People{
    public String name = "老师";
    @Override
    void run() {
        System.out.println("老师跑的快");
    }
}
//main方法:
public static void main(String[] args) {
    People a1 = new Student();
    People a2 = new Teacher();
    a1.run();
    a2.run();
    System.out.println(a1.name);
    System.out.println(a2.name);
}
//输出结果:
//小学生跑的慢
//老师跑的快
//人
//人

多态中成员访问特点:

方法调用:编译看左,运行看右;

在编译的时候,先访问“People a1 = new Student();”的左边“People父类”中的方法,而在运行的时候,会访问右边“Student子类”中的方法;

变量调用:编译看左,运行也看左。(多态注重行为多态)

在编译的时候,会访问“People a1 = new Student();”的左边“People父类”中的变量,并且在运行的时候,仍然访问左边“People父类”中的变量。

linux常用操作与命令

pwd 查看当前工作目录
clear 清除屏幕
cd ~ 当前用户目录
cd / 根目录
cd - 上一次访问的目录
cd … 上一级目录

ll 查看当前目录下内容(LL的小写)

mkdir aaa 在当前目录下创建aaa目录,相对路径;
mkdir ./bbb 在当前目录下创建bbb目录,相对路径;
mkdir /ccc 在根目录下创建ccc目录,绝对路径;

find / -name ‘b’ 查询根目录下(包括子目录),名以b的目录和文件;
find / -name ‘b*’ 查询根目录下(包括子目录),名以b开头的目录和文件;

mv 原先文件 文件现在的名称 mv tomcat001 tomcat

mv /aaa /bbb 将根目录下的aaa目录,移动到bbb目录下(假如没有bbb目录,则重命名为bbb);
mv bbbb usr/bbb 将当前目录下的bbbb目录,移动到usr目录下,并且修改名称为bbb;
mv bbb usr/aaa 将当前目录下的bbbb目录,移动到usr目录下,并且修改名称为aaa;

cp -r /aaa /bbb 将/目录下的aaa目录复制到/bbb目录下,在/bbb目录下的名称为aaa
cp -r /aa /bbb/aaa 将/目录下的aa目录复制到/bbb目录下,且修改名为aaa;

rm -rf /bbb 强制删除/目录下的bbb目录。如果bbb目录中还有子目录,也会被强制删除,不会提示;

tree test01/ 查看当前目录结构

rm -r a.java 删除当前目录下的a.java文件(每次回询问是否删除y:同意)

find . -name “*” -size 145800c -print 打印当前文件夹下指定大小的文件

文件内容操作

vim a.java 进入一般模式
i(按键) 进入插入模式(编辑模式)
ESC(按键) 退出
:wq 保存退出(shift+:调起输入框)
:q! 不保存退出(shift+:调起输入框)(内容有更改)(强制退出,不保留更改内容)
:q 不保存退出(shift+:调起输入框)(没有内容更改)

cat a.java 查看a.java文件的最后一页内容;
more a.java 从第一页开始查看a.java文件内容,按回车键一行一行进行查看,
按空格键一页一页进行查看,q退出;
less a.java 从第一页开始查看a.java文件内容,按回车键一行一行的看,
按空格键一页一页的看,支持使用PageDown和PageUp翻页,q退出;

head a.java 查看a.java文件的前10行内容;
tail -f a.java 查看a.java文件的后10行内容;
head -n 7 a.java 查看a.java文件的前7行内容;
tail -n 7 a.java 查看a.java文件的后7行内容;

文件内部搜索指定的内容

grep under 123.txt 在123.txt文件中搜索under字符串,大小写敏感,显示行;
grep -n under 123.txt 在123.txt文件中搜索under字符串,大小写敏感,显示行及行号;
grep -v under 123.txt 在123.txt文件中搜索under字符串,大小写敏感,显示没搜索到的行;
grep -i under 123.txt 在123.txt文件中搜索under字符串,大小写敏感,显示行;
grep -ni under 123.txt 在123.txt文件中搜索under字符串,大小写敏感,显示行及行号;

解压命令

zip的文件:unzip filename.zip

tar格式的:tar -xvf filename.tar 解包到指定的路径tar -xvf filename.tar -C newdir

tar.gz格式的: tar -zxvf filename.tar.gz

CPU过载如何解决?

查询手段:
CPU资源负载过高,可通过使用top命令查出对应cpu资源使用率高的进程,

分析原因:

根据进程判断是什么应用,再去查对应应用的访问量大小,以及日志去定位是因为访问量过大导致,还是因为性能的原因导致。

处理方法:

如果是访问量导致的,那就要考虑服务器扩容,通过lvs做服务的负载均衡来分担了。(LVS,全称 Linux Virtual Server,即Linux虚拟服务器。是一个虚拟的服务器集群系统,使用负载均衡技术将多台服务器组成一个虚拟的服务器集群。在众多解决高并发问题的方案中,这是一个易于扩展并且价格相对低廉的方案。 )通过负载均衡,均匀分散服务器压力。
如果是性能的问题,通常通过日志可以查到慢查询的代码的。将慢查询的日志整理给到开发,让开发去做优化就可以了。

linux复制文件命令?

cp命令

命令:
cp doc1/a.c doc2 表示将doc1下的a.d文件复制到doc2目录下;

cp -r doc1 doc2 表示将doc1及其doc1下所包含的文件复制到doc2下;

cp -r doc1/. doc2 表示将doc1下的文件复制到doc2,不包括doc1目录;

说明:cp参数 -i:询问,如果目标文件已经存在,则会询问是否覆盖;

git在idea中克隆代码与提交代码到远程仓库?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yjz7vYJH-1663770279112)(D:\1663687309126.png)]

克隆代码:点击vcs,点击克隆,然后将要拉取代码的git地址写到url上,然后点击clone,然后代码就可以被拉下来了。

提交代码:创建本地仓库,然后选择要提交的文件,add到本地仓库,然后commit到本地暂缓区,然后push到远程仓库上,输入自己的git的账户密码点进ok,提交代码成功。

中海创科技 福州下午两点面试,半个钟

nginx的正向代理和反向代理的区别?

正向代理:指的是通过代理服务器 代理浏览器/客户端去重定向请求访问到目标服务器 的一种代理服务。 正向代理服务的特点是代理服务器 代理的对象是浏览器/客户端,也就是对于目标服务器 来说浏览器/客户端是隐藏的

在这里插入图片描述

反向代理:指的是浏览器/客户端并不知道自己要访问具体哪台目标服务器,只知道去访问代理服务器代理服务器再通过反向代理 +负载均衡实现请求分发到应用服务器的一种代理服务。

反向代理服务的特点是代理服务器 代理的对象是应用服务器,也就是对于浏览器/客户端 来说应用服务器是隐藏的。

在这里插入图片描述

正向代理是客户端的代理,帮助客户端访问无法访问的服务器资源,反向代理则是服务器的代理,帮助服务器做负载均衡,安全防护等。

redis是怎么开启事物,以及事物怎么实现的?

127.0.0.1:6379>
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> multi  #开启事物
OK
127.0.0.1:6379> set name wuxl  #命令入队
QUEUED
127.0.0.1:6379> set age 30    #命令入队
QUEUED
127.0.0.1:6379> get name     #命令入队
QUEUED
127.0.0.1:6379> set addr shanghai  #命令入队
QUEUED
127.0.0.1:6379> exec    #执行事物 
1) OK
2) OK
3) "wuxl"
4) OK
127.0.0.1:6379>

mysql的聚簇索引和非聚簇索引?

聚簇索引:将索引与数据放在一起,当你找到索引后,也就找到对应的数据了。每张表只能建立一个聚簇索引,但是该索引可以包含多个列(一般使用的是主键等不经常更新的列)

非聚簇索引:数据储存于索引分开,叶节点指向了对应的数据行也就是主键Id。

在非聚簇索引的叶子节点上存储的并不是真正的行数据,而是主键 ID,所以当我们使用非聚簇索引进行查询时,首先会得到一个主键 ID,然后再使用主键 ID 去聚簇索引上找到真正的行数据,我们把这个过程称之为回表查询。

mysql数据库用的什么索引?

默认使用innodb存储引擎然后选择的是b+tree索引

1.相对于二叉树,层级更少,搜索效率更高;
2.对于b-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加书的高度,导致性能降低
3.b+tree的每一个叶子节点包含了到相邻的节点的连接,这样可以快速地进行范围遍历找到数据;(只需遍历一次)

双令牌实现三端的统一登陆?

Jwt + 网关 实现 双令牌实现登录和自动续约
1.先携带访问令牌,在这里会对访问令牌判断是否还有效,然后判断是否过期,没过期就允许通过访问对应的微服务,过期会返回一个码给前端,登陆成功后,颁发长短令牌,然后前端拿着访问令牌再次访问,访问令牌没过期当然继续访问,过期后,长令牌是没过期的,我们长令牌是可以继续用的,但是访问令牌,已经过期这时校验过期后会给前端返回错误码,前端收到后,会像后端发起一个刷新令牌的请求,然后携带刷新令牌,发送刷新令牌的请求,重新续约生成新的双令牌和时间。

linux怎么查看日志?

先找到存的日志文件,通过cd去找到文件所在目录,然后通过more指令一行一行的去查找文件。

more 日志文件名.log。这个命令查看文件一行一行看

mysql经纬度函数?

用自带的st_distance_sphere的函数,计算两坐标之间的距离,然后不建议用函数,导致索引失效,走全表。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值