![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
文章平均质量分 70
修 己
这个作者很懒,什么都没留下…
展开
-
Redis Sentinel 与 Redis Cluster
本文主要介绍Redis Sentinel 及 Redis Cluster的区别Redis-Sentinel(哨兵模式)是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行主备切换,而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自懂切换。不时地监控redis是否按照预期良好地运行;.........原创 2022-08-11 10:37:33 · 1870 阅读 · 0 评论 -
⚡️算法练习 ~字符串-左旋转字符串~⚡️
描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S,请你把其循环左移 K 位后的序列输出(保证 K 小于等于 S 的长度)。例如,字符序列S=”abcXYZdef”,要求输出循环左移 3 位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!示例输入:“abcXYZdef”,3返回值:“XYZdefabc”题解有一种不是最优解,却是比较简单的一个方法,字符串反转public class Soluti原创 2021-09-23 15:48:27 · 158 阅读 · 0 评论 -
⚡️算法练习 ~栈-获取栈内的最小值~⚡️
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。import java.util.Stack;/** * 定义栈的数据结构,请在该类型中实现一个能够得到栈中 * 所含最小元素的min函数(时间复杂度应为O(1))。 * Created by haoll on 2021/5/25 */public class Solution { private Stack<Integer> stack = new Stack<原创 2021-09-22 13:42:42 · 256 阅读 · 0 评论 -
⚡️算法练习 ~栈-栈的压入和弹出序列~⚡️
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)示例1输入[1,2,3,4,5],[4,3,5,1,2]返回值false解题思路借助一个栈来做栈的特点是先进后出表。栈是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进原创 2021-09-18 09:35:58 · 258 阅读 · 0 评论 -
⚡️算法练习 ~数组-转置矩阵~⚡️
题目给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[[1,4,7],[2,5,8],[3,6,9]]示例 2:输入:matrix = [[1,2,3],[4,5,6]]输出:[[1,4],[2,5],[3,6]]解题思路原数组的行和列,正好就是新数组的列和行。对换即可示例代码public int原创 2021-09-17 09:29:58 · 467 阅读 · 0 评论 -
⚡️算法练习 ~数组-最小的k个数~⚡️
题目描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组题解对于n个整数中最小的K个数的查找,可以使用各种排序算法:冒泡/堆排/快排/希尔排序等等。将此n个整数从小到大排序之后,前k个数就是所求的结果。但是当原数组中的数据顺序不可修改,并且n的值过于大的时候,各种排序算法要将n个数加载到内存中,即:如果是海量数据中查找出最小的k个数,那么这种办法是效率很低的。可以通过另一原创 2021-09-16 09:43:32 · 540 阅读 · 0 评论 -
⚡️算法练习 ~数组-两数之和~⚡️
题目描述给出一个整数数组,请在数组中找出两个加起来等于目标值的数,你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足index1 小于index2.。注意:下标是从1开始的假设给出的数组中只存在唯一解例如:给出的数组为 {20, 70, 110, 150},目标值为90输出 index1=1, index2=2题解一简单粗暴,双层循环相加进行比较。这是最容易想到的方法,枚举数组中的每一个数 x,寻找数组中是否存在 target - ximport java原创 2021-09-15 11:14:27 · 387 阅读 · 0 评论 -
⚡️算法练习 ~数组-顺时针打印矩阵~⚡️
描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:则依次打印出数字[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]][1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]示例1输入:[[1,2],[3,4]]返回值:[1,2,4,3]解析简单来说,就是不断地收缩矩阵的边界:定义四个变量代表范围,up、down、left、right1、向右走存入整行的值,当原创 2021-09-15 09:54:20 · 278 阅读 · 0 评论 -
⚡️算法练习 ~回文数字~⚡️
1 题目描述给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。2 示例代码/** * (方法一)字符串反转 */ public static boolean isPalindrome(int x) { if(x < 0){ return false; }原创 2021-09-14 09:48:57 · 622 阅读 · 0 评论 -
mybatis
mybatis的主要成员1、ConfigurationMyBatis所有的配置信息都保存在Configuration对象之中,配置文件的大部分配置都会存储到该类中。2、SqlSession作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能。3、ExecutorMyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作原创 2021-09-13 10:21:56 · 639 阅读 · 0 评论 -
Spring ~~ 常见面试题
@Component 和 @Bean 的区别是什么?1、作用对象不同: @Component 注解作用于类,而@Bean注解作用于方法。2、@Component通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。@Bean 注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean告诉了Spring这是某个类的示例,当我需要用它的时候还给我。原创 2021-09-01 09:42:49 · 346 阅读 · 0 评论 -
同学~你了解@Transactional注解吗?
你在项目中是如何使用事物的?我们项目的框架都是使用的Spring,spring分为 编程式事务,在代码中硬编码。声明式事务,在配置文件中配置(推荐使用)声明式事务又分为两种:基于XML的声明式事务基于注解的声明式事务。我一般都是通过注解来进行的事务控制。也就是@Transactional能先简单介绍一下@Transactional注解吗?项目中如何使用的?有哪些注意点吗?我们都是把注解加到需要使用事务控制的方法上,也可以加到类上,加到类上是给类里的所有的方法都加了事务,不建议这样做,.原创 2021-08-27 11:08:10 · 930 阅读 · 0 评论 -
面试官问~如何对一个对象数组进行去重
背景介绍题目:现在有一个student类,有三个属性:分别是 String 类型的name, int类型的age、Date类型的birthy。创建一个student类型的数组,对这个数组进行去重。要求:只要是数组中的student对象的name值一样,birthy一样就代表是一个重复元素。这里主要考察我们的是1、如何重写equals和hashcode ?2、为什么要重写 equals和hashcode ?3、什么情况下必须重写 equals和hashcode 等一系列的问题。接下来的我们原创 2021-08-25 16:03:07 · 1219 阅读 · 0 评论 -
redis面试~~有这一篇就够了
redis介绍1、redis 是什么?redis可以理解就是一个数据库,不过与传统数据库不同的是 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。另外,redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不同的业务场景。除此之外,redis 支持事务 、持久化、LUA脚本、LRU驱动事件、多种集群方案。2、为什么要用 redis?/为什么要用缓存?因为传统的关系型数据库如Mysql已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页原创 2021-08-21 10:29:07 · 1610 阅读 · 0 评论 -
Java基础面试~~多线程
1. 并行和并发有什么区别?并行:就是多个任务真实的同时执行。并发:偏重于多个任务交替执行,而多个任务之间有可能还是串行的。2. 线程和进程的区别?简而言之,进程是程序运行和资源分配的基本单位,一个程序至少有一个进程,一个进程至少有一个线程。进程在执行过程中拥有独立的内存单元,而多个线程共享内存资源,减少切换次数,从而效率更高。线程是进程的一个实体,是cpu调度和分派的基本单位,是比程序更小的能独立运行的基本单位。同一进程中的多个线程之间可以并发执行。3. 守护线程是什么?守护线程(原创 2021-08-19 09:54:35 · 1819 阅读 · 0 评论 -
Java 基础面试题整理~持续更新
1、JAVA中的几种基本数据类型是什么,各自占用多少字节。java中8种基本数据类型:byte , short , int , long , float , double , char , boolean2、String类能被继承吗,为什么?String被关键字final修饰,所以不能被继承。1、修饰类当用final去修饰一个类的时候,表示这个类不能被继承。在JDK中,被设计为final类的有String、System等。2、修饰方法:被final修饰的方法不能被重写。3、修饰成员变量:必须初原创 2021-08-16 17:31:47 · 2249 阅读 · 0 评论 -
JUC ~~ ReentrantLock 详解
1 介绍重入锁ReentrantLock,顾名思义,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。1.1 重入锁的原理每一个锁关联一个线程持有者和计数器,当计数器为 0 时表示该锁没有被任何线程持有,那么任何线程都可能获得该锁而调用相应的方法;当某一线程请求成功后,JVM会记下锁的持有线程,并且将计数器置为 1;此时其它线程请求该锁,则必须等待;而该持有锁的线程如果再次请求这个锁,就可以再次拿到这个锁,同时计数器会递增;当线程退出同原创 2021-08-13 10:06:24 · 360 阅读 · 0 评论 -
JUC ~~ CyclicBarrier 详解
1 介绍CountDownLatch 在解决多个线程同步方面相对于join方法己经有了不少优化,但是CountDownLatch的计数器是一次性的,也就是等到计数器值变为0后,再调用CountDownLatch的await 和countdown 方法都会立刻返回,这就起不到线程同步的效果了。所以为了满足计数器可以重置的需要,JDK开发组提供了CyclicBarrier类。可以让一组线程全部达到一个状态后再全部同时执行,执行完毕之后重置CyclicBarrier的状态可以被重用。之所以叫做屏障是因为线程调用原创 2021-08-11 09:53:01 · 589 阅读 · 0 评论 -
JUC ~~ CountDownLatch 详解
1 案例介绍在日常开发中经常会遇到需要在主线程中开启多个线程去并行执行任务, 并且主线程需要等待所有子线程执行完毕后再进行汇总的场景。在CountDownLatch 出现之前一般都使用线程的join( )方法来实现这一点,但是join 方法不够灵活, 不能够满足不同场景的需要,所以JDK 开发组提供了CountDownLatch 这个类。1.1 Java中join()方法的理解thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的J原创 2021-08-10 09:42:48 · 313 阅读 · 0 评论 -
记一次线程池的故障,使用线程池该如何处理异常?
1 业务背景点赞业务:之前公司各个业务线的的点赞记录只存一条记录到数据库,并没有汇总每个资源的点赞总数,这样的话等到缓存失效时候,就需要去数据库中进行count()查询。随着数据量越来越大,count()的成本肯定会越来越高。所以想通过程序计算总数写入数据库的一张新表。等到缓存失效之后,用这张表的数据进行兜底做被动缓存。由于目前的数据量在9800多万,如果一条一条的进行同步计算,耗费的时间比较长,所以就用异步的方式,同时去处理不同业务线的数据。采用for循环的方式一次从数据库中查出500条数据进行处理原创 2021-08-06 09:58:10 · 782 阅读 · 0 评论 -
项目中如何合理的使用线程池~
1、使用线程池的好处?1、降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2、提高响应速度:当任务到达时,可以不需要等待线程创建就能立即执行。3、提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性。2、创建线程池的方式2.1 ExecutorsnewSingleThreadPoll() 创建一个只有一个线程的线程池。newFixedThreadPool(int numOfThreads)来创建固定线程数的线程池。newCache原创 2021-08-04 14:10:04 · 1493 阅读 · 0 评论 -
~mysql 面试、复习知识点汇总~
1、存储引擎InnoDB支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。MyISAM它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不支持事务,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。InnoDB 和 MyISAM 的比较1、事务:原创 2021-08-03 11:01:57 · 468 阅读 · 2 评论 -
JVM ~~ 类加载子系统
1 类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)• class file存在于本地硬盘上,可以理解为设计师画在纸上的模板,而最终这个模原创 2021-04-19 23:06:10 · 291 阅读 · 0 评论 -
垃圾回收篇~~面试题集
1、大厂面试题蚂蚁金服你知道哪几种垃圾回收器,各自的优缺点,重点讲一下cms和G1?JVM GC算法有哪些,目前的JDK版本采用什么回收算法?G1回收器讲下回收过程GC是什么?为什么要有GC?GC的两种判定方法?CMS收集器与G1收集器的特点百度说一下GC算法,分代回收说下垃圾收集策略和算法天猫JVM GC原理,JVM怎么回收内存CMS特点,垃圾回收算法有哪些?各自的优缺点,他们共同的缺点是什么?滴滴Java的垃圾回收器都有哪些,说下g1的应用场景,平时你是如何搭配使用垃圾回收器的原创 2021-07-30 09:58:39 · 968 阅读 · 0 评论 -
垃圾回收篇~~垃圾回收器
1 GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。1.1 垃圾收集器分类1.1.1 按线程数分按线程数分(垃圾回收线程数),可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。在诸如单CPU处理器或者较小的应用原创 2021-07-28 17:41:28 · 404 阅读 · 1 评论 -
垃圾回收篇~~垃圾回收算法
一、垃圾回收算法分类1、标记-清除算法最基础的算法,分为标记和清除两个阶段:首先标记出所有需要回收的对象,完成后统一回收掉所有被标记的对象。后续的算法都是基于此算法来改进的。主要有两个缺点:效率问题:标记和清除的过程效率都不高。空间问题:标记清除之后会产生大量不连续的内存碎片,这样可能会导致以后再运行过程中需要分配大对象时无法找到足够的连续内存而不得不触发新的一次垃圾回收。标记-清除算法图示-12、复制算法为了解决效率问题,复制算法出现了。将内存按容量划分为大小相等的两块,每次只使用其原创 2021-07-27 17:40:06 · 2524 阅读 · 0 评论 -
垃圾回收篇~~垃圾回收概述
1 什么是垃圾在提到什么是垃圾之前,我们先看下面一张图从上图我们可以很明确的知道,Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间原创 2021-07-26 11:14:56 · 1364 阅读 · 2 评论 -
面试高频点:讲一讲Spring中的循环依赖
1. 什么是循环依赖?一般场景是一个Bean A依赖Bean B,而Bean B也依赖Bean A :Bean A → Bean B → Bean A当然我们也可以添加更多的依赖层次,比如:Bean A → Bean B → Bean C → Bean D → Bean E → Bean A2. Spring中的循环依赖当Spring上下文在加载所有的bean时,他会尝试按照他们他们关联关系的顺序进行创建。比如,如果不存在循环依赖时,例如:Bean A → Bean B → Bean CSpring原创 2021-07-22 22:12:57 · 1538 阅读 · 2 评论