春招0 offer的渣渣,是如何在秋招找到自己满意的工作!!

本人情况渣硕一个,春招0 offer。目前收到的offer有 斗鱼,百度外卖,腾讯,顺丰科技,广联达,科大讯飞,海康威视。。。等结果的有 滴滴,美图,网易,网易游戏,好未来。

经历了春招的 0 offer后,发现找工作的首要因素是定位问题。本人研究生期间在导师的公司实习了2年,本以为自己比较厉害,结果春招一个offer 没拿到,面试只会项目中遇见的问题,连网络的3次握手,4次挥手都不能讲清楚。大家找工作的时候要好好复习基础知识,这个很重要!!!然后就是消息问题,春招的时候根本不知道牛客网这样的存在,消息闭塞,面经不看。导致春招阿里,腾讯,携程,去哪,人人都是一面挂。深受打击,后面的工作自己也没在找了。

由于春招及时发现了自己的不足,然后在6-8月份发表了小论文后就疯狂的看书刷题,牛客网上的剑指offer必刷,虽然考试的时候比这个难,但是面试的时候基本是上面的题,刷个几遍就会了。然后是看书 《设计模式》,《高性能MYSQL》,《高可用MYSQL》,《MySQL技术内幕》,《redis设计与实现》(因为平时数据库用的比较多,所以这方面看的比较多,每次面试的时候可以当做自己的优势多介绍下),《深入理解Java虚拟机 JVM高级特性与最佳实践》,《Java多线程编程核心技术》,《深入分析Java  Web技术内幕》,《TCP-IP详解卷1:协议》,《大型网站系统与JAVA中间件实践》,《大型网站技术架构:核心原理与案例分析+李智慧》,为什么看这么多web和大型网站的书,是因为自己在项目中有有过这个知识,但是概念完全不懂,因此看了后给面试官讲解起来也比较容易。接着就是项目,因为一直在做项目,也是自己的一大优势,所以这块就没怎么准备,把自己做的项目整理一遍,同时对使用的框架dubbox,spring,mybatis,redis,activeMq,持续集成等多去看博客,看官方网站就能进行学习,同时看书的时候最好能自己总结下博客,这个在后面复习很有用。贴个我自己的博客吧!!! http://blog.csdn.net/qq_23211905 。然后就是找工作的过程一定要坚持,不能因为觉得自己菜就不去学习了,不去刷题了。

先说下自己秋招的苦逼历程吧!
百度(提前批):3面挂;(感觉自己运气不太好,春招第一家是面的阿里,秋招第一家就来百度,一来就是大boss。3面后面试官加了qq还安慰自己说名额不够,这个很关键,给了自己信心)
CVTE(提前提):2面挂;这个公司不太好,感觉是个幌子,建议大家慎重。。。不过可以当成练手的公司。
远景能源:1面挂;
网易(内推):3面挂;
美团(内推):3面挂,这个美团挂的我很伤心,前面2面感觉面的蛮好,结果3面什么不问就聊天,问自己的优点,自己和同学比怎么样。结果当时太实诚说,同学们都很厉害,自己很一般,和大多数同学一样。(大家面试的时候要使劲的吹自己,你自己都不觉的自己厉害,别人怎么会要你,亲身经历,特心塞)。
今日头条:2面挂,算是我面试中比较难的,本来自己的算法就不太强,结果2面硬是出来4个编程题,第1个不会做第2个,第2个做了做第3个,第3个做了出第4个,第四个不会。哭晕在厕所。。。
360:2面挂,2面说好的让我去面hr,结果给我挂了,面试官的话不要全信!!
链家(内推):2面挂,2面聊人生,智力题没做出来,来了句我们只要bat档次的学生。心想不要算了,不是因为你们报销车费,我刚好来北京有事,我才不会跑这么远。
滴滴:5面等结果,滴滴也是我面的比较心塞的公司,由于本人是做java的,结果前面4个面试官都不是做java的,就问基础知识:操作系统,组成原理,计算机网络。一面面试官评价基础有待提高,2面面试官直接说:你基础比较薄弱,自己能力不够期望就不要报的太高,不然以后和优秀的同时合作自己会受打击(心想,你说这话我都没受打击,我还会怕别的!!),然后自己灰溜溜的跑了,结果到了地铁口收到2面通过的消息,让去三面。3面面试官超级好,聊了下让我回去等明天的hr面。结果第二天来了,又面了一轮技术,心里郁闷的不行!!!
美图:3面 等结果
斗鱼:5面 ,以拿offer
广联达:2面 offer
百度外卖:3面 offer
顺丰科技:2面 offer
科大讯飞:2面offer
海康威视:2面 offer
好未来:2面结束,等结果。
腾讯:offer
网易:3面 等结果
网易游戏:3面 等结果
58:拒了hr面试。
京东:2面挂,挂的我也是心里服气了。https://www.nowcoder.com/discuss/48167 因为后面我和京东的hr反应了情况,其实明白状态已经变成复试未通过,打电话再来面试,我肯定还是不会过。结果还真是,2面上来就问 redis的底层原理,消息队列的底层原理与实现,滑溜溜的挂了!

