gball个人知识库
首页
基础组件
基础知识
算法&设计模式
  • 操作手册
  • 数据库
  • 极客时间
  • 每日随笔
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 画图工具 (opens new window)
关于
  • 网盘 (opens new window)
  • 分类
  • 标签
  • 归档
项目
GitHub (opens new window)

ggball

后端界的小学生
首页
基础组件
基础知识
算法&设计模式
  • 操作手册
  • 数据库
  • 极客时间
  • 每日随笔
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 画图工具 (opens new window)
关于
  • 网盘 (opens new window)
  • 分类
  • 标签
  • 归档
项目
GitHub (opens new window)
  • 面试

    • 总览
    • 河狸家-2021-4-13
    • 篱笆墙网络科技公司面试-2021-7-6
    • 卓锐科技视频面试-2021-4-2
      • 线程核心数 如何设置
      • 5个线程如何判断线程结束
      • redis 做缓存 还能做啥 消息队列 分布式锁
      • spring 切面编程步骤
      • 数据库如何看索引被执行了
    • 绿城信息科技有限公司-2021-4-7
  • 数据库

  • linux

  • node

  • tensorFlow

  • 基础组件

  • 基础知识

  • 算法与设计模式

  • 分布式

  • 疑难杂症

  • go学习之旅

  • 极客时间

  • 知识库
  • 面试
ggball
2021-12-06

卓锐科技视频面试-2021-4-2

# 线程核心数 如何设置

  1. 首先考虑到CPU核心数 Java 中如何获取核心线程数 Runtime.getRuntime().availableProcessors();
  2. 考虑任务是 CPU 密集型任务还是 IO 密集型任务 cpu密集(比如像加解密,压缩、计算等一系列需要大量耗费 CPU 资源的任务):理论上线程的数量 = CPU 核数就是最合适的,不过通常把线程的数量设置为CPU 核数 +1,会实现最优的利用率。 IO密集型任务:线程数 = CPU 核心数 / (1 - 阻塞系数) 其中计算密集型阻塞系数为 0,IO 密集型阻塞系数接近 1,一般认为在 0.8 ~ 0.9 之间。比如 8 核 CPU,按照公式就是 2 / ( 1 - 0.9 ) = 20 个线程数

# 5个线程如何判断线程结束

  1. 线程池做的话,线程池有一个termiated终止状态,调用isTermiated可以查看线程池中的线程有没有完全结束
  2. atomicInteger 初始化5,完成一个减一

# redis 做缓存 还能做啥 消息队列 分布式锁

使用redis分布式锁(主要使用了redis中的setnx和getset方法,这两个方法在redisTemplate分别是setIfAbsent和getAndSet方法)实现线程安全,因为redis是单线程,能保证线程的安全性,而且redis强大的读写能力能提高效率。

# spring 切面编程步骤

  1. 创建切面类,打上@Aspect注解
  2. 使用通知注解在方法上,注解的value为切点的位置
package com.sharpcj.aopdemo.test1;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class BuyAspectJ {
    @Before("execution(* com.sharpcj.aopdemo.test1.IBuy.buy(..))")
    public void haha(){
        System.out.println("男孩女孩都买自己喜欢的东西");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  1. 在配置加上
  aop:
    proxy-target-class: true
1
2
  1. 或者在配置类上添加
package com.sharpcj.aopdemo;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@ComponentScan(basePackageClasses = {com.sharpcj.aopdemo.test1.IBuy.class})
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class AppConfig {
}
1
2
3
4
5
6
7
8
9
10
11

# 数据库如何看索引被执行了

如果是mysql的话 ,使用explain查看执行计划

查看 关键字 key 有没有使用到索引

id:id相同从上往下执行,不同时,id越大,优先级越高,越先执行

select_type、查询的类型,用于区别普通查询,联合查询和子查询等复杂查询

table、表示正在执行的表

type :system > const > eq_ref > ref > range > index > all

一般来说至少达到range,或者 ref

  1. system 表只有一行记录(等于系统表),这是const类型的特列,平时不会出现,这个也可以忽略不计
  2. const 通过索引一次就找到了,const用于比较primary key 和 unique key,因为只匹配一行数据,所以很快。如果将主键置于where列表中,mysql就能将该查询转换为一个常量
  3. eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键索引和唯一索引 区别于const eq_ref用于联表查询的情况
  4. ref 非唯一索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,他可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体
  5. range 只检索给定范围的行,使用一个索引来选择行,一般是在where中出现between、<、>、in等查询,范围扫描好于全表扫描,因为他只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引
  6. index Full Index Scan,Index与All区别为index类型只遍历索引树。通常比All快,因为索引文件通常比数据文件小。也就是说,虽然all和index都是读全表,但是index是从索引中读取的,而all是从硬盘读取的
  7. ALL Full Table Scan,将遍历全表以找到匹配的行

possible_keys、表示这张表可能会使用到的索引,但实际上并不一定使用到

key:实际上使用的索引

key_len:表示索引中使用的字节数

ref:显示索引的那一列被使用了,如果可能的话,最好是一个常数。哪些列或常量被用于查找索引列上的值。

rows:找到记录所需要读取的行数

Extra:包含不适合在其他列中显式但十分重要的额外信息

  • Using Index:表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错。如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。

  • Using where:不用读取表中所有信息,仅通过索引就可以获取所需数据,这发生在对表的全部的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤

  • Using temporary:表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by

  • Using filesort:当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”

  • Using join buffer:表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些。

  • Impossible where:where子句的值总是false,不能用来获取任何元组

  • Select tables optimized away:这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行

  • No tables used:Query语句中使用from dual 或不含任何from子句

以上两种信息表示mysql无法使用索引

  1. using filesort :表示mysql会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容,可能在内存或磁盘上排序。mysql中无法利用索引完成的操作称为文件排序

  2. using temporary: 使用了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。

by the way 视屏面试的时候,面试官很不耐烦,没有等我全部说完,就说下一个问题,有点不尊重人。

上次更新: 2025/06/04, 15:06:15
篱笆墙网络科技公司面试-2021-7-6
绿城信息科技有限公司-2021-4-7

← 篱笆墙网络科技公司面试-2021-7-6 绿城信息科技有限公司-2021-4-7→

最近更新
01
AIIDE
03-07
02
githubActionCICD实战
03-07
03
windows安装Deep-Live-Cam教程
08-11
更多文章>
Theme by Vdoing
总访问量 次 | 总访客数 人
| Copyright © 2021-2025 ggball | 赣ICP备2021008769号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×

评论

  • 评论 ssss
  • 回复
  • 评论 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  • 回复
  • 评论 ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  • 回复
×