大厂经典面试系列之四:蚂蚁金服Java开发面试【建议关注收藏订阅,你早晚会用上】掌握了这些面试题,余生不在怕面试(2)

-XX:MaxMetaspaceSize=128m 这只最大的远内存空间 128 兆

JDK1.8 移除 PermGen,取而代之的是 MetaSpace 源空间

MetaSpace 垃圾回收: 对僵死的类及类加载器的垃圾回收机制昂在元数据使用达到“MaxMetaSpaceSize”参数的设定值时运行。

MetaSpace 监控:元空间的使用情况可以在 HotSpot1.8 的详细 GC 日志输出中得到。

更新 JDK1.8 的原因:

1.    字符串存在永久代当中,容易出现性能问题和内存溢出

2.    类及方法的信息比较难确定其大小,因此对永久代的大小制定比较困难,太小容易出  现永久代溢出,太大则容易导致老年代溢出。

3.    永久代会为 GC 带来不必要的复杂度,并且回收效率偏低

4.    Oracle 可能会想 HotSpot 与 JRockit 合并。

5.    如果叫你自己设计一个中间件,你会如何设计?

===========================

我会从以下几点方面考虑开发:

1)    远程过程调用

2)    面向消息:利用搞笑的消息传递机制进行平台无关的数据交流,并给予数据通信来  进行分布式系统的集成,有一下三个特点:

i)     通讯程序可以在不同的时间运行

ii)    通讯晨旭之家可以一对一、一对多、多对一甚至是 上述多种方式的混合

iii)    程序将消息放入消息队列会从小吸毒列中取出消 息来进行通讯

3)    对象请求代理:提供不同形式的通讯服务包括同步、排队、订阅发布、广播等。  可构筑各种框架如:事物处理监控器、分布数据访问、对象事务管理器 OTM 等。

4)    事物处理监控有一下功能:

a)    进程管理,包括启动 server 进程、分配任务、监控其执行并对负载进行平衡

b)    事务管理,保证在其监控下的事务处理的原子性、一致性、独立性和持久性

c)    通讯管理,为 client 和 server 之间提供多种通讯机制,包括请求响应、会话、排队、订阅发布和广播等

6.    什么是中间件?

=============

中间件是处于操作系统和应用程序之间软件,使用时旺旺是一组中间件集成在一起,构   成一个平台(开发平台+运行平台),在这组中间件中必须要有一个通信中间件,即中间件=     平台+通信。该定义也限定了只有勇于分布式系统中才能称为中间件

主要分类:远程过程调用、面向消息的中间件、对象请求代理、事物处理监控。

7.    ThreadLock 用过没有,说说它的作用?

=============================

ThreadLock 为本地线程,为每一个线程提供一个局部变量,也就是说只有当前线层可以访问,是线程安全的。原理:为每一个线程分配一个对象来工作,并不是由 ThreadLock 来完成的,而是需要在应用层面保证的,ThreadLock 只是起到了一个容器的作用。原理为ThreadLock 的 set()跟 get()方法。

实现原理:

public void set(T value) {

Thread t = Thread.currentThread();

ThreadLocalMap map = getMap(t);

if (map != null){

map.set(this, value);

}else{

createMap(t, value);

}

public T get() {

Thread t = Thread.currentThread();

ThreadLocalMap map = getMap(t);

if (map != null) {

ThreadLocalMap.Entry e = map.getEntry(this);

if (e != null)

return (T)e.value;

}

return setInitialValue();

}

8.    Hashcode()和 equals()和==区别?

================================

(1)   hashcode()方法跟 equals()在 java 中都是判断两个对象是否相等

(2)   两个对象相同, 则 hashcode 至一定要相同, 即对象相同      >成员变量相同---->hashcode 值一定相同

(3)   两个对象的 hashcode 值相同,对象不一定相等。总结:equals 相等则 hashcode 一定相等,hashcode 相等,equals 不一定相等。

(4) ==比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间)

9.    mysql 数据库中,什么情况下设置了索引但无法使用?

=================================

(1)   索引的作用:在数据库表中对字段建立索引可以大大提高查询速度。

(2)   Mysql 索引类型:

a)    普通索引

b)    唯一索引:唯一索引列的值必须唯一允许有空值,如果是组合索 引,则列值的组合必须唯一:CREATE UNIQUE INDEX indexName ON mytable(username(length))

– 修改表结构

ALTER mytable ADD UNIQUE [indexName] ON (username(length))

– 创建表的时候直接指定

CREATE TABLE mytable( ID INT NOT NULL,     username VARCHAR(16)

NOT NULL, UNIQUE [indexName] (username(length))    );

c)    主键索引:一种特殊的唯一索引,不允许有空值,一般在创建表 的时候创建主键索引:

CREATE   TABLE   mytable(          ID   INT NOT  NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );

d)    组合索引:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL,  age INT NOT NULL );

为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是将 name, city, age 建到一个索引里:代码如下:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);

