首页 > 其他分享 >收集牛客网腾讯面试查漏补缺【threadlocal、explain、引用】

收集牛客网腾讯面试查漏补缺【threadlocal、explain、引用】

时间:2022-10-27 11:37:28浏览次数:58  
标签:查漏 explain 查询 牛客 线程 key NULL id select


一、ThreadLocal【解决共享变量】

1.ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。
2.使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。
3.ThreadLocalMap是ThreadLocal的内部静态类,而它的构成主要是用Entry来保存数据 ,而且还是继承的弱引用。在Entry内部使用ThreadLocal作为key,使用我们设置的value作为value

脏数据
由于线程池会复用Thread对象,南无与Thread绑定的类的static属性的ThreadLocal变量也会被复用,如果在现成的run()方法中不明显的代用remove()方法,就可能会get(重要的线程信息。)
内存泄漏
实际上 ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,弱引用的特点是,如果这个对象只存在弱引用,那么在下一次垃圾回收的时候必然会被清理掉。
ThreadLocal有三个方法,get set remove 最后 remove必须要进行执行,否则会发生内存泄漏,因为提示表明了static表明threadlocal修饰

使用场景
1、每个线程需要有自己单独的实例
2、实例需要在多个方法中共享,但不希望被多线程共享

存储用户Session
数据库连接,处理数据库事务

二、explain sql语句

explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。

在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中)。

mysql> explain select * from actor;
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | actor | ALL | NULL | NULL | NULL | NULL | 2 | NULL |

1.id列
id列的编号是 select 的序列号,有几个 select 就有几个id,并且id的顺序是按 select 出现的顺序增长的。MySQL将 select 查询分为简单查询和复杂查询。复杂查询分为三类:简单子查询、派生表(from语句中的子查询)、union 查询
1)简单子查询

mysql> explain select (select 1 from actor limit 1) from film;
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+
| 1 | PRIMARY | film | index | NULL | idx_name | 32 | NULL | 1 | Using index |
| 2 | SUBQUERY | actor | index | NULL | PRIMARY | 4 | NULL | 2 | Using index |

2)from子句中的子查询

mysql> explain select id from (select id from film) as der;
+----+-------------+------------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+-------+---------------+----------+---------+------+------+-------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 2 | NULL |
| 2 | DERIVED | film | index | NULL | idx_name | 32 | NULL | 1 | Using index |

2.select_type列
select_type 表示对应行是是简单还是复杂的查询,如果是复杂的查询,又是上述三种复杂查询中的哪一种。
1)simple:简单查询。查询不包含子查询和union

mysql> explain select * from film where id = 2;
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+
| 1 | SIMPLE | film | const | PRIMARY | PRIMARY | 4 | const | 1 | NULL |

2)primary:复杂查询中最外层的 select
3)subquery:包含在 select 中的子查询(不在 from 子句中)
4)derived:包含在 from 子句中的子查询。MySQL会将结果存放在一个临时表中,也称为派生表(derived的英文含义)
5)union:在 union 中的第二个和随后的 select
6)union result:从 union 临时表检索结果的 select
3. table列
这一列表示 explain 的一行正在访问哪个表。
4. type列
这一列表示关联类型或访问类型,即MySQL决定如何查找表中的行。

eq_ref:primary key 或 unique key 索引的所有部分被连接使用 ,最多只会返回一条符合条件的记录。这可能是在 const 之外最好的联接类型了,简单的 select 查询不会出现这种 type
5. possible_keys列
这一列显示查询可能使用哪些索引来查找。
6. key列
这一列显示mysql实际采用哪个索引来优化对该表的访问。
7. key_len列
这一列显示了mysql在索引里使用的字节数,通过这个值可以算出具体使用了索引中的哪些列。
8.ref列
这一列显示了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),func,NULL,字段名(例:film.id)
9.rows列
这一列是mysql估计要读取并检测的行数,注意这个不是结果集里的行数。
10.Extra列
这一列展示的是额外信息。

三、红黑树?与AVL不同?

红黑树与平衡二叉搜索树类似,都是在插入和删除元素节点时候,通过特定的旋转来维持自身平衡的,从而获得较高的查询新能。
1.节点施能狮红色和黑色
2.根节点必须是黑色
3.所有的NIL节点都是黑色。【叶子节点下挂的两个虚节点】
4.一条路径上不能出现相邻的两个红色节点
5.任何子树中,根节点到叶子节点的所有路径的黑色节点数目相同

不同点
1.红黑树平衡性不如AVL,大致平衡,不保证严格的左右子树高度差为1,可能高度会更高,平均查找次数回避AVL较多。
2.插入时候,都是至多两次旋转恢复平衡
3.删除时,红黑树至多三次平衡,AVL为ologn次
4.红黑树更适合 频繁的插入和删除
5.AVL更适合低 修改删除,大量查询

四、强引用、软引用、弱引用、虚引用【阿里巴巴手册】

收集牛客网腾讯面试查漏补缺【threadlocal、explain、引用】_弱引用


