北京宇信科技 社招二面

面试官一:

1、项目的限流怎么实现的

2、mysql的优化(索引优化,索引的方法)(还是回答的不好)

3、B+树相比于哈希索引有什么优点?

3、索引的优点?

4、hashmap的底层实现?

5、list和set的区别

6、说一下你在项目中遇到的困难,怎么解决的?(会话超时)

7、抽象类和普通类的区别?

8、接口和抽象类的区别?

9、接口和抽象类中可以有main() 方法么?

9、final 关键字的作用?

面试官二:

1、ConcurrentHashMap为什么是线程安全的?

2、G1 和 CMS 的区别(需要再整理一下

3、类加载过程(类的生命周期),解释各个阶段的意义

4、springboot的启动原理(说了main函数,类加载器,主类的注解等)

5、问循环注入,怎么解决(没遇到过。。)

6、redis都怎么使用的?讲了set、list、提到布隆过滤器,问布隆过滤器的原理?

7、redis集群,我项目怎么部署的?(主从轮询),其他的集群方式了解么,说了哨兵模式、Cluster模式。问Cluster的优点特性?

Cluster的槽位是怎么划分的?有多少个槽位?

8、问redis的底层实现?redis使用什么开发的,底层怎么实现(我......)

9、问redis的哈希算法?(不知道,说了hashmap的底层hash算法)


#Java开发##面经##社招##宇信科技##Java工程师#
全部评论
限流的实现: (方法一、使用google的guava,令牌桶算法实现:平滑突发限流 ( SmoothBursty) 、平滑预热限流 ( SmoothWarmingUp) 实现。 方法二、请求一次redis增加1,key可以是IP+时间或者一个标识+时间,没有就创建,需要设置过期时间。 方法三、分布式限流,分布式限流最关键的是要将限流服务做成原子化,而解决方案可以使用redis+lua或者nginx+lua技术进行实现 方法四、可以使用池化技术来限制总资源数:连接池、线程池。比如分配给每个应用的数据库连接是 100,那么本应用最多可以使用 100 个资源,超出了可以 等待 或者 抛异常。 方法五、限流总并发/连接/请求数。 方法六、限流某个接口的总并发/请求数,使用 Java 中的 AtomicLong,示意代码: 方法七、 限流某个接口的时间窗请求数使用 Guava 的 Cache,示意代码:
5 回复 分享
发布于 2021-10-16 08:25
找到下一份工作希望赶紧。
3 回复 分享
发布于 2021-10-16 16:08
(为什么concurrenthashmap线程安全)JDK1.7中,ConcurrentHashMap使用的锁分段技术,将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。 JDK1.8放弃了锁分段的做法,采用CAS和synchronized方式处理并发。以put操作为例,CAS方式确定key的数组下标,synchronized保证链表节点的同步效果。
1 回复 分享
发布于 2022-02-10 09:23
外包?
1 回复 分享
发布于 2021-08-20 00:06
1、创建索引 对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。 2、复合索引 比如有一条语句是这样的:select * from users where area='beijing' and age=22; 如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age, salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。 3、索引不会包含有NULL值的列 只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。 4、使用短索引 对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。 5、排序的索引问题 mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。 6、like语句操作 一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。 7、不要在列上进行运算 select * from users where YEAR(adddate)<2007; 将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成 select * from users where adddate<‘2007-01-01'; 8、不使用NOT IN和<>操作 NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。
9 回复 分享
发布于 2021-10-16 08:25
这是外包?这也太卷了吧。。。
4 回复 分享
发布于 2021-12-15 20:45
外包都那么卷?
4 回复 分享
发布于 2021-12-14 22:15
这不就是个外包公司 别去
3 回复 分享
发布于 2021-08-21 23:25
hashmap的底层实现: HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。
2 回复 分享
发布于 2021-10-16 08:33
bean生命周期直接死记硬背:bean定义,构造方法推断,实例化,属性填充(程序员可自定义),初始化,初始化后
点赞 回复 分享
发布于 2022-02-10 09:34
限流采用redis锁,可以用原子锁和redisson,只有获取锁的才能访问共同资源,防止热点击穿和雪崩
点赞 回复 分享
发布于 2022-02-10 09:14
索引的优缺点: 创建索引可以大大提高系统的性能。 第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。 第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢? 这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点,但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。 第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
点赞 回复 分享
发布于 2021-10-16 08:38
楼主几年工作经验
点赞 回复 分享
发布于 2021-10-08 15:20

相关推荐

07-18 18:45
已编辑
中山职业技术学院 Java
投递TP-LINK等公司7个岗位
点赞 评论 收藏
分享
零OFFER战士:另一个版本查看图片
点赞 评论 收藏
分享
评论
24
168
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务