阿里旗下某互联网公司一面(附个人回答)

问题还有答案都在,欢迎大家一起讨论指正。

如何实现动态修改配置

我提到 1)通过MBean来保存配置信息,JMX来修改配置;还提到log4j2就是通过这种机制来实现日志级别的动态修改;2)开放telnet接口或者http接口来允许参数的修改;

他提到如何实现中心配置,我提到了zookeeper,而且提到一个好处,当参数修改时,可以实时通知;他提到zookeeper的客户端需要保持长连接才能接收参数变化的通知,这样连接数会很多,有没有其他方式;我提到可以通过push的方式,短连接来发送通知的方式。

Vertx的线程模式

线程模型和Netty的区别,回答不上来,只说了下Vertx的线程模型 - 分发线程和工作线程

Vertx和RxJava的区别

都是响应式框架,区别是什么?回答不上来

用了什么validation框架

Vertx-contract,若干个内置的validation rule,实质是对应一个正则表达;可以自定义validation rule,例如某个API的枚举类型数据;

NIO的BIO的区别

我回答到NIO内有selector,它可以注册事件,从而提高线程的使用效率;他问到selector背后的实现,我提到了epoll;继续问我是否知道epoll的两种触发方式 - 水平触发和边缘触发,我回答不上来。

Redis分布式锁的实现

我回答使用redisson的Redloc算法实现分布式锁,它提到了这个算法还是会有问题,但想不起来什么场景下会有问题了。

他提到了一个场景:如果有三个请求,第一个请求加了分布式锁,其他二个等待,在返回前第一个请求当机了,没有清除锁,这种情况怎么办?

我提到了通过TTL来防止死锁;我还提到了用setnx来加锁,用ttl来设置存活时间防止死锁;他提到这是两个命令,不是原子的,我回答可以将setnx的value内设置存活时间,这样当第二请求来的时候,尽管有分布式锁,但是显示锁已经过期,所以这个锁不会生效;

这个地方有些模糊,需要好好看一下,有点蒙过去的感觉。

further: 如上我的solution也是会有问题的,当后续线程并行可能同时检测到锁已经过期,例如B和C,这样就会同时执行delete操作,然后执行set操作,这时可能c删除的是B刚刚设置的锁,而不是最初的A锁。

所以可以这样,

1. 用一个更多参数的set方法,同时有NX和PX语义,即只有当不存在才设置,和同时设置过期时间在一个原子操作内,防止客户端执行第一步后宕机。

2. 两个语句 - setnx和expire, 当setnx失败的时候,会检测ttl是否存在,如果不存在则设置ttl防止死锁,这样即使A线程宕机没有来得及执行expire,也会被后续线程设置上。这样的side-effect是锁的持续时间会比预期要长些。

TTL过期后,什么时候Redis真正删除这个缓存?

回答不上来。过后查询的答案是:Redis使用惰性删除和定期删除的策略,惰性删除是在访问数据时,首先判断是否过期,如果过期,则删除缓存返回为空;定期删除是一定时间内对数据库进行扫描,清除掉过期数据,防止由于数据未被访问而内存没有释放。定期删除会设定最大的扫描时间以及每一个数据库抽样的个数;并且下次扫描会从根据上次扫描到的数据库继续扫描下一个数据库。

如上是删除过期数据,这里是删除未过期数据-当内存使用达到maxmemory阈值时,执行maxmemory-policy的策略,一共有6种策略来删除未过期的数据。

volatile-lru -> remove the key with an expire set using an LRU algorithm

# allkeys-lru -> remove any key according to the LRU algorithm

# volatile-random -> remove a random key with an expire set

# allkeys-random -> remove a random key, any key

# volatile-ttl -> remove the key with the nearest expire time (minor TTL)

# noeviction -> don't expire at all, just return an error on write operations

volatile指设置了ttl的元素; allkey指所有元素

lru指least rencently used,去除最近最不常访问的元素; random指随机删除元素。

ttl指按照ttl优先删除即将过期的元素。

默认是volatile-lru从设置过期时间的元素里删除最不长访问的元素。

分布式提交

是否用过分布式提交? 我提到二次提交,面试官说这是传统办法,对于互联网行业来说用的比较少,因为性能不够。

查询文档后,可以通过消息中间件转为本地事务。

消息中间件

我提到了kafka,

顺序存储是如何实现的?

我说不知道,应该是文件的追加写入,kafka不支持文件的随机写入;

是否知道zero-copy?

我回答的是有点类似堆外内存,少了内核态到用户态的拷贝,所以加快速度;另外我还提到了kafka的作弊,可以直接把一个几M文件直接返回,从而达到几M/s的吞吐量。

有没有了解push机制的中间件

不会回答

GC

Full GC频繁,如何查错?

我提到首先了解当前的配置信息,例如是那种GC collector,young/old区的大小;

开启GC日志来获取更多信息;

dump堆找出异常大或者异常多的可以对象,查看代码是否有内存泄露;

如何写代码模拟出Full GC频繁的现象

我回答 1)调节参数使得young区很小,这样对象直接分配到old区;2)调节参数,使得promotion的阈值很小,甚至为0,这样young区对象直接promote到old区;3)创建大的数组对象,因为需要连续空间,所以很容易直接分配到堆中;

什么情况下对象会创建在栈内?

我提到JVM有优化,会把对象打散,将基本数据存储在栈内;

是否听说过逃逸分析?

我回答:判断一个对象是否可能被其他线程调用,如果没有,则说明这个对象时线程安全的,不需要同步,即使有同步也会进行同步消除来提高性能。

如何优化spark程序?

1)改变数据的处理流程;2)充分利用DataFrame的缓存;3)调优参数

是否遇到数据不平衡问题

回答遇到过,举了分org存储的实际解决方案。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

  • 1.1 资料 ,最好的入门小册子,可以先于一切文档之前看,免费。 作者Antirez的博客,Antirez维护的R...
    JefferyLcm阅读 17,056评论 1 51
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,116评论 25 707
  • 42、PHP缓存技术有哪些?1)、全页面静态化缓存2)、页面部分缓存3)、数据缓存4)、查询缓存5)、按内容变更进...
    像敏锐的狗阅读 756评论 1 2
  • 在爱情的城堡里面,我觉得最难得就是对方的付出,做什么多数都是提前为对方考虑,而另一方也刚才是她能接受的。理解并且能...
    此刻最重要阅读 148评论 1 1
  • 不知道还能顶着学生这个保护神的光环享受多久
    宋芷安阅读 156评论 0 0