下面是秋招自己总结的面经,后面很多公司问的基本一样就没总结了。

CVTE 1

1. 项目介绍。

户中心分为当事人模块和用户会话模块,我主要负责用户会话模块,主要任务是控制用户的权限,用户的登录,用户登录后生成token,将token存放redis缓存。token保存着用户的基本信息,是系统交互的凭证相当于session

同时负责结算模块的开发,结算中心主要分为收益分成,冲红,解冻,提现,账期,对账。

账号表;提现方式表(各自银行),账号提现信息(银行卡号),提现申请表,提现记录表,账户变动记录表,红包记录表,税收记录表

收益分成:接收交易中心发的topic,将商品的收益按设定的比例分给出版社,编辑,作者,平台。各用户的账号金额由可提现金额,冻结金额组成。分成的金额变成了冻结金额,过了保障期和账期才可以提现。如果是虚拟商品,只需要过账期就可以解冻。

每条记录有一个记录表,宽表。

冲红:用户申请退货,接收交易中心的topic,对某一笔订单进行退货冲红操作。将分成的冻结金额扣除掉。增加一条账号记录信息。

提现:可提现金额不为0,用户可申请提现。作者,编辑申请提现需要出版社同意,出版申请提现需要平台同意。提现的同时代收30%的个人所得税。

转账:同意提现,从微信的账号进行转账,微信商户号转账到用户个人微信账户。

账期:平台设置各出版社的账期,分成过了账期以后进行解冻。

对账:每天晚上定时的去扫描数据库,通过用户申请提现时的单号去微信去对比数据,查看是否有转错单号的情况。

税收:代收用户的手续费,月底进行统一批扣。

专题应用:各种资源可以挂到统一专题下,类似与今日头条的每一栏的选项卡,是否推荐,上下架。

投票应用:投票设置,投票选项,用户投票。

单词表,用户背诵记录,用户背诵详情表,词单记录,单词表,词库分类,词单单词管,单词选项

背单词应用:用户背单词。词单,用户出试题名称图片等。单词库,用户设置的单词分类。单词,选项。用户通过做词单来进行背单词。

2. 用户登录权限系统的表设计。

用户登录表,系统表,用户登录系统表,安全组表,用户登录安全组关联表,权限菜单表,安全组权限关联表,行业表,行业菜单表。

当事人模型:当事人表,当事人角色,角色表。

3. 用户角色关系。

作者,出版,编辑,运营,平台

4. Redis使用,为什么使用redisRedis怎么保存热点数据。

热点保存数据使用最近最少使用方法进行淘汰,建立一个链表,每次使用的放于链表头,长期不被调用的放于链表尾。

限定 Redis 占用的内存,Redis 会根据自身数据淘汰策略,加载热数据到内存。(6种淘汰策略)

5. 使用dubbo的好处,常用框架介绍。

分布式服务治理,实现软负载均衡和failover

服务容器负责启动,加载,运行服务提供者。

服务提供者在启动时,向注册中心注册自己提供的服务。

服务消费者在启动时,向注册中心订阅自己所需的服务。

注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

6. 集合对象怎么根据时间进行排序。

7. 多人操作数据,怎么保证数据数据的准确性。

使用乐观锁。

8. 数据库的优化

9. 5中常见异常

10. 出现outOfMemoryException怎么处理,及其参数原因。

原因:没有释放向系统申请的内存。

具体原因:1.静态集合类,生命周期和应用程序周期一致。

2.***

3.各种连接(数据库,io连接)

4. 单例模式。单例对象持有外部对象的引用,那么这个外部对象将不能被jvm正常回收,导致内存泄露

1.尽量避免static成员变量。

2.使用完listmap,大对象后赋值为0

3.避免使用死循环等重复操作对集合添加元素。

造成栈溢出的原因:

1. 是否有递归

2. 是否有大量循环或者死循环

3. 全局变量过多

4. 数组,listmap过大

分析:方法:通过内存映像工具对dump出来的堆转储快照进行分析,也即是分析是堆溢出还是栈溢出。

11. 泛型的好处。

java中泛型的引入主要是为了解决两个方面的问题:1.集合类型元素在运行期出现类型装换异常,增加编译时类型的检查,2. 解决的时重复代码的编写,能够复用算法。

