记录一点儿题

小红书

问题

答的

查到的结果

ES周边搜索的原理

不会

GeoHash

https://www.cnblogs.com/LBSer/p/3310455.html

redis的expire的原理

不会

可行的3个方案:定时删除、惰性删除、定期删除

实际实现:定期删除+惰性删除

int数组,都是正数,返回下一个刚好比当前数大的数,这样的一个数组

不会

https://blog.csdn.net/smileiam/article/details/88732245

延伸:https://leetcode.com/problems/next-greater-element-ii/?tab=Description

int数组,升序的,后半段放到前半段,类似 4 5 6 1 2 3 这样,在这个数组中查找一个数

不会

https://www.itcodemonkey.com/article/6199.html

猿辅导

问题

答的

查到的结果

java多线程

线程池的作用是什么、如果让你实现线程池,你会怎么搞,怎么调度/唤醒线程,提示了生产者/消费者模型

不会

 

线程池的几个参数是什么

core、max、queue、存活时间、rejectHandler

0 -> core -> max -> 队列 -> reject 这个答<错>了

还有个ThreadFactory参数

0 -> core -> 队列 -> max -> reject

写段代码,有个缓存每5分钟失效,保证更新缓存时不会更新多次

 

角度一:应该是考察双重检查锁定,字段要有volatile

角度二:缓存的防击穿

redis

分布式锁,怎么实现的

Spring AOP、注解、底层是redis的setnx

延伸:

  • zk分布式锁怎么实现

  • 看门狗

expire,原理是什么

不会

可行的方案:定时删除、惰性删除、定期删除

redis实际采用的方式:惰性删除+定期删除(定期删除随机选一些过期key来删,没有删全部的)

多个setnx请求,redis服务怎么保证没有并发问题的

redis服务器是单线程的,所以没有问题 看面试官反应,好像是答错了

IO多路复用:https://www.cnblogs.com/darknebula/p/10072658.html

map怎么扩容的

不会,答了HashMap的扩容原理

有个ht[2]数组,平时数据存在ht[0]扩容时从ht[0]往ht[1]扩,扩容过程是逐步的,扩容完数据设置回ht[0]

es

node有哪些类型(master、slave、还有啥)

master、slave

master、主资格、data、client

部落节点。。。

查询过程是什么样的

请求打到某个节点,作为协调节点

。。。。

 

协调节点怎么知道其他节点的存在的

协调节点会先问一下master节点,答错了

。。。。

es的索引和mysql的索引,有什么区别

es的索引是倒排索引,MySQL的索引是B+树

倒排索引的原理balabala

B+树的原理balabala

es的索引只有倒排索引吗?

https://blog.csdn.net/cyony/article/details/65437708

mysql

b树和b+树的区别是什么

b树的叶子节点没有兄弟节点的指针,B+树有

还有一个:B+树只有叶子节点才存数据

范围查询用b+树索引,那等值查询用什么索引

自适应hash索引

 

自适应hash索引有什么缺点(还是特点来着?)

不能调优

 

算法

int链表,调整成奇数在左,偶数在右

 

 

多叉树,带depth的深度复制

 

 

OPPO

 

 

 

业务:

标签:快速找到其group,怎么且/或复合查询

内存hashmap缓存

 

门店数据更新,怎么感知更新的

mdc消息通知,收到id去查最新数据并更新

 

公私海轮转有啥难点没,怎么配置的

规则比较复杂

基于战区配置,配置项很多

先讲轮转目的:提高资源的产出,从拜访/签约/业绩维度

演进思路:可以引入规则引擎

门店数据怎么分库分表

以业务分库,以门店id水平分表

分库分表,跟查询是有关的

现阶段使用ES查询,所以以poi单维度分表是可行的

如果使用数据库搜索,需要再考虑

过程数据(拜访)数据量多大,怎么存的

。。。

如果量大,思路:

  • 分库分表,业务上来看以poi来分

  • 冷热数据分离,几个月前的数据导到hive

ES

Solr、ES选型

性能、稳定性、学习成本、运维成本

doc_values是lucene的

查询过程

请求打到协调节点

如果根据id来get,则根据路由规则找shard,然后找node;查找完返回协调节点

如果是query,则发到所有shard的node,再由协调节点处理数据,并返回

https://juejin.im/entry/5bef7046e51d4557fe34e812

