04 2020 档案

摘要:面试官:想了解你的知识面的广度和深度。 解答: Lucene 是有索引和搜索的两个过程,包含索引创建,索引,搜索三个要点。可以 基于这个脉络展开一些。 最近面试一些公司,被问到的关于 Elasticsearch 和搜索引擎相关的问题,以及自 己总结的回答。 阅读全文
posted @ 2020-04-29 21:35 咔啡 阅读(647) 评论(0) 推荐(0)
摘要:面试官:想了解对 ES 集群的运维能力。 解答: 1、关闭缓存 swap; 2、堆内存设置为:Min(节点内存/2, 32GB); 3、设置最大文件句柄数; 4、线程池+队列大小根据业务需要做调整; 5、磁盘存储 raid 方式——存储有条件使用 RAID10,增加单节点性能以及避免单 节点存储故障 阅读全文
posted @ 2020-04-29 16:18 咔啡 阅读(582) 评论(0) 推荐(0)
摘要:面试官:想了解 ES 的底层原理,不再只关注业务层面了。 解答: 这里的索引文档应该理解为文档写入 ES,创建索引的过程。 文档写入包含:单文档写入和批量 bulk 写入,这里只解释一下:单文档写入流程。 记住官方文档中的这个图。 第一步:客户写集群某节点写入数据,发送请求。(如果没有指定路由/协调 阅读全文
posted @ 2020-04-29 16:17 咔啡 阅读(1242) 评论(0) 推荐(0)
摘要:面试官:想了解大数据量的运维能力。 解答:索引数据的规划,应在前期做好规划,正所谓“设计先行,编码在后”, 这样才能有效的避免突如其来的数据激增导致集群处理能力不足引发的线上客户 检索或者其他业务受到影响。 如何调优,正如问题 1 所说,这里细化一下: 3.1 动态索引层面 基于模板+时间+roll 阅读全文
posted @ 2020-04-29 16:16 咔啡 阅读(1477) 评论(0) 推荐(0)
摘要:面试官:想了解应聘者之前公司接触的 ES 使用场景、规模,有没有做过比较大 规模的索引设计、规划、调优。 解答: 如实结合自己的实践场景回答即可。 比如:ES 集群架构 13 个节点,索引根据通道不同共 20+索引,根据日期,每日 递增 20+,索引:10 分片,每日递增 1 亿+数据, 每个通道每 阅读全文
posted @ 2020-04-29 16:15 咔啡 阅读(762) 评论(0) 推荐(0)
摘要:Dubbox 是继 Dubbo 停止维护后,当当网基于 Dubbo 做的一个扩展项目,如 加了服务可 Restful 调用,更新了开源组件等。 阅读全文
posted @ 2020-04-29 16:14 咔啡 阅读(512) 评论(0) 推荐(0)
摘要:以通过 dubbo:reference 中设置 mock="return null"。mock 的值也可以修改 为 true,然后再跟接口同一个路径下实现一个 Mock 类,命名规则是 “接口名 称+Mock” 后缀。然后在 Mock 类里实现自己的降级逻辑 阅读全文
posted @ 2020-04-29 16:13 咔啡 阅读(352) 评论(0) 推荐(0)
摘要:答:可以将多次 IO 往返的时间缩减为一次,前提是 pipeline 执行的指令之间没有 因果相关性。使用 redis-benchmark 进行压测的时候可以发现影响 redis 的 QPS 峰值的一个重要因素是 pipeline 批次指令的数目。 阅读全文
posted @ 2020-04-29 00:53 咔啡 阅读(2139) 评论(1) 推荐(0)
摘要:答:Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数 据写入磁盘。所以 redis 具有快速和数据持久化的特征。如果不将数据放在内存中, 磁盘 I/O 速度为严重影响 redis 的性能。在内存越来越便宜的今天,redis 将会越 来越受欢迎。如果设置了最大使用的内存,则数 阅读全文
posted @ 2020-04-29 00:52 咔啡 阅读(1219) 评论(0) 推荐(0)
摘要:每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权, 但这依赖于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。我 们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线 程前执行。线程优先级是一个 int 变量(从 1-10),1 代表最 阅读全文
posted @ 2020-04-29 00:51 咔啡 阅读(788) 评论(0) 推荐(1)
摘要:最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。Wait 通常被用于线 程间交互,sleep 通常被用于暂停执行。 直接了解的深入一点吧: 在 Java 中线程的状态一共被分成 6 种: 第 183 页 共 485 页初始态:NEW 创建一个 Thread 对象,但还未调用 s 阅读全文
posted @ 2020-04-29 00:31 咔啡 阅读(165) 评论(0) 推荐(0)
摘要:如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler 是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异 常将造成线程中断的时候 JVM 会使用 Thread.getUncaughtExceptionHandler() 来查询线程的 阅读全文
posted @ 2020-04-25 14:20 咔啡 阅读(766) 评论(0) 推荐(0)
摘要:在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是 不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果; 存在数据依赖关系的不允许重排序 需要注意的是:重排序不会影响单线程环境的执行结果,但是会破坏多线程的执 行语义。 阅读全文
posted @ 2020-04-25 14:19 咔啡 阅读(614) 评论(0) 推荐(0)
摘要:我们可以使用 Thread 类的 Sleep()方法让线程暂停一段时间。需要注意的是,这 并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为 Runnable, 并且根据线程调度,它将得到执行。 阅读全文
posted @ 2020-04-25 14:18 咔啡 阅读(995) 评论(0) 推荐(0)
摘要:在两个线程间共享变量即可实现共享。 一般来说,共享变量要求变量本身是线程安全的,然后在线程内使用的时候,如 果有对共享变量的复合操作,那么也得保证复合操作的线程安全性。 阅读全文
posted @ 2020-04-25 00:19 咔啡 阅读(1484) 评论(0) 推荐(0)
摘要:最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。Wait 通常被用于线 程间交互,sleep 通常被用于暂停执行。 直接了解的深入一点吧: 在 Java 中线程的状态一共被分成 6 种: 初始态:NEW 创建一个 Thread 对象,但还未调用 start()启动线程时,线程处 阅读全文
posted @ 2020-04-25 00:18 咔啡 阅读(663) 评论(0) 推荐(0)
摘要:volatile 保证内存可见性和禁止指令重排。 volatile 用于多线程环境下的单次操作(单次读或者单次写)。 阅读全文
posted @ 2020-04-25 00:17 咔啡 阅读(208) 评论(0) 推荐(0)
摘要:SynchronizedMap 一次锁住整张表来保证线程安全,所以每次只能有一个线程来 访为 map。 ConcurrentHashMap 使用分段锁来保证在多线程下的性能。 ConcurrentHashMap 中则是一次锁住一个桶。ConcurrentHashMap 默认将 hash 表分为 16 阅读全文
posted @ 2020-04-25 00:14 咔啡 阅读(1140) 评论(0) 推荐(0)
摘要:悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传 统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写 锁等,都是在做操作之前先上锁。再比如 Java 里面的同步原语 synchroniz 阅读全文
posted @ 2020-04-25 00:13 咔啡 阅读(1661) 评论(0) 推荐(0)
摘要:中断 和 共享变量 阅读全文
posted @ 2020-04-25 00:12 咔啡 阅读(647) 评论(0) 推荐(0)
摘要:使用共享变量的方式 在这种方式中,之所以引入共享变量,是因为该变量可以被多个执行相同任务的 线程用来作为是否中断的信号,通知中断线程的执行。 使用 interrupt 方法终止线程 如果一个线程由于等待某些事件的发生而被阻塞,又该怎样停止该线程呢?这种 情况经常会发生,比如当一个线程由于需要等候键盘 阅读全文
posted @ 2020-04-25 00:11 咔啡 阅读(1070) 评论(0) 推荐(0)
摘要:为什么要使用 Executor 线程池框架 1、每次执行任务创建线程 new Thread()比较消耗性能,创建一个线程是比较耗 时、耗资源的。 2、调用 new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的 创建,线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线 阅读全文
posted @ 2020-04-25 00:10 咔啡 阅读(366) 评论(0) 推荐(0)
摘要:计算机通常只有一个 CPU,在任意时刻只能执行一条机器指令,每个线程只有获得 CPU 的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线 程轮流获得 CPU 的使用权,分别执行各自的任务.在运行池中,会有多个处于就绪状 态的线程在等待 CPU,JAVA 虚拟机的一项任务就是负责线 阅读全文
posted @ 2020-04-25 00:09 咔啡 阅读(1894) 评论(0) 推荐(0)
摘要:不可变对象(Immutable Objects)即对象一旦被创建它的状态(对象的数据,也即 对象属性值)就不能改变,反之即为可变对象(Mutable Objects)。 不可变对象的类即为不可变类(Immutable Class)。Java 平台类库中包含许多不可 变类,如 String、基本类型的 阅读全文
posted @ 2020-04-25 00:08 咔啡 阅读(1473) 评论(1) 推荐(0)
摘要:CyclicBarrier 可以重复使用,而 CountdownLatch 不能重复使用。 Java 的 concurrent 包里面的 CountDownLatch 其实可以把它看作一个计数器, 只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器, 也就是同时只能有一个线程去减这 阅读全文
posted @ 2020-04-25 00:05 咔啡 阅读(673) 评论(0) 推荐(0)
摘要:当你调用 start()方法时你将创建新的线程,并且执行在 run()方法里的代码。 但是如果你直接调用 run()方法,它不会创建新的线程也不会执行调用线程的代码, 只会把 run 方法当作普通方法去执行。 阅读全文
posted @ 2020-04-25 00:04 咔啡 阅读(972) 评论(0) 推荐(0)
摘要:线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程 的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。 线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若 干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它 要使用该资源 阅读全文
posted @ 2020-04-25 00:03 咔啡 阅读(1590) 评论(0) 推荐(0)
摘要:在 Java 并发程序中 FutureTask 表示一个可以取消的异步运算。它有启动和取消 运算、查询运算是否完成和取回运算结果等方法。只有当运算完成的时候结果才 能取回,如果运算尚未完成 get 方法将会阻塞。一个 FutureTask 对象可以对调用 了 Callable 和 Runnable 阅读全文
posted @ 2020-04-25 00:02 咔啡 阅读(327) 评论(0) 推荐(0)
摘要:阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当 队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消 费者是从队列里拿元素的线程。阻塞队列就是生产 阅读全文
posted @ 2020-04-25 00:01 咔啡 阅读(772) 评论(0) 推荐(0)
摘要:Executor 框架是一个根据一组执行策略调用,调度,执行和控制的异步任务的框 架。 无限制的创建线程会引起应用程序内存溢出。所以创建一个线程池是个更好的的 解决方案,因为可以限制线程的数量并且可以回收再利用这些线程。利用 Executors 框架可以非常方便的创建一个线程池。 阅读全文
posted @ 2020-04-25 00:00 咔啡 阅读(702) 评论(0) 推荐(0)
摘要:原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。 处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。 在 Java 中可以通过锁和循环 CAS 的方式来实现原子操作。 CAS 操作—— Compare & Set,或是 Compare & Sw 阅读全文
posted @ 2020-04-24 23:59 咔啡 阅读(485) 评论(0) 推荐(0)
摘要:ThreadGroup 类,可以把线程归属到某一个线程组中,线程组中可以有线程对象, 也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式。 为什么不推荐使用?因为使用有很多的安全隐患吧,没有具体追究,如果需要使 用,推荐使用线程池。 阅读全文
posted @ 2020-04-24 23:57 咔啡 阅读(1097) 评论(0) 推荐(0)
摘要:死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成 的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 产生死锁的必要条件: 1、互斥条件:所谓互斥就是进程在某一时间内独占资源。 2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 3、不剥夺条件:进 阅读全文
posted @ 2020-04-24 23:56 咔啡 阅读(675) 评论(0) 推荐(0)
摘要:进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。 一个程序至少有一个进程,一个进程至少有一个线程。 阅读全文
posted @ 2020-04-24 23:55 咔啡 阅读(175) 评论(0) 推荐(0)
摘要:1、Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可 以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。 2、用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。 3、 避免在索引列上使用计算 4、避免在索引 阅读全文
posted @ 2020-04-24 23:54 咔啡 阅读(644) 评论(0) 推荐(0)
摘要:Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。Zookeeper 自身也要保 证当一个节点宕机时,其他节点会继续提供服务。 如果是一个 Follower 宕机,还有 2 台服务器提供访问,因为 Zookeeper 上的数 据是有多个副本的,数据并不会丢失; 如果是一个 Leader 阅读全文
posted @ 2020-04-12 19:39 咔啡 阅读(2997) 评论(0) 推荐(0)
摘要:Leader 1、事务请求的唯一调度和处理者,保证集群事务处理的顺序性 2、集群内部各服务的调度者 Follower 1、处理客户端的非事务请求,转发事务请求给 Leader 服务器 2、参与事务请求 Proposal 的投票 3、参与 Leader 选举投票 Observer 1、3.0 版本以后 阅读全文
posted @ 2020-04-12 19:36 咔啡 阅读(295) 评论(0) 推荐(0)
摘要:3.2.0 版本后,添加了 Chroot 特性,该特性允许每个客户端为自己设置一个命名 空间。如果一个客户端设置了 Chroot,那么该客户端对服务器的任何操作,都将 会被限制在其自己的命名空间下。 通过设置 Chroot,能够将一个客户端应用于 Zookeeper 服务端的一颗子树相对 应,在那些 阅读全文
posted @ 2020-04-12 19:35 咔啡 阅读(231) 评论(0) 推荐(0)
摘要:1、服务端接收 Watcher 并存储 接收到客户端请求,处理请求判断是否需要注册 Watcher,需要的话将数据节点 的节点路径和 ServerCnxn(ServerCnxn 代表一个客户端和服务端的连接,实现 了 Watcher 的 process 接口,此时可以看成一个 Watcher 对象) 阅读全文
posted @ 2020-04-12 19:34 咔啡 阅读(237) 评论(0) 推荐(0)
摘要:1、PERSISTENT-持久节点 除非手动删除,否则节点一直存在于 Zookeeper 上 2、EPHEMERAL-临时节点 临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与 zookeeper 连接断开不一定会话失效),那么这个客户端创建的所有临时节点都 会被移除。 3、PERS 阅读全文
posted @ 2020-04-12 19:27 咔啡 阅读(834) 评论(0) 推荐(0)
摘要:Zookeeper 提供一个多层级的节点命名空间(节点称为 znode)。与文件系统不 同的是,这些节点都可以设置关联的数据,而文件系统中只有文件节点可以存放 数据而目录节点不行。 Zookeeper 为了保证高吞吐和低延迟,在内存中维护了这个树状的目录结构,这 种特性使得 Zookeeper 不能 阅读全文
posted @ 2020-04-12 19:25 咔啡 阅读(481) 评论(0) 推荐(0)
摘要:ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群 中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用 的接口和性能高效、功能稳定的系统提供给用户。 分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名 服务、分布式协调 阅读全文
posted @ 2020-04-12 19:24 咔啡 阅读(308) 评论(0) 推荐(0)
摘要:第一种:接口实现类继承 SqlSessionDaoSupport:使用此种方法需要编写 mapper 接口,mapper 接口实现类、mapper.xml 文件。 1、在 sqlMapConfig.xml 中配置 mapper.xml 的位置 <mappers> <mapper resource=" 阅读全文
posted @ 2020-04-12 19:23 咔啡 阅读(1387) 评论(0) 推荐(0)
摘要:1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就 将清空,默认打开一级缓存。 2)二级缓存与一级缓存其机制相同,默认也是采用 Perpe 阅读全文
posted @ 2020-04-12 19:22 咔啡 阅读(234) 评论(0) 推荐(0)
摘要:Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association 指的就是一对一,collection 指的就是一对多查询。在 Mybatis配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|fals 阅读全文
posted @ 2020-04-12 19:20 咔啡 阅读(8589) 评论(0) 推荐(0)
摘要:<mapper namespace="com.lcb.mapping.userMapper"> <!--association 一对一关联查询 --> 第 43 页 共 485 页<select id="getClass" parameterType="int" resultMap="Classes 阅读全文
posted @ 2020-04-12 19:19 咔啡 阅读(637) 评论(0) 推荐(0)
摘要:不同的 Xml 映射文件,如果配置了 namespace,那么 id 可以重复;如果没有配 置 namespace,那么 id 不能重复; 原因就是 namespace+id 是作为 Map<String, MapperStatement>的 key 使用的,如果没有 namespace,就剩下 i 阅读全文
posted @ 2020-04-12 19:18 咔啡 阅读(1606) 评论(0) 推荐(0)
摘要:Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理 是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。 Mybatis 提供了 9 种动态 sql 标签:trim | where | set | foreach | if | choose | w 阅读全文
posted @ 2020-04-12 19:17 咔啡 阅读(4300) 评论(0) 推荐(0)
摘要:首先,创建一个简单的 insert 语句: <insert id=”insertname”> insert into names (name) values (#{value}) </insert> 然后在 java 代码中像下面这样执行批处理插入: list < string > names = 阅读全文
posted @ 2020-04-12 19:16 咔啡 阅读(873) 评论(0) 推荐(0)
摘要:Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace 的值; 接口的方法名,就是映射文件中 Mapper 的 Statement 的 id 值;接口方法内的 参数,就是传递给 sql 的参数。 Mapper 接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼 阅读全文
posted @ 2020-04-12 19:14 咔啡 阅读(1634) 评论(0) 推荐(0)
摘要:第 1 种: 通过在查询的 sql 语句中定义字段名的别名,让字段名的别名和实体类 的属性名一致。 第 35 页 共 485 页<select id=”selectorder” parametertype=”int” resultetype=” me.gacl.domain.order”> sele 阅读全文
posted @ 2020-04-12 19:09 咔啡 阅读(3003) 评论(0) 推荐(0)
摘要:1、Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要 程序员自己编写 Sql 语句。 2、Mybatis 直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高,非常 适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但 阅读全文
posted @ 2020-04-12 19:08 咔啡 阅读(999) 评论(0) 推荐(0)
摘要:1、SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功底有一定要求。 2、SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。 阅读全文
posted @ 2020-04-12 19:07 咔啡 阅读(228) 评论(0) 推荐(0)
摘要:1、Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时 只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性 能,灵活度高。 2、MyBatis 可以 阅读全文
posted @ 2020-04-12 19:06 咔啡 阅读(213) 评论(0) 推荐(0)

点击右上角即可分享
微信分享提示