收集牛客网腾讯面试查漏补缺【threadlocal、explain、引用】_mysql_02

五、程序现在CPU突然爆了,如何定位?

1.利用top命令确定是哪一个线程占用内存过高导致的
2.若是自己的Java程序线程则利用thread命令:查看某一个线程的详情,确定是业务线程还是GC垃圾回收的线程
3.jmap -histo 进程号 :打印jvm中所有的对象,查看哪一个对象占用比较大;并且查看日志是否有outofMemary产生
4.利用jinfo工具就可以修改参数产生快照即dump文件并下载到windows环境中
5.visualvm工具打开进行分析并结合jmap 命令打印的对象定位到出问题的代码块
6.结合分析结果和代码,定位问题出现的原因

六、有没有做过大量数据的网络抓包,大致流程如何?

七、LRU算法哈希表和双向链表

思路:链表,插入新的节点直接放入表头,如果访问的节点不在表投命中后,移动节点到表头,如果访问没有命中,则新建一个节点放到表头,若链表达到了最大值,则将最后一个删除,最后一个节点就是最近最少未使用的。

八、DNS负载均衡、长短连接

DNS负载均衡技术的实现原理是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。
主要优点

这种技术的主要缺点如下

第一,技术实现比较灵活、方便,简单易行,成本低,适用于大多数TCP/IP应用。不需要网络专家来对之进行设定,或在出现问题时对之进行维护。

第二,对于Web应用来说,不需要对代码作任何的修改。事实上,Web应用本身并不会意识到负载均衡配置,即使在它面前。

第三,Web服务器可以位于互联网的任意位置上。

DNS负载均衡技术在具有以上优点的时候,其缺点也非常明显,主要表现在

第一,不能够按照Web服务器的处理能力分配负载。

第二,不支持高可靠性,DNS负载均衡技术没有考虑容错。

第三,可能会造成额外的网络问题。

第四,一旦某个服务器出现故障,即使及时修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间,保存了故障服务器地址的客户计算机将不能正常访问服务器。


标签:查漏,explain,查询,牛客,线程,key,NULL,id,select
From: https://blog.51cto.com/u_15848894/5800561

相关文章

  • 2021字节跳动秋招整理牛客网---Java后端提前批面试
    一、字节提前批java后端一面1.1你说你用了RPC远程调用,讲讲原理是怎么样的RPC(RemoteProcedureCall)远程调用,通过某种手段,协议,约定调用非本地服务RPC框架作为架构微服......
  • 整理牛客网---阿里校招笔试后端Java版,dfs和算法题。
    一、2021(校招)阿里巴巴7.22笔试(Java版)1.1题目1给定一个n,求[1,n]这n个数字的排列组合有多少个。条件:相邻的两个数字的绝对值不能等于1.例如:4[2,4,1,3][3,1,4......
  • git合并分支时出现“Please enter a commit message to explain why this merge is ne
    1,有的时候我们在进行项目分支合并gitmerge时会出现如下错误  解决步骤:按键盘上的“i”键可进入插入模式这时可以修改最上方的黄色部分,改成你想写的合并原因按......
  • 牛客OI周赛7-普及组
    这一场感觉良好也只能打这种普及组长长信心这样子A:救救喵咪给你坐标轴上的个点,求出对于每个点,有多少个点的坐标和坐标都大于它。()是开玩笑的吧直接#include<iostream>#d......
  • 牛客BM76(正则表达式匹配)
    BM76正则表达式匹配具体实现:1.确定dp数组以及下标的含义dp[i][j]代表s中以i结尾的子串和p中j为结尾的子串是否匹配2.状态转移(1)p[j]为普通字符:匹配的条件是前面的字符......
  • 牛客SQL-牛客题:256-288(不干了)
    256.写一个sql查询,积分表里面出现三次以及三次以上的积分。若有多个符合条件的number,则按number升序排序输出SELECT`number`FROMgradeGROUPBY`number`HAVINGCOUN......
  • 牛客SQL-employees表(二):226-255
    226.将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分注:sqllite中字符串拼接为||符号,不支持concat函数;mysql支持concat函数/*#C......
  • 牛客练习赛104 D 逃亡的贝贝
    https://ac.nowcoder.com/acm/contest/43058/D思路二分答案,对于超过当前答案并且操作后可以使用的边边权当做1,短边当做0,跑一遍最短路,非常经典的二分题代码#include<alg......
  • 牛客练习赛104 C 1919810
    https://ac.nowcoder.com/acm/contest/43058/C思路一个很简单的dp记录每一位i可以给下一位的j提供的方案数理论上层数应该倒着枚举,但是我这个写法恰好避免了重复,所以正......
  • 牛客练习赛104 B 114514
    https://ac.nowcoder.com/acm/contest/43058/B思路要求1~n满足如下式子的个数\((i^{11}-i)(i^{451}-i^4)\equiv(i^{11}-i^4)(i^{11}-i)(mod451*4)\)打表可知,全都符合......