CVTE 2

1. 常见的单点登录有哪些?

CAS

2. 常见设计模式?单例模式有哪几种?介绍一下voliate?

双重检验是voliate保证防止指令重排序。

3. Redis的基本数据类型?集合怎么使用?

String:数据结构是简单的key-value.

使用:set(key, value):给数据库中名称为key的string赋予值value

get(key):返回数据库中名称为key的string的value

setnx(key, value):添加string,名称为key,值为value(仅当键不存在)

incr(key):名称为key的string增1操作

decr(key):名称为key的string减1操作

append(key, value):名称为key的string的值附加value

list:列表,redis 使用双端链表实现的 List;实现最新消息排行等功能(比如新浪微博的 TimeLine )。List 的另一个应用就是消息队列。

rpush(key, value):在名称为key的list尾添加一个值为value的元素

lpush(key, value):在名称为key的list头添加一个值为value的 元素

lpush mylist "world"#从头部插入字符串

lpush mylist "hello"#同上

lrange mylist 0 -1#获取从0到最后一个如[1) "hello" 2) "world"]

hash:字典,将一些结构化的信息打包成 hashmap,Redis 的 Hash 结构可以使你像在数据库中 Update 一个属性一样只修改某一项属性值。

hset user:001 name liweijie#哈希设置用户user:001的name键值为liweijie

hset user:001 age 21#同样,增加一个age键值为21

hget user:001 name#哈希获取用户user:001的name键的值。

hkeys(key):返回名称为key的hash中所有键

hvals(key):返回名称为key的hash中所有键对应的value

Set集合:Set 就是一个集合,集合的概念就是一堆不重复值的组合。利用 Redis 提供的 Set 数据结构,可以存储一些集合性的数据。

共同好友,唯一性。

Sorted set:有序集合。

sadd(key, member):向名称为key的set中添加元素member

srem(key, member) :删除名称为key的set中的元素member

spop(key) :随机返回并删除名称为key的set中一个元素

smove(srckey, dstkey, member) :移到集合元素

4. 为什么选择ActiveMq?它的作用?

5. Restful架构?什么才是restful?好处和缺点?

6. Redis数据库的持久化。怎样防止redis数据丢失。

aofrdb文件,其中rdb二进制文件,aof基于命令。

创建RDB文件使用save,bgSave(创建子进程)。

Aof是通过保存redis服务器所执行的命令来记录数据库状态;追加(append),文件写入,文件同步。

RDB是通过保存数据库的键值对来记录数据库的状态。

数据库的复制:slaveof来复制数据库。

7. 持续集成部署,循环依赖怎么办?

8. 未来5年的规划?

远景能源

1. 数据库索引INNDB的好处?

1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。

2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。

3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。

4.外键约束。MySQL支持外键的存储引擎只有InnoDB

5.支持自动增加列AUTO_INCREMENT属性

6.热备份。

2. 数据库最左匹配原理?

3. TOPK问题?

4. 数据结构堆和快排?

5. 推荐算法?

6. CAS算法原理?优缺点?

无锁操作,乐观锁。优点无锁,效率高。缺点:

1. ABA问题。因为CAS需要在操作值的时候检查下值有没有发生变化,如果没有发生变化则更新,但是如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。ABA问题的解决思路就是使用版本号。在变量前面追加上版本号,每次变量更新的时候把版本号加一,那么ABA 就会变成1A-2B3A

Java1.5开始JDKatomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compareAndSet方法作用是首先检查当前引用是否等于预期引用,并且当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。

