精华内容
下载资源
问答
  • java项目经验包装简历指南
  • 需要这份文档的朋友可以帮忙点个赞,点击下方神秘超链接,就可以免费获取到了,还有小编准备的一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》 资料领取链接:Java进阶学习路线图...

    1.为什么要使用分布式锁

    使用分布式锁的目的,无外乎就是保证同一时间只有一个客户端可以对共享资源进行操作。

    1.1举一个很长的例子

    系统 A 是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单。由于系统有一定的并发,所以会预先将商品的库存保存在 Redis 中,用户下单的时候会更新 Redis 的库存。此时系统架构如下:

    但是这样一来会产生一个问题:假如某个时刻,Redis 里面的某个商品库存为 1。

    此时两个请求同时到来,其中一个请求执行到上图的第 3 步,更新数据库的库存为 0,但是第 4 步还没有执行。

    而另外一个请求执行到了第 2 步,发现库存还是 1,就继续执行第 3 步。这样的结果,是导致卖出了 2 个商品,然而其实库存只有 1 个。

    很明显不对啊!这就是典型的库存超卖问题。此时,我们很容易想到解决方案:用锁把 2、3、4 步锁住,让他们执行完之后,另一个线程才能进来执行第 2 步。

    按照上面的图,在执行第 2 步时,使用 Java 提供的 Synchronized 或者 ReentrantLock 来锁住,然后在第 4 步执行完之后才释放锁。

    这样一来,2、3、4 这 3 个步骤就被“锁”住了,多个线程之间只能串行化执行

    当整个系统的并发飙升,一台机器扛不住了。现在要增加一台机器,如下图:

    增加机器之后,系统变成上图所示,假设此时两个用户的请求同时到来,但是落在了不同的机器上,那么这两个请求是可以同时执行了,还是会出现库存超卖的问题。

    因为上图中的两个 A 系统,运行在两个不同的 JVM 里面,他们加的锁只对属于自己 JVM 里面的线程有效,对于其他 JVM 的线程是无效的。

    因此,这里的问题是:Java 提供的原生锁机制在多机部署场景下失效了,这是因为两台机器加的锁不是同一个锁(两个锁在不同的 JVM 里面)。

    那么,我们只要保证两台机器加的锁是同一个锁,问题不就解决了吗?此时,就该分布式锁隆重登场了。

    分布式锁的思路是:在整个系统提供一个全局、唯一的获取锁的“东西”,然后每个系统在需要加锁时,都去问这个“东西”拿到一把锁,这样不同的系统拿到的就可以认为是同一把锁。

    至于这个“东西”,可以是 Redis、Zookeeper,也可以是数据库。此时的架构如图:

    通过上面的分析,我们知道了库存超卖场景在分布式部署系统的情况下使用 Java 原生的锁机制无法保证线程安全,所以我们需要用到分布式锁的方案。

    2.高效的分布式锁

    在设计分布式锁的时候,应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁,以下几点是必须要考虑的:

    (1) 互斥

    在分布式高并发的条件下,最需要保证在同一时刻只能有一个线程获得锁,这是最基本的一点。

    (2) 防止死锁

    在分布式高并发的条件下,比如有个线程获得锁的同时,还没有来得及去释放锁,就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁,造成死锁。所以分布式非常有必要设置锁的有效时间,确保系统出现故障后,在一定时间内能够主动去释放锁,避免造成死锁的情况。

    (3) 性能

    对于访问量大的共享资源,需要考虑减少锁等待的时间,避免导致大量线程阻塞。

    所以在锁的设计时,需要考虑两点。

    1、 锁的颗粒度要尽量小。比如你要通过锁来减库存,那这个锁的名称你可以设置成是商品的ID,而不是任取名称。这样这个锁只对当前商品有效,锁的颗粒度小。

    2、 锁的范围尽量要小。比如只要锁2行代码就可以解决问题的,那就不要去锁10行代码了。

    (4) 重入

    我们知道ReentrantLock是可重入锁,那它的特点就是:同一个线程可以重复拿到同一个资源的锁。重入锁非常有利于资源的高效利用。关于这点之后会做演示。

    3.基于Redis实现分布式锁

    3.1 使用Redis命令实现分布式锁

    3.1.1加锁

    加锁实际上就是在redis中,给Key键设置一个值,为避免死锁,并给定一个过期时间。

    使用的命令**:SET lock_key random_value NX PX 5000**

    值得注意的是:

    random_value 是客户端生成的唯一的字符串。

    NX 代表只在键不存在时,才对键进行设置操作。

    PX 5000 设置键的过期时间为5000毫秒。

    也可以使用另外一条命令:SETNX key value

    只不过过期时间无法设置。

    这样,如果上面的命令执行成功,则证明客户端获取到了锁。

    3.1.2解锁

    解锁的过程就是将Key键删除,但要保证安全性,举个例子:客户端1的请求不能将客户端2的锁给删除掉。

    释放锁涉及到两条指令,这两条指令不是原子性的,需要用到redis的lua脚本支持特性,redis执行lua脚本是原子性的。脚本如下:

    if redis.call('get',KEYS[1]) == ARGV[1] then 
      return redis.call('del',KEYS[1]) 
    else
      return 0 
    end
    
    

    这种方式比较简单,但是也有一个最重要的问题:锁不具有可重入性

    3.2使用Redisson实现分布式锁

    3.2.1Redisson介绍

    Redisson是架设在Redis基础上的一个Java驻内存数据网格(In-Memory Data Grid)。充分的利用了Redis键值数据库提供的一系列优势,基于Java实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。

    3.2.2Redisson简单使用

    Config config = new Config(); 
    config.useClusterServers() 
    .addNodeAddress("redis://192.168.31.101:7001") 
    .addNodeAddress("redis://192.168.31.101:7002") 
    .addNodeAddress("redis://192.168.31.101:7003") 
    .addNodeAddress("redis://192.168.31.102:7001") 
    .addNodeAddress("redis://192.168.31.102:7002") 
    .addNodeAddress("redis://192.168.31.102:7003"); 
    
    RedissonClient redisson = Redisson.create(config); 
    
    RLock lock = redisson.getLock("anyLock"); 
    
    lock.lock(); 
    
    lock.unlock(); 
    

    只需要通过它的 API 中的 Lock 和 Unlock 即可完成分布式锁,而且考虑了很多细节:

    l Redisson 所有指令都通过 Lua 脚本执行,Redis 支持 Lua 脚本原子性执行

    l Redisson 设置一个 Key 的默认过期时间为 30s,但是如果获取锁之后,会有一个WatchDog每隔10s将key的超时时间设置为30s。

    另外,Redisson 还提供了对 Redlock 算法的支持,它的用法也很简单:

    RedissonClient redisson = Redisson.create(config); 
    RLock lock1 = redisson.getFairLock("lock1"); 
    RLock lock2 = redisson.getFairLock("lock2"); 
    RLock lock3 = redisson.getFairLock("lock3"); 
    RedissonRedLock multiLock = new RedissonRedLock(lock1, lock2, lock3); 
    multiLock.lock(); 
    
    multiLock.unlock(); 
    
    

    3.2.3Redisson原理分析

    (1) 加锁机制

    线程去获取锁,获取成功: 执行lua脚本,保存数据到redis数据库。

    线程去获取锁,获取失败: 一直通过while循环尝试获取锁,获取成功后,执行lua脚本,保存数据到redis数据库。

    (2) WatchDog自动延期机制

    在一个分布式环境下,假如一个线程获得锁后,突然服务器宕机了,那么这个时候在一定时间后这个锁会自动释放,也可以设置锁的有效时间(不设置默认30秒),这样的目的主要是防止死锁的发生。但是在实际情况中会有一种情况,业务处理的时间可能会大于锁过期的时间,这样就可能**导致解锁和加锁不是同一个线程。**所以WatchDog作用就是Redisson实例关闭前,不断延长锁的有效期。

    如果程序调用加锁方法显式地给了有效期,是不会开启后台线程(也就是watch dog)进行延期的,如果没有给有效期或者给的是-1,redisson会默认设置30s有效期并且会开启后台线程(watch dog)进行延期

    多久进行一次延期:(默认有效期/3),默认有效期可以设置修改的,即默认情况下每隔10s设置有效期为30s

    (3) 可重入加锁机制

    Redisson可以实现可重入加锁机制的原因:

    l Redis存储锁的数据类型是Hash类型

    l Hash数据类型的key值包含了当前线程的信息

    下面是redis存储的数据

    这里表面数据类型是Hash类型,Hash类型相当于我们java的 <key,<key1,value>> 类型,这里key是指 ‘redisson’

    它的有效期还有9秒,我们再来看里们的key1值为078e44a3-5f95-4e24-b6aa-80684655a15a:45它的组成是:

    guid + 当前线程的ID。后面的value是就和可重入加锁有关。value代表同一客户端调用lock方法的次数,即可重入计数统计。

    举图说明

    上面这图的意思就是可重入锁的机制,它最大的优点就是相同线程不需要在等待锁,而是可以直接进行相应操作。

    3.2.4 获取锁的流程

    其中的指定字段也就是hash结构中的field值(构成是uuid+线程id),即判断锁是否是当前线程

    3.2.5 加锁的流程

    3.2.6 释放锁的流程

    4. 使用Redis做分布式锁的缺点

    Redis有三种部署方式

    l 单机模式

    l Master-Slave+Sentienl选举模式

    l Redis Cluster模式

    如果采用单机部署模式,会存在单点问题,只要 Redis 故障了。加锁就不行了

    采用 Master-Slave 模式,加锁的时候只对一个节点加锁,即便通过 Sentinel 做了高可用,但是如果 Master 节点故障了,发生主从切换,此时就会有可能出现锁丢失的问题。

    基于以上的考虑,Redis 的作者也考虑到这个问题,他提出了一个 RedLock 的算法。

    这个算法的意思大概是这样的:假设 Redis 的部署模式是 Redis Cluster,总共有 5 个 Master 节点。

    通过以下步骤获取一把锁:

    • 获取当前时间戳,单位是毫秒。
    • 轮流尝试在每个 Master 节点上创建锁,过期时间设置较短,一般就几十毫秒。
    • 尝试在大多数节点上建立一个锁,比如 5 个节点就要求是 3 个节点(n / 2 +1)。
    • 客户端计算建立好锁的时间,如果建立锁的时间小于超时时间,就算建立成功了。
    • 要是锁建立失败了,那么就依次删除这个锁。
    • 只要别人建立了一把分布式锁,你就得不断轮询去尝试获取锁。

    但是这样的这种算法,可能会出现节点崩溃重启,多个客户端持有锁等其他问题,无法保证加锁的过程一定正确。例如:

    假设一共有5个Redis节点:A, B, C, D, E。设想发生了如下的事件序列:

    (1)客户端1成功锁住了A, B, C,获取锁成功(但D和E没有锁住)。

    (2)节点C崩溃重启了,但客户端1在C上加的锁没有持久化下来,丢失了。

    (3)节点C重启后,客户端2锁住了C, D, E,获取锁成功。

    这样,客户端1和客户端2同时获得了锁(针对同一资源)。

    最后

    由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

    需要这份文档的朋友可以帮忙点个赞,点击下方神秘超链接,就可以免费获取到了,还有小编准备的一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

    资料领取链接:Java进阶学习路线图(Xmind)+《Java面试必备指南》

    了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

    [外链图片转存中…(img-RvSGKBYn-1627019170405)]

    需要这份文档的朋友可以帮忙点个赞,点击下方神秘超链接,就可以免费获取到了,还有小编准备的一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

    资料领取链接:Java进阶学习路线图(Xmind)+《Java面试必备指南》

    展开全文
  • Spring IOC 原理: 概念: Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供 ...

    我整理的spring学习笔记:

    像spring这种知识点我们不能盲目的学习,首先我们得有一套学习路线,我总结了一套spring的学习思维导图,今天通过我整理的Spring学习路线.xmind给大家分析spring需要掌握的一些核心知识点。

    京东java二面:spring相关问题被虐哭了,直到看到了这些知识点

    spring的特点:

    • 轻量级
    • 控制反转
    • 面向切面
    • 容器
    • 框架集合

    京东java二面:spring相关问题被虐哭了,直到看到了这些知识点

    Spring 的核心组件,常用模块,主要包和spring的常用注解:

    常用模块:

    • 核心容器
    • spring上下文
    • springAOP
    • springDAO
    • springORM
    • spring web 模块
    • spring mvc 框架

    京东java二面:spring相关问题被虐哭了,直到看到了这些知识点

    Spring IOC 原理:

    • 概念:

    Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化

    Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供

    了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。

    • Spring 容器高层视图
    • OC 容器实现

    京东java二面:spring相关问题被虐哭了,直到看到了这些知识点

    Spring Bean 作用域:

    • singleton:单例模式(多线程下不安全)
    • prototype:原型模式每次使用时创建
    • Request:一次 request一个实例
    • session
    • global Session

    Spring APO 原理

    京东java二面:spring相关问题被虐哭了,直到看到了这些知识点

    Spring MVC 原理

    京东java二面:spring相关问题被虐哭了,直到看到了这些知识点

    Spring Boot 原理

    image.png

    • JPA 原理
    • Mybatis 缓存
    • Tomcat 架构

    最后

    在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例
    感兴趣的朋友可以点击Java学习免费获取。

    MyBatis答案解析
    由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

    大家看完有什么不懂的可以在下方留言讨论也可以关注。

    觉得文章对你有帮助的话记得关注我点个赞支持一下!

    点截图出来粗略的介绍,每个小节点里面都有更细化的内容!**

    大家看完有什么不懂的可以在下方留言讨论也可以关注。

    觉得文章对你有帮助的话记得关注我点个赞支持一下!

    展开全文
  • ** Java核心知识整理 [外链图片转存中…(img-6jXOYaBh-1626935080457)] Java核心知识 Spring全家桶(实战系列) [外链图片转存中…(img-3clGPec4-1626935080458)] 其他电子书资料 [外链图片转存中…(img-7oZ8HdtT-...

    01 分布式限流:Nginx+ZooKeeper

    1.1 分布式限流之Nginx

    • 请解释一下什么是 Nginx?

    • 请列举 x Nginx 的一些特性。

    • 请列举 x Nginx 和 和 Apache 之间的不同点

    • 请解释 x Nginx 如何处理 P HTTP 请求。

    • 在 x Nginx 中,如何使用未定义的服务器名称来阻止处理请求?

    • 使用 “ 反向代理服务器 ”

    • 请列举 x Nginx 服务器的最佳用途。

    • 请解释 x Nginx 服务器上的 r Master 和 和 r Worker 进程分别是什么?

    • 请解释你如何通过不同于 0 80 的端口开启 Nginx?

    • 请解释是否有可能将 x Nginx 的错误替换为 2 502 错误?

    • 在 x Nginx 中,解释如何在 L URL 中保留双斜线? ?

    • 请解释 e ngx_http_upstream_module 的作用是什么?

    • 请解释什么是 K C10K 问题?

    • 请陈述 s stub_status 和 和 r sub_filter 指令的作用是什么?

    • 解释 x Nginx 是否支持将请求压缩到上游?

    • 解释如何在 x Nginx 中获得当前的时间?

    • 用 x Nginx 服务器解释s -s 的目的是什么?

    • 解释如何在 x Nginx 服务器上添加模块?

    分布式限流之Nginx的答案解析如下:

    分布式限流之Nginx的答案解析

    for:Nginx+常见应用技术指南[Nginx++Tips]+第二版

    Nginx+常见应用技术指南[Nginx++Tips]+第二版

    1.2 分布式限流之ZooKeeper

    • ZooKeeper 是什么?

    • ZooKeeper 提供了什么?

    • Zookeeper 文件系统

    • 四种类型的 znode

    • Zookeeper 通知机制

    • Zookeeper 做了什么?

    • zk 的命名服务(文件系统)

    • zk 的配置管理(文件系统、通知机制)

    • Zookeeper 集群管理(文件系统、通知机制)

    • Zookeeper 分布式锁(文件系统、通知机制)

    • 获取分布式锁的流程

    • Zookeeper 队列管理(文件系统、通知机制)

    • Zookeeper 数据复制

    • Zookeeper 工作原理

    • zookeeper 是如何保证事务的顺序一致性的?

    • Zookeeper 下 Server 工作状态

    • zookeeper 是如何选取主 leader 的?

    • 分布式通知和协调

    • 机器中为什么会有 leader?

    • zk 节点宕机如何处理?

    • Zookeeper 同步流程

    • zookeeper 负载均衡和 nginx 负载均衡区别

    • zookeeper watch 机制

    分布式限流之ZooKeeper的答案解析如下

    分布式限流之ZooKeeper的答案解析

    for:ZK开发手册

    ZK开发手册

    02 分布式通讯:ActiveMQ+Kafka+RabbitMQ

    2.1 分布式通讯之ActiveMQ

    • 什么是 ActiveMQ?

    • ActiveMQ 服务器宕机怎么办?

    • 丢消息怎么办?

    • 持久化消息非常慢

    • 消息的不均匀消费。

    • 死信队列。

    • ActiveMQ 中的消息重发时间间隔和重发次数吗?

    分布式通讯之ActiveMQ的答案解析如下:

    分布式通讯之ActiveMQ的答案解析

    for:手写RocketMQ笔记

    手写RocketMQ笔记

    2.2 分布式通讯之kafka

    • Kafka 的设计时什么样的呢?

    • 数据传输的事物定义有哪三种?

    • Kafka 判断一个节点是否还活着有那两个条件?

    • producer 是否直接将数据发送到 broker 的 leader(主节点)?

    • Kafa consumer 是否可以消费指定分区消息?

    • Kafka 消息是采用 Pull 模式,还是 Push 模式?

    • Kafka 存储在硬盘上的消息格式是什么?

    • Kafka 高效文件存储设计特点:

    • Kafka 与传统消息系统之间有三个关键区别

    • Kafka 创建 Topic 时如何将分区放置到不同的 Broker 中

    • Kafka 新建的分区会在哪个目录下创建

    • partition 的数据如何保存到硬盘

    • kafka 的 ack 机制

    • Kafka 的消费者如何消费数据

    • 消费者负载均衡策略

    • 数据有序

    • kafaka 生产数据时数据的分组策略

    分布式通讯之kafka的答案解析如下:

    kafka面试问题答案解析

    for:Kafka源码解析与实战

    Kafka源码解析与实战

    2.3 分布式通讯之RabbitMQ

    • RabbitMQ 中的 broker 是指什么?cluster 又是指什么?

    • 什么是元数据?元数据分为哪些类型?包括哪些内容?与 cluster 相关的元数据有哪些?元数据是如何保存的?元数据在 cluster 中是如何分布的?

    • RAM node 和 disk node 的区别?

    • RabbitMQ 上的一个 queue 中存放的 message 是否有数量限制?

    • RabbitMQ 概念里的 channel、exchange 和 queue 这些东东是逻辑概念,还是对应着进程实体?这些东东分别起什么作用?

    • vhost 是什么?起什么作用?

    • 在单 node 系统和多 node 构成的 cluster 系统中声明 queue、exchange ,以及进行 binding 会有什么不同?

    • 客户端连接到 cluster 中的任意 node 上是否都能正常工作?

    • cluster 中 node 的失效会对 consumer 产生什么影响?若是在 cluster 中创建了mirrored queue ,这时 node 失效会对 consumer 产生什么影响?

    • 能够在地理上分开的不同数据中心使用 RabbitMQ cluster 么?

    • 为什么 heavy RPC 的使用场景下不建议采用 disk node ?

    • 向不存在的 exchange 发 publish 消息会发生什么?向不存在的 queue 执行consume 动作会发生什么?

    • routing_key 和 binding_key 的最大长度是多少?

    • RabbitMQ 允许发送的 message 最大可达多大?

    • 什么情况下 producer 不主动创建 queue 是安全的?

    • “dead letter”queue 的用途?

    • 为什么说保证 message 被可靠持久化的条件是 queue 和 exchange 具有durable 属性,同时 message 具有 persistent 属性才行?

    • 什么情况下会出现 blackholed 问题?

    • 如何防止出现 blackholed 问题?

    • Consumer Cancellation Notification 机制用于什么场景?

    • Basic.Reject 的用法是什么?

    • 为什么不应该对所有的 message 都使用持久化机制?

    • RabbitMQ 中的 cluster、mirrored queue,以及 warrens 机制分别用于解决什么问题?存在哪些问题?

    分布式通讯之RabbitMQ的答案解析如下:

    分布式通讯之RabbitMQ的答案解析

    for:RabbitMQ实战指南

    RabbitMQ实战指南

    03 分布式缓存:memcached+MongoDB+Redis

    3.1 分布式缓存之memcached

    • memcached 是怎么工作的?

    • memcached 最大的优势是什么?

    • memcached 和服务器的 local cache (比如 PHP 的 的 APC 、mmap 文件等)相比,有什么优缺点?

    • memcached 和 和 MySQL 的 的 query cache 相比,有什么优缺点?

    • memcached 的 的 cache 机制是怎样的?

    • memcached 如何实现冗余机制?

    • 我需要把 memcached 中的 item 批量导出导入,怎么办?

    • memcached 如何处理容错的?

    • 如何将 memcached 中 中 item 批量导入导出?

    • memcached 是如何做身份验证的?

    • memcached 的多线程是什么?如何使用它们?

    • memcached 能接受的 key 的最大长度是多少?

    • memcached 对 对 item 的过期时间有什么限制?

    • memcached 最大能存储多大的单个 item ?

    • 为什么单个 item 的大小被限制在 1M byte 之内?

    分布式缓存之memcached的答案解析如下:

    分布式缓存之memcached的答案解析

    3.2 分布式缓存之MongoDB

    • 你说的 NoSQL 数据库是什么意思?NoSQL 与 RDBMS 直接有什么区别?为什么要使用和不使用NoSQL 数据库?说一说 NoSQL 数据库的几个优点?

    • NoSQL 数据库有哪些类型?

    • MySQL 与 MongoDB 之间最基本的差别是什么?

    • 你怎么比较 MongoDB、CouchDB 及 CouchBase?

    • MongoDB 成为最好 NoSQL 数据库的原因是什么?

    • 32 位系统上有什么细微差别?

    • journal 回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?

    • 分析器在 MongoDB 中的作用是什么?

    • 名字空间(namespace)是什么?

    • 如果用户移除对象的属性,该属性是否从存储层中删除?

    • 能否使用日志特征进行安全备份?

    • 允许空值 null 吗?

    • 更新操作立刻 fsync 到磁盘?

    • 如何执行事务/加锁?

    • 为什么我的数据文件如此庞大?

    • 启用备份故障恢复需要多久?

    • 什么是 master 或 primary?

    • 什么是 secondary 或 slave?

    • 我必须调用 getLastError 来确保写操作生效了么?

    • 我应该启动一个集群分片(sharded)还是一个非集群分片的 MongoDB 环境?

    • 分片(sharding)和复制(replication)是怎样工作的?

    • 数据在什么时候才会扩展到多个分片(shard)里?

    • 当我试图更新一个正在被迁移的块(chunk)上的文档时会发生什么?

    • 如果在一个分片(shard)停止或者很慢的时候,我发起一个查询会怎样?

    • 我可以把 moveChunk 目录里的旧文件删除吗?

    • 我怎么查看 Mongo 正在使用的链接?

    • 如果块移动操作(moveChunk)失败了,我需要手动清除部分转移的文档吗?

    • 如果我在使用复制技术(replication),可以一部分使用日志(journaling)而其他部分则不使用吗?

    • 当更新一个正在被迁移的块(Chunk)上的文档时会发生什么?

    • MongoDB 在 A:{B,C}上建立索引,查询 A:{B,C}和 A:{C,B}都会使用索引吗?

    • 如果一个分片(Shard)停止或很慢的时候,发起一个查询会怎样?

    • MongoDB 支持存储过程吗?如果支持的话,怎么用?

    • 如何理解 MongoDB 中的 GridFS 机制,MongoDB 为何使用 GridFS 来存储文件?

    分布式缓存之MongoDB的答案解析如下:

    分布式缓存之MongoDB的答案解析

    for:MongoDB权威指南

    MongoDB权威指南

    3.3 分布式缓存之Redis

    • redis 简介

    • 为什么要用 redis /为什么要用缓存(高性能、高并发)

    • 为什么要用 redis 而不用 map/guava 做缓存?

    • redis 和 memcached 的区别

    • redis 常见数据结构以及使用场景分析(String、Hash、List、Set、Sorted Set)

    • redis 设置过期时间

    • redis 内存淘汰机制(MySQL里有2000w数据,Redis中只存20w的数据,如何保证Redis中的数据都是热点数据?)

    • redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)

    • redis 事务

    • Redis 常见异常及解决方案(缓存穿透、缓存雪崩、缓存预热、缓存降级)

    • 分布式环境下常见的应用场景(分布式锁、分布式自增 ID)

    • Redis 集群模式(主从模式、哨兵模式、Cluster 集群模式)

    • 如何解决 Redis 的并发竞争 Key 问题

    • 如何保证缓存与数据库双写时的数据一致性?

    分布式缓存之Redis的答案解析如下:

    分布式缓存之Redis的答案解析

    for:Redis设计与实现

    Redis设计与实现

    最后

    面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

    想获取个人高清面试题的可以戳这里免费领取及个人也准备了很多面试题含答案的资料供你刷!

    • Java核心知识整理

    2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

    Java核心知识

    • Spring全家桶(实战系列)

    2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

    • 其他电子书资料

    2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

    Step3:刷题

    既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

    以下是我私藏的面试题库:

    2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

    7)及个人也准备了很多面试题含答案的资料供你刷!**

    • Java核心知识整理

    [外链图片转存中…(img-6jXOYaBh-1626935080457)]

    Java核心知识

    • Spring全家桶(实战系列)

    [外链图片转存中…(img-3clGPec4-1626935080458)]

    • 其他电子书资料

    [外链图片转存中…(img-7oZ8HdtT-1626935080459)]

    Step3:刷题

    既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

    以下是我私藏的面试题库:

    [外链图片转存中…(img-yDOrpU6G-1626935080459)]

    展开全文
  • 1, 简历适度包装,不等同弄虚作假 2, 实事求是,才能让职场走得更顺 3, 诚信是用人的最基本底线。 对于java工程师的面试,绝大多数的公司不是去给你做两个题,考考你对于整个java系统知识的了解。即使有考题,有笔试...

    1, 简历适度包装,不等同弄虚作假

    2, 实事求是,才能让职场走得更顺

    3, 诚信是用人的最基本底线。

    对于java工程师的面试,绝大多数的公司不是去给你做两个题,考考你对于整个java系统知识的了解。即使有考题,有笔试,只不过是最低的一个门槛,而不是主要的考核方式。对方的技术人员,招聘方的技术人员一定会和面试者聊聊他过往做的项目经历。而你到底有没有料,一开口就知道

    别的地方不清楚,就深圳来说,2年经验,首先你就不要再说什么增删改查了,太丢份。java web开发,会用框架是最基础的,简历上写2年经验,面试没人会问你这框架怎么用,增删改查如何实现这样的,一般来说会从你做过的项目入手,层层深入和展开,如果你没做过项目或者答得磕磕绊绊,基本就被pass了。

    以下是面试时常问到的JAVA面试题,能让你对JAVA面试有基本的了解。根据我个人的经验,一个好的面试官在面试的时候是不会事先准备一列问题清单,一般来说都从关于JAVA最基本的概念开始,然后再根据你的回答继续深入讨论。

    java面试题:

    问题:关于JAVA 你知道什么?

    问题:JAVA编程语言支持什么平台?

    问题:请列举出JAVA至少5种特性。

    问题:为什么JAVA是结构中立的?

    问题:JAVA如何保证高效性?

    问题:为什么JAVA是动态的?

    问题:什么是JAVA虚拟机?它对JAVA的平台独立性有什么作用?

    问题:列举两个JAVA集成编译环境。

    问题:列举几个JAVA与C/C++不同的关键词。

    问题:什么是对象?

    问题:请给定义类。

    问题:一个类可以包含什么类型的变量?

    问题:什么是局域变量?

    问题:什么是实例变量?

    问题:什么是类变量?

    问题:什么是类的单例模式?

    问题:什么是构造函数?

    问题:列举为类创建对象的过程(三步)。

    问题:JAVA中字节数据类型的默认值是多少?

    问题:JAVA中float和double的默认值是多少?

    问题:byte类型在什么时候使用?

    问题:什么是静态变量?

    问题:什么是访问控制修饰符?

    问题:什么是受保护访问控制修饰符?

    问题:什么是同步修饰符?

    问题:在JAVA运算符优先级中,哪个运算符的优先级最高?

    问题:在switch语句中能使用的数据类型包括哪些?

    问题:parseInt()函数在什么时候使用到?

    问题:为什么说String类是不可变的?

    问题:为什么说StringBuffer类是可变的?

    问题:StringBuffer和StringBuilder类的区别在哪?

    问题:那个包使用正则表达式来实现模式匹配?

    问题:java.util.regex包括那些类?

    问题:什么是finalize()方法?

    问题:什么是Exception?

    问题:什么是受检查的异常?

    问题:什么是运行时间异常?

    问题:Exception类的两个子类是什么?

    问题:关键词throws在什么情况下使用?

    问题:关键词throw在什么时候使用?

    问题:finally关键词在异常处理中如何使用?

    问题:当自己创建异常类的时候应该注意什么?

    回答:当创建异常类时应该注意:

    问题:什么是继承?

    问题:关键词super什么时候使用?

    问题:什么是多态?

    问题:什么是抽象?

    问题:什么是抽象类?

    问题:抽象方法什么时候被使用?

    问题:什么是封装?

    问题:封装最主要的优点是什么?

    问题:什么是接口?

    问题:接口具有什么特性?

    问题:什么是包?

    问题:为什么要使用包?

    问题:什么是多线程编程?

    问题:创建线程的两种方式是什么?

    问题:什么是applet?

    问题:applet继承哪个类?

    问题:解释下JAVA的垃圾回收机制。

    问题:什么是不可变对象?

    如果对自己未来有想法,想提升自己,你现在在JAVA这条路上挣扎,也想在IT行业拿高薪,可以找我领取Java学习资料,还有Java的学习路线资料包括有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,[大家可以点此处链接获取]

    展开全文
  • java形象包装项目源码 伦布伦 ( Rembulan是Java语/印度尼西亚语的Moon 。) 关于 Rembulan 是 Java 虚拟机 (JVM) 的 Lua 5.3 实现,用纯 Java 编写,依赖最少。 Rembulan 项目的目标是开发一个正确、完整和可扩展的...
  • 1, 简历适度包装,不等同弄虚作假 2, 实事求是,才能让职场走得更顺 3, 诚信是用人的最基本底线。 对于java工程师的面试,绝大多数的公司不是去给你做两个题,考考你对于整个java系统知识的了解。即使有考题,有...
  • 最后 看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面 小编专门为你量身定制了一套 针对知识面不够,也莫慌!还有一整套的,可以瞬间查漏补缺 全都是一丢一丢的收集整理纯手打出来的——...
  • java简历包装项目经验,项目实战

    千次阅读 2021-07-21 19:45:31
    Java面试准备 准确的说这里又分为两部分: Java刷题 算法刷题 Java刷题:此份文档详细记录了千道面试题与详解; [外链图片转存中…(img-FuvMRmWT-1626867918262)] [外链图片转存中…(img-8w2YtQ94-1626867918263)] ...
  • 还有一整套的,可以瞬间查漏补缺 全都是一丢一丢的收集整理纯手打出来的——收整在***【我的学习笔记大全】***,有需要的朋友可以自取 更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、...
  • (网站架构及其演变过程+常见协议和标准+DNS的设置+Java中Socket的用法+HTTP协议+详解Servlet+Tomcat分析) 俯视 Spring MVC (SpringMVC 之初体验+创建SpringMVC之器+SpringMVC之用) Spring MVC 组件分析 ...
  • 为什么阿里巴巴的持久层抛弃hibernate,采用MyBatis框架? 原因大概有以下4点: 尤其是需要处理大量数据或者大并发情况的网站服务,这也阿里选择MyBatis的原因。 MyBatis整体架构 不多讲,先看目录图 ...
  • 前言 redis简单来说 就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以存写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。...1.Java
  • Java项目经验汇总(简历项目素材)
  • Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术 【附】架构书籍赠送 BAT面试的20道高频数据库问题解析 Java面试宝典 Netty实战 算法 BATJ面试要点及Java架构师进阶资料 。...
  • 对话 UP 心静思远-9527 没什么水平就不要出来卖 此人制作视频内容我在此不做过多评价,但...1、这是花了我很多天的心思,用心打造出来的Java简历分析模板,适合新手包装成有一点工作年限(1-2年),但又不会太老手...
  • 简历是吸引面试官的第一步,找工作就从包装简历开始
  • 技术牛,不如好的包装简历包装一直是技术人员的头疼问题,java标准简历模板素材五套,根据自身条件选用或整合,包你获得面试机会
  • 这是花了我很多天的心思,用心打造出来的Java简历分析模板,适合新手包装成有一点工作年限(1-2年),但又不会太老手的简历;让你的简历做得跟别人不一样; 免费了就会导致所有人突然把简历模板拿去用,导致市场上...
  • 如何包装简历上的项目?

    万次阅读 2019-04-24 15:11:37
    这篇文章我们来聊一聊,在系统设计和项目经验这两块,应该如何充分的准备,才能拿出有技术含量...几十个java、大数据项目 , 资料很全,你想找的几乎都有 推荐阅读 ☞面试字节跳动,我被怼了 ☞一切为了论文
  • 最近包装简历,写了2年工作经验,半个月面试了20家公司,甚至薪酬都降低到5K,都没有一家通过。 不知道什么原因,现在都想放弃了!求前辈指点,我该怎么办? 网友一: 很简单,因为你没学好! 不知道你自学时用的哪...
  • Java部分 10 2014.02 - 2015.07 “今日开讲”开放式授课云平台 10 2015.11 - 至今 ITOO分布式云平台 11 2013.07 - 2014.01 IGO网 11 2014.08 - 2015.03 华为大数据预警平台 12 2014.03 - 2014.08 南方电网...
  • java项目经验50套加优秀简历j+java最全面试题+java分布式学习资料+大数据学习资料+安卓学习资料欢迎下载参考,你一定用得上。
  • 这是我面试公司的用过的版本,写的不好,但是项目经验不少,你们可以改改,模板挺好,就是有些字面没大写,技术上面写的有一点问题,但可以用。
  • ClickHouse 是什么? ClickHouse:是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS) 我们首先理清一些基础概念 OLTP:是传统的关系型数据库,主要操作增删改查,强调事务一致性,比如银行系统、电商系统 ...
  • Java8编程实战

    万人学习 2016-12-31 18:03:03
    Java一直作为优秀的编程语言活跃于软件开发行业,掌握Java不仅是一件兴奋的事,更是一把可以帮助你轻松进入软件行业大门的一把金钥匙,本套课程将为读者讲解Java8的所有核心技术知识,一共240集的Java8开发课程,...
  • Java真实项目

    2014-03-28 16:26:16
    公示项目开发框架,主要技术:hibernate,spring,struts,shrio,tiles,cxf等
  • 开发者(KaiFaX)面向全栈工程师的开发者专注于前端、Java/Python/Go/PHP的技术社区作者 |Coody来源 |https://urlify.cn/v6zu6j在互联网...
  • 上周在南京找到了一个15k的java程序员工作,现在28岁,以前一直做的是金融,做证券金融如果没有特别好的经济头脑,你只能被刮毛,一直都是一个小小的业务员。自从15年后IT业的平均薪资全面超过了金融,我就很想转行...
  • Java两年经验简历模板

    2018-03-29 20:58:01
    Java软件工程师两年经验简历模板,涉及项目的包装,项目的介绍等

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,377
精华内容 2,150
关键字:

java简历包装

java 订阅