脑裂的处理(单集群、多集群场景)

比如单集群双机房部署,在第3个机房加入无数据的选举节点

不使用多集群了

 

多集群怎么高可用

读高可用,写无同步,废弃了

 

有没有跨城的集群

无,延迟高、带宽贵

 

es是自己搭的吗

开始是,后来移交了

 

mysql
索引原理

b+树索引,还有hash索引,b+树索引的原理

 

回表、索引覆盖

 

自适应hash索引原理

 

 

深度分页的问题&如何优化

排序过多

limit 100, 10 改为 where >= arr[100] limit 10

 

并发
偏向、轻量级(自旋)、重量级锁

 

sync & lock

java实现setnx;扩展:加上超时(答的unsafe的

concurrentHashMap,{int state}作为value,使用unsafe.compareAndSwap,初始化时使用putIfAbsent

 

10亿ipv4的ip,寻找其中重复的

使用2^32bit的内存,int[2^29]来存各个ip是否出现过

扩展:内存不够

 

 

 

--------分割线--------下面是二面----

 

 

为啥看机会
未来3-5年希望自己成长成啥样

。。。

 

服务治理了解不

不了解,只知道有服务发现,负载均衡

核心是服务注册&发现

Thrift实现原理

https://cloud.tencent.com/developer/article/1154782

服务框架与治理系统-OCTO

负载均衡讲讲

。。。轮询

轮询、随机、最少请求、最小负载、一致性hash

最有成就感的事

es迁移

侧重考察:你看重哪些东西,如技术、别人的认可等

ES迁移怎么选型的

性能、稳定性、学习成本、运维成本

 

服务稳定性都有哪些考量因素

分库分表、缓存设计(他说这属于性能相关的)

新美大事故分析与总结 看里面的四

见:架构.xmind

性能优化的角度

 

压测怎么压的,有没有全链路压测

线上单机摘掉流量,单接口/全接口流量回放

无全链路压测

重点在于出现了哪些问题,怎么解决的,比如cpu报警、jvm崩了

全链路压测可以说,虽然不涉及全链路压测,不过了解过一些

最无力的事,你怎么做的

 

侧重考察:面对这些问题,你是怎么解决、处理的

如:上面压下来需要推动的事,别人不好推,我跟他交流,看他遇到什么困难我帮他都解决掉

有没有负责一个项目或者带人做

代理商结算

重点侧重:项目管理、当主R、横向项目如何推进

如何成为一名合格的主R

最近在学习啥新东西

比如答一下leaf就可以

水滴

 

 

 

美团服务治理还用的thrift是么,服务治理是啥

围绕服务注册、服务发现

 

服务注册、发现是怎么做的

底层基于zk

 

java8 G1收集器

无新生代、老年代,

 

java8有没有永久代

没了,改成方法区了,方法区也可以回收,怎么回收答得乱乱的

 

并行流

使用ForkJoinPool,默认的线程数是cpu核数-1

 

zk满足CAP的哪些

P一定要满足,可用性可要保证,牺牲了一定的一致性

zk就是非强一致的,但是保证了最终一致性(不是)

zk保证CP,不保证A

AtomicInteger原子性的实现

unsafe.compareAndSwap

https://zhuanlan.zhihu.com/p/37579394

unsafe.compareAndSwap()怎么实现的

 

汇编 cmpxchg指令,多核才加 lock 指令

volatile的作用

  1. 防止指令重排

  2. 字段的修改对其他线程立即可见

a=1,x=b; b=2, y=a;不该但是可能出现结果x=y=0

《并发编程的艺术》p24

https://www.cnblogs.com/dolphin0520/p/3920373.html

volatile能不能保证原子性

不能

 

信号量的作用

一段代码最多只能有n个线程在执行

控制并发线程数

信号量怎么实现的

不会,用ReentrantLock的共享锁类似的思路可以实现

信号量内部的Sync继承AQS,state设置为信号量值

每当一个线程来了,就试图用cas的方式给state减1,如果减到负值就cas失败,然后线程就开始等待

MySQL有哪些事务隔离级别,分别解决的哪些问题

 

 

MySQL有MyISAM和InnoDB,说说区别

InnoDB:支持事务、行锁、聚簇索引、5.6以后支持全文索引

MyISAM:查全表记录的数量较快

InnoDB还支持外键

主键索引、辅助索引的区别

主键索引叶子节点存了记录,辅助索引叶子节点只存主键指针

回表、索引覆盖e

 

最近在学习什么

美团的分布式id生成器,leaf

 

leaf怎么保证多个请求来的时候,id不重复

使用AtomicInteger

获取id的方法加了synchronized

全局唯一ID生成服务-Leaf

https://tech.meituan.com/2017/04/21/mt-leaf.html

(美团的订单号怎么生成(场景),业界有那些开源的生成方式,原理是什么,各有什么优缺点)

阿里

 

 

 

Solr、ES选型时候,有没有调研其他的数据库

自建 geoHash&倒排,代价太大

这块确实不了解,问了不少同学,说Solr/ES已经足够具有代表性,就没有再调研其他数据库

AOP的顺序,有哪些实现方式

interceptor的配置文件定义优先级

  1. aspect实现org.springframework.core.Ordered接口

  2. aspect加@Order注解

  3. 配置文件配置<aop:aspect ref="aopBean" order="0">

redis怎么存的

string

用到了map、zset

zset怎么保证有序

不会

ziplist和skiplist

kafka能不能支持消费的优先级

不能,partition里是顺序的

 

如果需要kafka支持优先级,要怎么做

使用最大堆存储消息

https://qiankunli.github.io/2019/04/27/kafka_priority.html

最大堆的上移/下移的时间复杂度

由于堆的层数是log(n),所以复杂度为O(log(n))

 

thrift和http的区别

都是应用层的,thrift基于二进制,http基于文本

thrift是个RPC框架,http是个应用层协议

https://www.zhihu.com/question/41609070

RPC是一种编程模式,把对服务器的调用抽象为过程调用,通常还伴随着框架代码自动生成等功能。使用RPC做网络服务开发时,通常只需要实现服务器端的一个处理函数,其余的客户端调用,序列化反序列化,方法派发(收到什么样的消息,调用服务器端的什么函数)等都由框架或者生成的代码来完成,较大地减轻了网络服务开发和调用的复杂性。

HTTP是一种应用层网络协议,RPC可以采用自定义协议,也可以通过HTTP协议来传输,thrift,grpc,xml-rpc,json-rpc都是通过HTTP传输的。HTTP既支持长连接,也支持短连接。

rpc的流程

不会

序列化和网络传输

你觉得你的优缺点是啥

交给我的事,都会有反馈

不会做的事,可能有点急,会求助于有经验的人

 

探探

 

 

 

讲了讲业务,CRM的索引

 

 

ES查询有没有使用相关性、score

模糊匹配时使用score,对应使用query

不需模糊匹配时无需相关性score,使用filter,可缓存

 

题目1 前序遍历二叉树,递归、非递归

 

 

题目2 并查集

 

 

题目3 org、人员树接口设计

 

 

restful API 的设计

 

 

数据库查询一棵树的优化

  1. 节点添加path

    1. path什么时候更新

  2. 加缓存

 

这棵树的缓存什么时候更新

  1. 设置过期时间,惰性更新

  2. 监听变更信息,主动更新

 

对java语言的理解

 

 

java的多态

 

 

java的包和go的包

 

 

可见性修饰符

 

 

--------下面是2面

 

 

讲讲业务

索引怎么迁移的

 

CRM的部署架构

x

 

系统设计时考虑的点

  • 业务背景、目标

  • 功能、分哪些模块

  • 实现方案

    • 技术选型

    • 功能设计:接口、数据库/表/索引、缓存、RPC、系统间交互时序、定时任务、感知数据变化、提供出去的服务/数据、依赖的服务/数据/MQ

  • 性能

  • 稳定性

渠道方案设计模板

系统稳定性考虑的点

 

想要的答案,好像不是围绕“故障的生命周期”

用的监控都关注哪些指标

  • 服务性能:avg、tp

  • 依赖:RPC、MQ性能/出错、cache命中率

  • 硬件:硬盘、网卡、CPU、线程数

机器、jvm、等

------下面是3面------

 

 

讲一讲菜品中心

B/C分离、归一化

04--菜品中心现状

300家肯德基上调鸡腿价格怎么办

 

 

收银会用菜品中心的价格属性吗

 

 

诡异的象限矩阵

 

 

------下面是4面 总监------

 

 

CRM的难点在哪里

门店数据量大、查询逻辑复杂

战区的设计

MySQL的存储引擎、索引

 

 

幻读 & 不可重复读

 

 

solr和ES的区别

 

 

redis的使用,LRU的原理

 

 

如果用java实现O(1)的LRU怎么做

 

LinkedHashMap

这几年的成长、做得好/不好的点

 

 

洋钱罐

 

 

 

门店数据怎么存的

MySQL

 

solr es

。。。

 

java内存模型,都啥作用

虚拟机栈、本地方法栈、PC、堆、方法区

 

堆里怎么区分的,有哪些块

Eden、Survival、Old

G1还有H

 

gc算法有哪些,讲讲g1

。。。

 

g1大对象怎么放的

巨无霸区

 

标记清除/整理的优缺点

清除有碎片,整理需要有一块空闲内存,浪费空间

 

int链表尾对齐相加(禁用反转链表)

stack存节点实现链表逆序

 

二面-----------

 

 

deep copy无向连通图

类似层序遍历,hashMap作为origin到copy的映射

 

es迁移

。。。

 

地理位置搜索原理

geoHash

 

你们地理位置的geoHash用了几位

忘了,反正能精确到米

 

怎么对比性能

索引模块重构、两个实现分别监控

 

迁移怎么保证正确性

测试

迁移要点:

  • solr保证可用

  • 灰度流量

  • 可回滚

 

3面

 

 

set里的字符串,最少几步变动start到end

  1. string看作节点,构建无向连通图,dijkstra算法

  2. 暴力,每个节点计算所有可达字符串,类似层序遍历

 

最近在学啥 做了啥

Chrome插件

 

用过什么比较牛逼的技术

  • polysh:看日志

  • greys:查线程飙高

 

业务用到几台数据库

自己业务:1主1从1统计从

兄弟组业务:北京1主1从,上海2从

 

 

 

58同城

 

 

 

系统架构

画了图给他讲

 

es 存储结构,跟mysql区别

 

 

redis分布式锁 用哪个命令 几个参数

带nx参数的set命令

4个参数:key value expire_time NX

 

redis主节点挂了怎么办

不会

 

redis主从怎么复制

不会

 

synchronized可以用在哪

(field上能不能用

可以在class、方法、block上

 

 

synchronized在静态方法 实例方法有啥区别

 

 

synchronized跟lock区别

 

 

lock在使用上跟sync有啥区别

 

 

hashmap结构,

 

 

并发版hashmap,原理 1.7 1.8

1.7分段锁

1.8 Node+链表+CAS

 

cas原理

 

 

红黑树vs二叉查找树

没答上来红黑树

 

线程池参数,拒绝策略

 

 

redis失效策略、怎么实现

 

 

雪崩 穿透 击穿

 

https://juejin.im/post/5dbef8306fb9a0203f6fa3e2

算法:并发输出abc:

3个线程分别输入字母a、b、c

每凑够一个“abc”,就输出一个abc

原子long类,分3段,每段20位的整数,来表示一个字母的个数

//第一步,++该字母的个数

如果是a,newValue = atomicLong.get() +1 << 40;

如果是b,newValue = atomicLong.get() +1 << 20;

如果是c,newValue = atomicLong.get() +1;

cas(oldValue, newValue),至成功为止

//第二步,尝试输出abc,至a、b、c至少1个count为0为止

countA = atomicLong.get() >> 40;

countB = atomicLong.get() >> 20 % (1 << 20);

countC = atomicLong.get() % (1 << 20);

if (countA > 0 && countB > 0 && countC > 0) {

// cas地把a、b、c的个数各减1

//print("abc")

}

 

算法:背包几种方法填满(递归

 

 

排查内存使用过高(top、线程、greys

greys通过trace命令,在线程池构造方法被调用时,查看调用的堆栈,得知哪个地方一直在创建线程池,以排查出问题

 

自己设计的什么系统(目标管理

 

 

该系统其数据量多大(每月百万量级

 

 

 

 

 

二面

 

 

天眼怎么做,爬虫怎么做

 

 

怎么知道爬虫爬完数据(拉mq 无积压

 

 

故障诊断咋做的

 

 

es数据怎么容灾(主从分片,不在同一节点

 

 

es数据写入流程,主从分片

 

 

代理商系统是服务于商家的吗

 

 

3亿用户 年增长20% 1w QPS 分表思路

考虑单机的极限,包括QPS、存储容量等

如果单机扛得住,可以只分表

如果单机抗不住,需要分库分表

 

java里的锁讲讲(sync lock

 

 

排查cpu过高、内存过高

看有没有大量的JSON解析等耗费CPU的操作

jstack看线程状态,看有没有一直runnable的线程,怀疑死循环

jmap看内存

 

16g 32cpu 2T,500G的11位手机号去重,扩展:怎么提速

bitmap去重

提速的话,因为机器是多核,可以把数据分桶然后多线程搞

 

 

 

 

3面

 

 

crm设计图,架构

 

 

es怎么部署的,如何容灾

 

 

销售漏斗的流程变了怎么办(流程服务

可以使用公司内部的流程平台,反正CRM内部是没做流程引擎

 

org树查子孙节点

org节点加一个字段,0-1-15-322-52342,这种从root到自己的path,然后按path like 'xx-xx-%'查,能用上前缀索引

 

跟同事的分歧怎么办

。。。沟通嘛

 

跟产品的分歧怎么办

。。。沟通嘛

 

 

 

 

4面

 

 

挑个系统画架构(代理商

 

 

kafka几个partition

公司内部MQ平台自己设置的,随口编了“默认10个partition”

 

序列化的kafka(单partition

kafka怎么保证顺序消费

只用1个partition,单partition就可以有序了

 

如果是单partition怎么高可用(跪了

 

他说“我又没说保证顺序消费一定要只用1个partition”...

微服务框架Spring Cloud/Dubbo/Service Mesh,thrift是框架

 

给我讲了康威定律,

链路跟踪怎么做(trace

公司内部有个trace,实现方式是ThreadLocal里存一个traceId,在发生调用时,传递这个traceId

 

java stream的terminal操作讲两个

比如 count、reduce

 

forkjoin,什么任务能fork join

我说能不能的话,应该一眼能看出来

他说这个东西是要有理论依据的。。

设计模式,单例太low了

我说我知道单例模式,他说太low了

 

设计原则,开闭原则你的应用

 

 

 

 

 

5面 技术什么大leader

 

 

怎么对待、处理线上问题

先保证服务可用,不影响用户(包括降级、修数据)

后修复bug

然后总结原因

 

在美团 工程师文化啥的 感受最深的是啥

遇到问题一定要有打破沙锅问到底的精神,特别是偶发和比较诡异的问题。

 

 

 

 

hr

。。。

 

滴滴

 

 

 

项目 solr2es

 

 

算法:二叉树深度m对应节点有几个

我写的层序遍历

 

io多路复用

讲了下原理,1个线程来查看这些IO有没有ready,有的话通知其他线程

 

数据库实现乐观锁

没答上来,搜了一下,2面又被问了。。

 

linked blocking queue怎么实现

一个notEmpty Condition,一个notFull Condition,。。。

 

thread local怎么实现

就是每个Thread里都有个Map,key是threadLocal的的对象

 

代理模式解决哪些问题,都是怎么做的

todo

 

 

 

 

2面

 

 

crm哪些难度(业务复杂、数据量大

todo

 

业务复杂怎么做

todo

 

接口怎么设计

 

 

接口&mq怎么用

 

 

数据量大怎么做(ES

 

 

数据怎么同步ES(增量/存量兜底/断点续传

 

 

性能问题怎么排查(cpu 内存 网络 io

 

 

new的对象分配在堆上还是栈上

 

 

java线程状态的waiting和block区别

 

 

归并排序原理,时间复杂度

 

 

很多int找中位数(top k/ 桶排序

 

 

数据库乐观锁悲观锁

 

 

 

 

 

资源定义怎么做的

 

 

调用接口有没有限流,服务端还是客户端做

 

 

资源搜索给solr写个插件不就行了为啥要迁移es,你迁移一个月也够写个插件了(…

 

 

看过英文文档没,jvm规范英文版,xx论文

 

 

如果服务端限流了,你怎么保证客户端可以获取数据(mq削峰,计数

 

 

redis的话计数怎么保证原子性(无cas

 

 

数据库的默认隔离级别

 

 

可重复读下修改记录,另一个事务能不能读到

 

 

mtthrift的原理,怎么实现网络通信,nio还是bio

 

 

sync的实例和静态方法会不会阻塞对方

 

 

线程池submit的方法怎么感知结束,同步下一个线程?

 

 

多线程回调是在哪个线程里执行的

 

 

(面完3面我就跑了,下午还有快手的..

 

 

快手

 

 

 

一面

solr2es
多个请求写es,冲突怎么办
分布式锁怎么实现
aop原理(动态代理&cglib
为啥方法必须public&不能用this(强行讲遇到的transactional方法加了try catch也不能返回
spring容器里的是代理类还是被代理类
事务传播规则
hashmap put伪代码
高并发什么场景(菜品C端接口,缓存预热,防雪崩、防穿透
线程池参数

 

 

二面

资源管理难点
权限怎么管理
公私海轮转模型(不能拍脑袋
工单状态怎么管理/轮转怎么做/工作流
spring的bean生命周期,singleton
string buffer builder
长整数string相加
矩形往右下方向递增,找路径代价最小的(动规/递推

 

 

三面

crm架构图
各系统间怎么调用
redis服务最高并发度是多少,从内存/cpu层面怎么分析出来
cpu从内存加载内存的一个字,过程怎样的
从操作系统/硬盘角度看怎么寻址、获取文件数据

 

 

 

 

 

一面

怎么保证es/mysql数据一致
为啥不用databus
mysql主从同步 有哪几种
binlog是啥
es索引
mysql索引
mysql b+树查几次,回表、索引覆盖
给张表,怎么加索引、联合索引
这张表,怎么加缓存
redis数据结构(菜品点赞用zset
redis分布式锁
redis怎么保证nx不出问题(单线程处理请求
算法:字符串去掉ab、原地操作

 

 

二面

门店数据怎么存,怎么分库分表
es门店名、描述字段怎么存的
es查询流程
es相关性算法了解么
分布式锁,怎么删key(不能删另一个锁的key
redis是单机还是集群,设了key master挂了怎么办
mysql索引,怎么查询的
为什么主键id建议是自增的
where in特别多怎么办
concurrentHashMap不同版本的实现
cas的底层原理
算法:10G文件top k,找重复、时间性能
用大顶堆还是小顶堆
非精确找重复,bloom过滤器
im,大量的读写操作,怎么减轻写入压力,怎么保证客户端不被推送打崩

 

 

长银消费金融

 

 

 

todo

 

 

 

 

 

华为-公共开发部

 

 

 

一面笔试

// 3.times do

//   puts 'hello world'

// end

 

/** 8 间牢房排成一排,每间牢房不是有人住就是空着。

 

每天,无论牢房是被占用或空置,都会根据以下规则进行更改:

 

如果一间牢房的两个相邻的房间都被占用或都是空的,那么该牢房就会被占用。

否则,它就会被空置。

(请注意,由于监狱中的牢房排成一行,所以行中的第一个和最后一个房间无法有两个相邻的房间。)

 

我们用以下方式描述监狱的当前状态:如果第 i 间牢房被占用,则 cell[i]==1,否则 cell[i]==0。

 

根据监狱的初始状态,在 N 天后返回监狱的状况(和上述 N 种变化)。

 

 

 

示例 1:

 

输入:cells = [0,1,0,1,1,0,0,1], N = 7

输出:[0,0,1,1,0,0,0,0]

解释:

下表概述了监狱每天的状况:

Day 0: [0, 1, 0, 1, 1, 0, 0, 1]

Day 1: [0, 1, 1, 0, 0, 0, 0, 0]

Day 2: [0, 0, 0, 0, 1, 1, 1, 0]

Day 3: [0, 1, 1, 0, 0, 1, 0, 0]

Day 4: [0, 0, 0, 0, 0, 1, 0, 0]

Day 5: [0, 1, 1, 1, 0, 1, 0, 0]

Day 6: [0, 0, 1, 0, 1, 1, 0, 0]

Day 7: [0, 0, 1, 1, 0, 0, 0, 0]

 

示例 2:

 

输入:cells = [1,0,0,1,0,0,1,0], N = 1000000000

输出:[0,0,1,1,1,1,1,0]

**/

 

class ShowMeBug {

  public static void main(String[] args) {

    int[] input = { 0,1,0,1,1,0,0,1 };

    int days = 2;

    int[] result = new ShowMeBug().prisonAfterNDays(input, days);

    System.out.println(java.util.Arrays.toString(result));

 

  }

  

    public int[] prisonAfterNDays(int[] cells, int N) {

      int length = cells.length;

      int[] nextDay = new int[length];

      for (int i = 0; i < N; i++) {

        nextDay[0] = 0;

        for (int j = 1; j < length - 1; j++) {

          nextDay[j] = 1 - (cells[j - 1] ^ cells[j + 1]);

        }

        nextDay[length - 1] = 0;

        cells = nextDay;

      }

      return cells;

    }

}

 

 

一面

讲架构,从上往下讲(最外层是web、iOS/Android

用的哪些微服务?(美团自研的thrift

用的rest接口吗?(没有,因为rest接口是http的,而http请求有网关单点的风险,所以使用thrift rpc+服务治理的方式

服务治理是怎么搞的,clien怎么知道要调用哪个server?(服务治理的命名服务做的这个事儿,命名服务本质上是个zk,从zk获取server的ip列表

client每次调用都从zk获取server的ip列表吗?(每个client会对他要调用的server节点,监听其节点变化,每当server节点有变化时<如ip的增删改>,会从zk拉取最新的server节点的ip列表,而不是每次调用都获取最新列表

你们的服务是有状态的吗?(服务本身是无状态的,包括操作人等上下文都转化为接口的参数了,但是作为存储的MySQL是有状态的

为什么服务是无状态的,这有什么好处?(无状态的服务便于水平扩展,遇到性能瓶颈时只需要加机器即可;如果服务是有状态的,一方面需要各个服务器间需要进行状态的协调,另一方面加机器也很困难

那如果在服务器间需要是有状态的,比如对一个对象加锁,需要怎么做?(分布式环境下在不同机器上加锁,这就是有状态的了,在无状态的服务上,需要引入有状态的第三方来进行状态协调,我使用的方案是实现分布式锁,是基于redis实现的

具体怎么做?(几个注意点:带nx的set命令,而非setnx命令;如果执行加锁的街舞逻辑过程中,服务宕机了怎么办?设置的redis key一定要有过期时间,且用带nx的set而非setnx;分布式锁的等待机制?基于注解实现,有参数来控制:是死等还是等到超时时间然后报错;没问到的地方:1. 误删其他线程/其他请求的锁怎么办?锁的key对应的value存上线程的唯一id,删的时候校验,仅当删除者==加锁者时候才删 2.针对上面1的情况,如果校验时候value正确,而删的时候key对应的value已经变了,该怎么办?使用lua脚本,将“校验value+删除key”变为原子操作;3.(谁问这个问题谁混蛋)你们用的redis是单机还是集群,如果是集群,那你key刚设置到master节点时,master节点挂了,而key还没同步到slave节点,这时候下一个同一key的分布式锁来的时候,是能直接获取锁的,这需要怎么处理?(这个问题是真的变态)redlock可解,同一个key设置到多个master上,当过半master设置成功时,才认为上锁成功

除了redis,还有哪些方案可以实现分布式锁么?(zk

为什么用redis而不是zk?(我答的原因是,美团的redis服务禁用了虚拟内存,是纯内存的,所以性能更高;但是实际原因应该不止这个,建议网上再查查

分布式锁怎么实现的?基于注解

java的注解是什么原理?(他想问的应该是动态代理的原理,讲了jdk动态代理和cglib的区别,略

jvm加载类的时候,啥时候创建的动态代理类?(针对不同的AOP方式,创建动态代理类的时机也是不同的;对于AspectJ这种编译时增强,其相当于直接修改了java代码,所以在jvm加载类的时候,就创建了增强的动态代理类;而jdk动态代理和cglib都是运行时增强,是在spring容器初始化之后,创建各个bean的时候,创建的这些动态代理类,注意,spring容器里的bean都是动态代理的类,而不是程序员写的代码对应的那个类

分布式锁的粒度是怎么样的?操作+被操作对象粒度,细粒度(Fine-grained)

redis是单库?单节点?单集群?忘了他问的啥了..(CRM系统用的单redis集群;菜品系统用的多redis集群

多redis集群怎么协调状态?(无需协调状态,该系统是多租户的,不同租户使用各自独立的redis集群,互不影响(租户数量不多,现阶段也就3个)使用多集群时,对redis服务进行了封装,添加租户id作为route key,算是有一定侵入性的

分库分表怎么做的,有中间件支持吗?是否有侵入性?(公司的DBA做了分库分表的中间件,无需手动实现,无侵入性,正常写SQL(SQL里需要有分库分表的字段)即可

JVM 内存分哪几块,堆分为哪几块?GC怎么做的?(略

OOM什么时候产生的?(略

栈溢出什么时候产生的?(略

栈大小是1M,是啥意思,所有栈加起来1M吗?(给他详细讲了讲..

元数据区是啥?(java8引入的新概念,作为方法区的实现,代替之前的永久带的实现

平衡二叉树了解吧?(了解

二叉树的先序中序后序了解吧?(了解

算法题:见上面那一行

 

 

华为二面

讲系统架构&你在里面承担什么职责

怎么处理安全问题,怎么防止命令注入?(参数校验

参数校验是自己实现,还是通过工具?(我说我们做后端服务,提供thrift接口,不涉及这个…

XSS是什么,分哪三种?(不会

HTTP的返回码,2/3/4/5开头的分别都是啥意思

OOM什么场景出现?(堆内存全是被占用的对象,新对象申请不到空间了,即使回收了软引用的对象也不够了

top看到某个进程CPU过高怎么排查?(jstack看各个线程,有没有一直runnable的,怀疑死循环;看业务逻辑里,有没有对json解析等特别耗费CPU的场景

内存怎么分析?(jmap等命令

jmap命令里,shallow heap跟retained heap有什么区别?(跪了,不会

jdk7/8里,HashMap有什么改动?(答了8有链表与红黑树的转化;其实还有个头插变尾插

接口耗时异常,怀疑是redis有问题怎么排查?(我说先得确定到底是哪儿耗时,一方面可以加监控打点,从统计角度看各个方法的耗时,另一方面可以使用greys针对一次接口调用,看对应各个子方法的耗时详情

redis慢日志功能了解吗?(不了解

 

 

三面-部长面

自我介绍(做过哪些项目
画crm架构图
接入层前端你参与了吗(没
各个系统怎么交互的,总线吗?osgi吗(用的自研的rpc,thrift
讲讲es(把es迁移完整说了一遍,背景、选型、迁移过程、保证solr可用/灰度/回滚、数据正确性/性能监控
oom怎么产生的(full gc后内存不够了
几种常见导致oom的问题(内存泄漏、threadlocal没清理之类的
那资源没释放会不会导致oom(对对对,很多资源需要close,这在文件/io里特别常见
怎么排查oom(jmap、jstack、greys
排查oom的例子(菜品中心压测
(我自己强行讲了排查线程的例子,问题、jstack记录、分析出线程池过多、greys trace跟踪、回滚、后续处理
redis有用到吗(有,作为缓存来用
系统代码用啥语言(java
系统跟数据sql怎么打交道(Mybatis
一年代码量多少(写码时一天几百,不到一半的时间在写码,其他时间开会/讨论需求干啥
开啥会(理解需求,讲了个梳理需求避免开发的例子
有没有压力很大的情况(一是排查问题要死磕,二是做结算,方案:1. 梳理长期/短期目标 2. 分析要做哪些工作 3. 请业务方定优先级
美团工作强度怎么样,我们这儿强度有点儿大(还行

 

 

华为-云计算

 

 

 

java的集合有哪些
list set map的区别
array和map的插入性能比较
智力题:27个球里有1个轻,拿天平找
设计模式用过哪些(装饰器
Java哪些类库用了装饰器(io里
开闭原则对啥开放对啥关闭
你学设计模式用的哪本书(head first,他说 headfirst上讲的太少了
你一年代码量几行
用什么方法提高工作效率(thrift编译插件、git不跟踪thrift编译出的代码

 

 

SAP

 

 

 

一面

你大学导师是谁

js基本数据类型有哪些

未赋值的var变量,值是啥

英语自我介绍一下

 

 

二面

// 我日,记不太清了

 

 

 

联通研究院

 

 

 

一面

讲项目
使用什么分词器,没有用结巴分词器吗
es停用词从哪来的
系统
类加载机制
集合类有哪些(list set stack vector
哪些线程安全的集合类?
Spring cloud了解么(不
jdk7&8区别(hashmap、chashmap、元空间

 

 

二面

??

 

 

腾讯企点

 

 

 

一面//todo

 

 

二面//todo

 

 

三面//todo

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值