2. 循环时间长开销大。自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销。如果JVM能支持处理器提供的pause指令那么效率会有一定的提升,pause指令有两个作用,第一它可以延迟流水线执行指令(de-pipeline,使CPU不会消耗过多的执行资源,延迟的时间取决于具体实现的版本,在一些处理器上延迟时间是零。第二它可以避免在退出循环的时候因内存顺序冲突(memory order violation)而引起CPU流水线被清空(CPU pipeline flush),从而提高CPU的执行效率。

3. 只能保证一个共享变量的原子操作。当对一个共享变量执行操作时,我们可以使用循环CAS的方式来保证原子操作,但是对多个共享变量操作时,循环CAS就无法保证操作的原子性,这个时候就可以用锁,或者有一个取巧的办法,就是把多个共享变量合并成一个共享变量来操作。比如有两个共享变量i2,j=a,合并一下ij=2a,然后用CAS来操作ij。从Java1.5开始JDK提供了AtomicReference类来保证引用对象之间的原子性,你可以把多个变量放在一个对象里来进行CAS操作。

7. Cookiesession的区别?怎么保证cookie的安全。

如何保证cookie的安全性:1.进行加密;2. 用于识别身份的cookie应该设置为HttpOnly,也就是禁止通过JS操作这个cookie。3.cookie中的sessionId设置过期时间。

8. hashMap的原理?currentHashMap原理?

网易1/2/hr

1. 数据库事物?

2. B+树结构,索引选择原则?

1 表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。尤其是在主键字段创建索引时,cardinality(基数,集的势)的值就等于该表的行数。MySQL在处理主键约束以及唯一性约束时,考虑周全。数据库用户创建主键约束的同时,mysql自动创建主索引(primary index),且索引名称为Primary;数据库用户创建唯一性索引时,MySQL自动创建唯一性索引(unique index),默认情况下,索引名为唯一性索引的字段名。

2 占用存储空间少的字段更适合选作索引的关键字。例如,与字符串相比,整数字段占用的存储空间较少,因此,较为适合选作索引关键字。

3 存储空间固定的字段更适合选作索引的关键字。与text类型的字段相比,char类型的字段较为适合选作索引关键字。

4 Where子句中经常使用的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。

5 更新频繁的字段不适合创建索引,不会出现在where子句中的字段不应该创建索引。

6 最左前缀原则。

7 尽量使用前缀索引。

引入索引的目的就是提高数据的检查效率,因此索引关键字的选择与select语句息息相关。这句话有两个含义:一是,select语句的设计可以决定索引的设计;索引的设计也同样影响着select语句的设计。例如原则1与原则2,可以影响select语句的设计;而select语句中的where子句、group by子句以及,又可以影响索引的设计。两个表的连接字段应该创建索引,外键约束一经创建,MySQL会自动地创建与外键相对应的索引,这是由于外键字段通常是两个表的连接字段。

复合索引还有一个优点,它通过被称为“最左前缀”(leftmost prefixing)的概念体现出来的。假设向一个表的多个字段(例如fristnamelastnameaddress)创建复合索引(索引名为fname_lname_address.where查询条件是以下各种字段的组合是,MySQL将使用fname_lname_address索引。其他情况将无法使用fname_lname_address索引。可以理解:一个复合索引(firstnamelastnameaddress)等效于(firstnamellastnameage)、(firstnamelastname)以及(firstname)三个索引。基于最做前缀原则,应尽量避免创建重复的索引,例如,创建了fname_lname_address索引后,就无需再first_name子段上单独创建一个索引

3. 常见的并发包,currentHashMap的原理?

4. 一个数组,多线程求和?

5. 内存泄漏和内存溢出?内存溢出的原因,举列子?

内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。

内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。

 原因:1.没有释放向系统申请的内存;2.对象已不再使用单仍在内存中保留。Java 程序运行时的内存分配策略有三种,分别是静态分配,栈式分配,和堆式分配,对应的,三种存储策略使用的内存空间主要分别是静态存储区(也称方法区)、栈区和堆区。
造成的原因有:1、静态集合类引起内存泄漏:2、当集合里面的对象属性被修改后,再调用remove()方法时不起作用。3、***。4、各种连接。5、内部类和外部模块的引用。

6. Dubbo介绍,长连接通信原理,怎么知道连接到生产者?

7. 线程和进程的区别,各自优势?

进程是系统进行资源分配和调度的一个独立单位。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行.

·     进程是资源分配的最小单位,线程是程序执行的最小单位。

·     进程有自己的独立地址空间。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

·     线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

·     但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

8. Redis集群,哨兵,hash一致性?

9. 单例模式

10. SynchronizedvoliateThreadlocal介绍什么情况下使用?

11. 线程池的参数,有哪几种线程池?

12. 消费者生产者怎么实现,多线程怎么实现?如果宕机阻塞队列的内容消失,怎么处理?

在Java中一共有四种方法支持同步,其中前三个是同步方法,一个是管道方法。

(1)wait() / notify()方法

(2)await() / signal()方法

(3)BlockingQueue阻塞队列方法

(4)PipedInputStream / PipedOutputStream

BlockingQueue阻塞队列方法

put()方法:类似于我们上面的生产者线程,容量达到最大时,自动阻塞。

take()方法:类似于我们上面的消费者线程,容量为0时,自动阻塞。

13. 怎么查找java的线程运行情况?

Jspjstactk,jmap,jinfo

14. HashMap原理,put的过程。

15. Stringstringbuildstringbuffer区别,为什么stringbuild不安全举例。

美团1

1. 数据库隔离级别,数据库mysql判断是否为空的函数,数据库格式化时间的函数

5中隔离级别,ifnullDATE_FORMAT(date,format) 

2. Linux怎么保存文件退出,不保存退出;定时任务?

打开文件命令:vi we.txt

修改文件按:i表示插入

保存 Esc+:+wq 这个是保存,回车保存。

不保存的命令Esc+:+q!这个是不保存

3. 项目中权限设置?

4. Redis的使用,集群,怎么解决缓存穿透?

缓存穿透:1.对查询机构为空的情况也进行缓存,缓存的时间设置短一点,或者对该KEY对应的数据insert之后清理缓存。

2.对一定不存在的key进行过滤,可以把所有存在的key放到一个大bitmap中,查询时通过该bitmap过滤。

5. 数据库索引使用的什么?B+的结构?

6. Java虚拟机的垃圾回收算法?各自优缺点?

7. Tcpudp区别?

8. Java的基本特性?

美团2

1. 推荐算法论文讨论。会不会kmeans?TF-IDF权重算法?

TF-IDF 其中表示用户u使用标签的使用次数,表示用户u使用标签的总数,n表示用户的总数,表示使用标签的用户数量。

2. 山峰找峰值

二分查找,每次比较midmid+1

3. hashMap原理,为什么2倍的扩容。1.8有什么改进

经过rehash之后,元素的位置要么是在原位置,要么是在原位置再移动2次幂的位置。

①.判断键值对数组table[i]是否为空或为null,否则执行resize()进行扩容;

②.根据键值key计算hash值得到插入的数组索引i,如果table[i]==null,直接新建节点添加,转向⑥,如果table[i]不为空,转向③;

③.判断table[i]的首个元素是否和key一样,如果相同直接覆盖value,否则转向④,这里的相同指的是hashCode以及equals;

④.判断table[i] 是否为treeNode,即table[i] 是否是红黑树,如果是红黑树,则直接在树中插入键值对,否则转向⑤;

⑤.遍历table[i],判断链表长度是否大于8,大于8的话把链表转换为红黑树,在红黑树中执行插入操作,否则进行链表的插入操作;遍历过程中若发现key已经存在直接覆盖value即可;

⑥.插入成功后,判断实际存在的键值对数量size是否超多了最大容量threshold,如果超过,进行扩容

4. 线程池有哪几种,具体说说new***dTheadPool

5. 线程池参数的作用?新增任务线程池是怎么增加线程的?线程池handler的处理?

6. Dubbo的原理,zk是怎么使用的?

7. SynchronizedvoliateThreadLocalreentrantlock 简单介绍。Synchronizedlock比较。

最常见的ThreadLocal使用场景为 用来解决数据库连接、Session管理等。

8. Synchronizedreentrantlock原理。

每个对象有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权,过程如下:

1、如果monitor的进入数为0,则该线程进入monitor,然后将进入数设置为1   ,该线程即为monitor的所有者。

2、如果线程已经占有该monitor,只是重新进入,则进入monitor的进入数加1

3.如果其他线程已经占用了monitor,则该线程进入阻塞状态,直到monitor的进入数为0,再重新尝试获取monitor的所有权。

执行monitorexit的线程必须是objectref所对应的monitor的所有者。

指令执行时,monitor的进入数减1,如果减1后进入数为0,那线程退出monitor,不再是这个monitor的所有者。其他被这个monitor阻塞的线程可以尝试去获取这个 monitor 的所有权。

通过这两段描述,我们应该能很清楚的看出Synchronized的实现原理,Synchronized的语义底层是通过一个monitor的对象来完成,其实wait/notify等方法也依赖于monitor对象,这就是为什么只有在同步的块或者方法中才能调用wait/notify等方法,否则会抛出java.lang.IllegalMonitorStateException的异常的原因。

ReentrantLock是基于AQS实现的;AQS的基础又是CAS;由于AQS是基于FIFO队列的实现,因此必然存在一个个节点,Node就是一个节点。

9. 自旋锁,轻量级锁,重量级锁。

轻量级锁(Lightweight Locking)本意是为了减少多线程进入互斥的几率,并不是要替代互斥。它利用了CPU原语Compare-And-Swap(CAS,汇编指令CMPXCHG),尝试在进入互斥前,进行补救。

线程被阻塞后便进入内核(Linux)调度状态,这个会导致系统在用户态与内核态之间来回切换,严重影响锁的性能。
自旋锁:在一个线程获取锁的时候,先进行自旋,尝试。
偏向锁->轻量级锁->重量级锁

10. 公平锁和非公平锁。Synchronized是什么锁?

11. 项目中结算中心怎么保证幂整性?

12. 怎么查看java线程的运行情况。

13. Redis集群的作用?添加一个节点会有什么步骤?一致hash算法介绍,虚拟节点知不知道?

Redis集群是分布式数据库方案;集群通过分片来共享数据,并提供复制和故障转移。一个集群包含多个节点,集群的整个数据库被分成16384个槽(slot),数据库中的每个键都属于这16384个槽的其中一个,每个节点都可以处理0个或者最多16384个槽。 Redis集群的重新分片操作可以将任意数量已经指派给某个节点的槽改为指派给另外一个节点,并且相关槽所属的键值对也会从源节点移动到目标节点。

Redis集群的重新分片操作可以将任意数量已经指派给某个节点的槽改为指派给另外一个节点,并且相关槽所属的键值对也会从源节点移动到目标节点。

集群中的每个节点都会定期地向集群中的其他节点发送PING命令,以此来检查对方是否在线,如果接收ping消息的节点没有在规定的时间内,向发送ping消息的节点返回pong消息,那么将认为没有返回消息的节点标记为疑似下线。 如果半数以上处理槽的节点都将某节点x报告为疑似下线,那么这个主节点x将被标记为已下线。

1.复制下线主节点的所有从节点将会有一个从节点被选中。

2.被选中的从节点会执行slaveof on one,成为新的主节点。

3.新的主节点会撤销所有对已下线主节点的槽指派,并将这些槽指派给自己。

4.新的主节点向集群广播一条pong消息,这条pong消息可以让集群中的其他节点立即致电这个节点已经由从节点变为主节点了。

5.新的主节点开始接收和自己负责处理的槽有关的命令请求,故障转移完成。

集群中的节点通过发送和接受消息进行通信,节点的消息包括meet,ping,pong,publish,fail五种。

cluster meet <ip> <port>

首先连接节点:

$redis -cli -c -p 127.0.0.1:7000

127.0.0.1:7000>cluster Nodes  //查看节点连接情况

127.0.0.1:7000>cluster meet 127.0.0.1:7001  //连接新的节点


一致性hash:

使用场景:防止增加和删除服务器,普通的hash算法导致服务器内容失效。

Hash算法的核心:单调性和平衡性。

一致性hash,将数据和服务器hash,顺时针将数据放入服务器中,新增服务器只需要将该服务器逆时针的数据保存到新的服务器;如果删除服务器只需要将该服务逆时针的数据放于顺时针的服务器上。保证单调性。

平衡性:一般是每个服务器上数据大致相同,如果服务器较少或生成服务器的虚拟节点(实际节点在hash算法中的复制品),保证每个服务器上数据基本一致。

14. 消息队列使用的是什么?原理是什么?

15. Springiocbean的加载过程?aop原理?动态***有几种,区别是什么?举了一个列子问可不可以动态***?

16. 看什么书?数据库语句分析?

17. restful讲解?怎么表示url?postput区别?

· GET /tickets # 获取ticket列表

· GET /tickets/12 # 查看某个具体的ticket

· POST /tickets # 新建一个ticket

· PUT /tickets/12 # 更新ticket 12.

· DELETE /tickets/12 #删除ticekt 12

Put具有幂等性。

18. Hession序列化,java序列化,其中序列化的uuid有什么用?

Java序列化:会把要序列化的对象类的元数据和业务数据全部序列化为字节流,而且是把整个继承关系上的东西全部序列化了。它序列化出来的字节流是对那个对象结构到内容的完全描述,包含所有的信息,因此效率较低而且字节流比较大。但是由于确实是序列化了所有内容,所以可以说什么都可以传输,因此也更可用和可靠。

它的实现机制是着重于数据,附带简单的类型信息的方法。就像Integer a = 1hessian会序列化成I 1这样的流,I表示int or Integer1就是数据内容。而对于复杂对象,通过Java的反射机制,hessian把对象所有的属性当成一个Map来序列化,包含了基本的类型描述和数据内容。而在序列化过程中,如果一个对象之前出现过,hessian会直接插入一个R index这样的块来表示一个引用位置,从而省去再次序列化和反序列化的时间。

序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。主要作用是:验证版本一致性。

今日头条1/2

1.hashMap原理?插入过程?

2.redis的数据结构?

3.怎么实现LRU结构?

4.单例模式(手写)

5.内存泄漏原因?

6.数据库索引?优化和缺点?

7.数据库是怎么实现隔离级别的?

1.Read uncommitted 读未提交数据:能解决第一类丢失更新的问题,但不能解决脏读的问题

实现原理是,读数据时候不加锁,写数据时候加行级别的共享锁,提交时释放锁。行级别的共享锁,不会对读产生影响,但是可以防止两个同时的写操作。

2.Read committed 读提交数据:能解决脏读的问题,但是不能解决不可重复读的问题:

实现原理是,事务读取数据(读到数据的时候)加行级共享锁,读完释放;事务写数据时候(写操作发生的瞬间)加行级独占锁,事务结束释放。由于事务写操作加上独占锁,因此事务写操作时,读操作也不能进行,因此,不能读到事务的未提交数据,避免了脏读的问题。但是由于,读操作的锁加在读上面,而不是加在事务之上,所以,在同一事务的两次读操作之间可以插入其他事务的写操作,所以可能发生不可重复读的问题。

3.Repeated Read 可重复读:顾名思义,可以解决不可重复读的问题,但是不能解决虚读问题:

实现原理,和读提交数据不同的是,事务读取数据在读操作开始的瞬间就加上行级共享锁,而且在事务结束的时候才释放。分析方法和读提交数据类似,本处不再赘述。但是,由于加锁只是加在行上,所以,仍然可能发生虚读的问题。

4. Serializable 串行化:可以解决以上所有的并发问题:

实现原理是,在读操作时,加表级共享锁,事务结束时释放;写操作时候,加表级独占锁,事务结束时释放。

8.聚集索引和非聚簇索的区别?

9.项目中用户权限控制?

1.redis的复制?

Slaveof

2.redis提供分布式服务的方案?服务端,客户端各是怎实现的(搞不明白)

3. synchronizedlock的区别?原理?介绍一下乐观锁和悲观锁?乐观锁在项目中怎么使用的?

4.hashMapcurrentHashMap的区别?CSA

5.内存泄漏?怎么查询(脑袋一热说没遇见过)?栈溢出原因?怎么解决堆溢出?

6.服务上线后要关注服务器的什么指标?

cpu,内存占用量,磁盘I/O

6.介绍一下jvm内存模型?怎么设置EdenSurvivor 的比例?新生代转换成老年代的时间?CMS垃圾回收机制?G1垃圾回收机制?CMSG1的区别?G1原理?

7.voilate简单介绍下?禁止指令重排序怎么实现?happens-before(表示没听过)

8.arp协议详细介绍下?

9.数组中找出所有重复的数字?空间复杂度为0(1),时间复杂度最下?(求答案)

10.树交换左右字数?

11.一个二维数组只含有0,1;1围成的矩阵中所有0的数字转换成1

12.树桩存水问题?例如一维数组412313可以存储水量为512341不能存水,313存水2

13怎么设计阻塞队列?

360  1/2

1.hashMap ,hashtablecurrentHashMap的却别?

2.线程和进程的区别?

3.线程间怎么通信?

线程间通信和同步的方式主要有同步,while轮询,wait\notify,pipedInputStream

通信机制主要有:管道、有名管道、消息队列、信号量、共享空间、信号、套接字(socket)。

4.单例模式双重检验模式?

5.简单工厂模式?

6.https协议工作在哪几层?

应用层,传输层

7.数据库存储引擎?INooDb的好处?页锁和行锁?数据库的事物。

Mylsam的锁类型:

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。

行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般

表锁:表共享锁;表独占锁。

InnDb的行锁模式及加锁方法:

共享锁:

排他锁:

InnoDB的间隙锁:当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制不是所谓的间隙锁(Next-Key锁)

InnoDb行锁时通过索引上的索引来实现的,只有通过索引条件检索数据,InnoDB才会使用行级锁,否则使用表锁。

什么时候使用表锁:1.事物需要更新大部分数据或全部数据,表又表较大。2.事物涉及多个表,比较复杂,很可能引起死锁。

8.redis的存储结构?怎么修改map值?string怎么加1?设置过期时间?

9.策略模式?责任链模式?

10.http协议怎么传输json?

11.快排?插入排序?401状态码?restful的传播方法?http有哪些请求?

getheaddeletepostoptionsput

12. 数据库的触发器?存储过程?

滴滴 1/2/3/4/hr

1. 计算机的冯洛伊曼结构图?

输入设备,运算器,存储器,控制器,输出设备

2. 计算机网络3次握手4次挥手?

3. 高速缓冲***的作用?

***是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多, 接近于CPU的速度。缓和***处理器和主存储器之间速度不匹配的矛盾。

4. 进程和线程的区别?

5. 进程的独立地址空间存储的什么?

进程地址空间由进程可寻址的虚拟内存组成,而且更为重要的特点是内核允许进程使用这种虚拟内存中的地址。内核除了管理本身的内存外,还必须管理用户空间中进程的内存

6. cpu调度算法?

1.先来先服务;2.最短作业优先;3.优先权调度;4.轮转发调度;5.高响应比算法(等待时间+服务时间/服务时间)

8. 计算机网络拥塞控制?拥塞阻塞会导致什么情况?

网络阻塞是指当某一通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象。严重时甚至会导致网络通信业务陷入停顿,即出现所谓的死锁现象。

9. 慢开始门限ssthresh状态变量是怎么设置的?

10  tcp/ip 五层协议?Arp攻击?

11. 聚簇索引和非聚簇索引?主键和唯一键的区别?

12  B树和b+树的区别?

13 文件传输在什么情况下耗费性能?怎么观察?

14  redishash值怎么删除?redis的有序集合是什么结构?画出跳表结构,时间复杂度?

15  50亿的url中的中找出相同的。50亿url中只有一个相同,怎么找?bitmap

16 数据的优化?为什么不建议使用in?in 会使索引失效吗?

17 怎么设计一个高性能的系统,可以支持高并发大访问量?

18 当一个接口访问后返回数据的效率变低了怎么查询问题?

18 数据库的日订单超过了千万?怎么设计数据库?一致性hash算法的原理?

19 java锁机制?synchronizede的原理,为什么要用minitor?

20 乐观锁机制?数据库的表锁,行锁区别?

21 数据库的存储引擎?InnoDB的好处?

22  hashTablehashmap?你学到了什么,不要求讲细节?

23 插入排序?

24 有序的k个数组,数组长度为n,整个排序的结果。

25. 有序的数组,写一个random随机数,输出不同的值?

26. 智力题 两根不规则的香,燃完要1小时,计算出15分钟的时间。

27. 智力题 一个人上山要一天,下山要一天。在山上有没有相遇点。

28 智力题 10枚硬币找出其中不同的一个,有天平。

29. 智力题 4个人夜晚过独木桥,每个人的速度不同,以最慢的为准,每次只能走2个人,求过桥的最短时间。

美图 1/2

1.dubbox的原理?

2.dubb0x的通信机制?

3. dubbox的虚拟化有哪几种?

4. 介绍一下rpc协议?

5. NIO?在什么情况使用NIO,什么情况使用BIO?

6. 怎么保证集群系统的高可用?

7. java的内存机制?垃圾收集算法?为什么要分年轻代和老年代?

8. restful风格是什么?

9. redis的集群是怎么实现的?

10. 数据的聚餐索引和非聚簇索引?在什么情况下使用?

11 数据库的优化方法?

12 消息队列怎么保证消息的一致性?

13 介绍项目?

14 项目中的遇见的问题?

15 项目中用到什么数据结构?说下跳表?

16 为什么要用redis而不是其它的缓存?redis里面的数据结构?


全部评论
这或许就是大佬吧!还自称渣硕,过分了啊老哥!
1 回复 分享
发布于 2017-09-28 15:51
腾讯校招开始了,有兴趣的发邮件到975981595@qq.com。我帮你们内推。
点赞 回复 分享
发布于 2018-08-05 20:54
干货啊,老铁,就是太多了,看得眼花
点赞 回复 分享
发布于 2017-09-28 15:54
已收藏,回去慢慢看。打那么多字,老铁辛苦了哈
点赞 回复 分享
发布于 2017-09-28 16:00
我就是反面例子,春招四个,秋招0个,血泪告诉基础很重要
点赞 回复 分享
发布于 2017-09-28 16:15
恭喜老铁!
点赞 回复 分享
发布于 2017-09-28 16:15
膜拜
点赞 回复 分享
发布于 2017-09-28 16:17
实习是实习,秋招是秋招吧。春招找不到工作就失业了
点赞 回复 分享
发布于 2017-09-28 16:32
好用心的帖子 码
点赞 回复 分享
发布于 2017-09-28 16:46
厉害了~~ 手动点赞!
点赞 回复 分享
发布于 2017-09-28 16:54
这或许就是大佬吧!
点赞 回复 分享
发布于 2017-09-28 16:58
学长能留个扣扣请教下嘛?
点赞 回复 分享
发布于 2017-09-28 17:13
感觉我们不是一个学校的。。。向大佬低头。
点赞 回复 分享
发布于 2017-09-28 17:38
好牛逼啊
点赞 回复 分享
发布于 2017-09-28 17:41
活捉一只大佬
点赞 回复 分享
发布于 2017-09-28 18:40
广联达已经发放offer了?我为毛我还在等消息,我是北京的
点赞 回复 分享
发布于 2017-09-28 19:28
给大佬暖贴
点赞 回复 分享
发布于 2017-09-28 20:15
膜大佬
点赞 回复 分享
发布于 2017-09-28 20:54
问下百度外卖和顺丰科技是怎么投的。顺丰是现场宣讲还是提前批? 另外。斗鱼进去做什么岗位,我被分到平台研发部说将来他们要转golang。。。。 腾讯和网易游戏的java去做什么
点赞 回复 分享
发布于 2017-09-29 13:29
这才是大佬~~~~
点赞 回复 分享
发布于 2017-09-29 13:31

相关推荐

点赞 评论 收藏
分享
67 692 评论
分享
牛客网
牛客企业服务