(3)   什么情况下有索引,但用不上?

a)    如果条件中有 OR,即使其中有部分条件带索引也不会使用。注意:要想使用 or,又想让索引生效,只能将 or 条件中的每个列都加上索引。

b)    对于多了索引,不是使用的第一部分,则不会使用索引。

c)    Like 查询以%开头,不使用索引

d)    存在索引列的数据类型隐形转换,则用不上索引,比如列类型是 字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

e)    Where 子句里对索引列上有数学运算,用不上索引

f)     Where 子句中对索引列使用函数,用不上索引

g)    Mysql 估计使用全表扫描要比用索引快,不使用索引

(4)   什么情况下不推荐使用索引?

a)    数据唯一性差的字段不要使用索引

b)    频繁更新的字段不要使用索引

c)    字段不在 where 语句中出现时不要添加索引,如果 where 后含

IS NULL/IS NOT NULL/LIKE ‘%输入符%’等条件,不要使用索引

d)    Where 子句里对索引使用不等于(<>),不建议使用索引,效果一般

10.  mysql 优化会不会,mycat 分库,垂直分库,水平分库?

====================================

(1)   为查询缓存优化你的查询

(2)   EXPLAIN select 查询:explain 的查询结果会告诉你索引主键是如何被利用的

(3)   只需要一行数据时使用 limit1

(4)   为搜索字段添加索引

(5)   在关联表的时候使用相当类型的例,并将其索引

(6)   千万不要 ORDER BY RAND()

(7)   避免 select*

(8)   永远为每张表设置一个 ID

(9)   使用 ENUM 而不是 VARCHAR

(10) 从 PROCEDURE ANALYS()提取建议

(11) 尽可能的使用 NOT NULL

(12) Java 中使用 Prepared Statements

(13) 无缓冲的查询

(14) 把 IP 地址存成 UNSIGNED INT

(15) 固定表的长度

(16) 垂直分库:“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。

(17) 水平分库:“水平分割”是一种把数据库中的表按行变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。

(18) 越小的列会越快

(19) 选择正确的存储引擎

(20) 使用一个对象关系映射器

(21) 小心永久链接

(22) 拆分大的 DELETE 活 INSERT 语句

11.  分布式事务解决方案?

===============

(1)   什么是分布式事务?

a.    什么情况下需要用到分布式事务?

a)    当本地数据库断电、机器宕机、网络异常、消息丢失、消息乱序、  数据错误、不可靠 TCP、存储数据丢失、其他异常等需要用到分布式事务。

b)    例如:当本地事务数据库断电的这种秦光,如何保证数据一致性?数据库由连个文件组成的,一个数据库文件和一个日志文件,数据库任何写入操作都要先写日志,在操作前会吧日志文件写入磁盘,那么断电的时候及时才做没有完成,在重启数据库的时候,数据库会根据当前数据情况进行 undo 回滚活 redo 前滚, 保证了数据的强一致性。

c)    分布式理论:当单个数据库性能产生瓶颈的时候,可能会对数据  库进行分区(物理分区),分区之后不同的数据库不同的服务器 上 ,此时单个数据库的 ACID 不适应这种清苦啊,在此集群环境下很难达到集群的 ACID,甚至效率性能大幅度下降,重要的是再很难扩展新的分区了。此时就需要引用一个新的理论来使用这种集群情况:CAP 定理

d)    CAP 定理:由加州肚饿伯克利分销Eric Brewer 教授提出,指出WEB服务无法同时满足 3 个属性:

a.    一致性:客户端知道一系列的操作都会同时发生(生效)

b.    可用性:每个操作都必须以可预期的响应结束

c.     分区容错性:及时出现单组件无法可用,操作依然 可以完成。

具体的将在分布式系统中,在任何数据库设计中,一个 WEB 应至多只能同时支持上面两个属性。设计人员必须在一致性和可用 性之间做出选择。

e)    BASE 理论:分布式系统中追求的是可用性,比一致性更加重要, BASE 理论来实现高可用性。核心思想是:我们无法做到羟乙酯, 单每个应用都可以根据自身的业务特点,采用适当的方式使系统达到最终一致性。

f)     数据库事务特性:ACID

i.     原子性

ii.     一致性

iii.    独立性或隔离性

iv.    持久性

(2)   分布式系统中,实现分布式事务的解决方案:

a.    两阶段提交 2PC

b.    补偿事务 TCC

c.     本地消息表(异步确保)

d.    MQ 事务消息

e.    Sagas 事务模型

12.  sql 语句优化会不会,说出你知道的?

========================

(1)   避免在列上做运算,可能会导致索引失败

(2)   使用join 时应该小结果集驱动大结果集,同时把复杂的 join 查询拆分成多个query, 不然 join 越多表,会导致越多的锁定和堵塞。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
点,真正体系化!**

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

[外链图片转存中…(img-avV3z7Yo-1713626701811)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值