![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
文章平均质量分 83
ZNineSun
大道至简,返璞归真
展开
-
MySQL 数据同步到 Redis 缓存方案
为了减轻数据库的压力,我们一般会通过加入缓存的方式来解决,本着先查询缓存在查询数据库的原则,那么数据库中的数据如何写入缓存则成为首要问题。本文就以redis缓存为例带着大家一起了解一下数据同步的方案。binlog。原创 2023-03-12 18:20:03 · 2148 阅读 · 0 评论 -
数据库日期类型字段,需要兼容不同数据库,应该如何选择?
数据类型所占用的存储空间为8个字节,其中前4个字节用于存储1900年1月1日以前或以后的天数,数值分正负,正数表示在此日期之后的日期,负数表示在此日期之前的日期;为了解决这个问题,设计了一个辅助的措施,就是建立一个数据库函数来进行时间转换,把毫秒数的时间转为指定时区和格式的时间串,DBA在维护时可以使用。我们可以看到,这个定义,保证了这个时间值能够被后续设计开发的人员正确和准确的理解,能够为所有的应用正确理解,能够在所有时区上正确反映为正常的时间形式。用于表示一段时间或一个时间间隔的方法。原创 2022-12-27 23:09:41 · 343 阅读 · 0 评论 -
深入浅出MappedByteBuffer
java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高,本文会介绍其性能如此高的内部实现原理。在深入MappedByteBuffer之前,先看看计算机内存管理的一些知识:那么问题来了,为什么会有虚拟内存和物理内存的区别?什么是虚拟内存地址和物理内存地址?计算机会对虚拟内存地址空间(32位为4G)进行分页产生页(page),对物理内存地址空间原创 2022-12-05 11:20:38 · 590 阅读 · 0 评论 -
SSO 单点登录和 OAuth2.0 的区别和理解
SSO是的缩写,OAuth是的缩写,这两者都是使用令牌的方式来代替用户密码访问应用。流程上来说他们非常相似,但概念上又十分不同。SSO大家应该比较熟悉,它将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。OAuth2.0原理可能比较陌生,但平时用的却很多,比如访问某网站想留言又不想注册时使用了微信授权。以上两者,你在业务系统中都没有账号和密码,账号密码是存放在登录中心或微信服务器中的,这就是所谓的使用令牌代替账号密码访问应用。原创 2022-11-09 21:32:25 · 201 阅读 · 0 评论 -
加密后的数据如何进行模糊查询
我们知道加密后的数据对模糊查询不是很友好,今天我们就具体探讨一下加密以后数据怎么继续模糊查查询的问题。我们需要加密存储,一般使用的都是不可逆的慢hash算法,慢hash算法可以避免暴力破解(典型的用时间换安全性),在检索时我们既不需要解密也不需要模糊查找,直接使用密文完全匹配但是手机号就不能这样做,因为手机号我们要查看原信息,并且对手机号还需要支持模糊查找,因此我们今天就针对可逆加解密的数据支持模糊查询来看看有哪些实现方式。原创 2022-10-31 16:17:37 · 3720 阅读 · 1 评论 -
Redis中有哪些阻塞点以及如何解决
我们从 Redis 内部及外部因素总结一下有哪些会影响redis性能的因素。我们就以上四种情况简单分析一下。原创 2022-10-28 15:30:45 · 784 阅读 · 0 评论 -
4种Redis集群方案及优缺点对比
在服务开发中,单机都会存在单点故障的问题,及服务部署在一台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要有一台服务器可用服务就可用。redis也是一样,为了解决单机故障引入了主从模式master节点故障后服务,需要人为的手动将slave节点切换成为maser节点后服务才恢复。redis为解决这一问题又引入了哨兵模式。原创 2022-10-24 19:25:00 · 366 阅读 · 0 评论 -
Redis 的大 Key 对持久化有什么影响?
当 AOF 写回策略配置了Always 策略,如果写入是一个大 Key,主线程在执行 fsync() 函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很耗时的。AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过 fork() 函数创建一个子进程来处理任务。创建子进程的途中,由于要复制父进程的页表等数据结构,阻塞的时间跟页表的大小有关,页表越大,阻塞的时间也越长;原创 2022-10-10 13:19:58 · 232 阅读 · 0 评论 -
服务网关与流量网关
在了解这个问题 之前,我们需要知道什么是网关,很多地方将网关比如成门, 没什么问题, 但是需要区分网关与网桥的区别。工作在数据链路层,在不同或相同类型的LAN之间存储并转发数据帧,必要时进行链路层上的协议转换。可连接两个或多个网络,在其中传送信息包。是一个大概念,不具体特指一类产品,只要连接两个不同的网络都可以叫网关,网桥一般只转发信息,而网关可能进行包装。原创 2022-10-09 19:11:00 · 2713 阅读 · 0 评论 -
toString()、String.valueOf、(String)强转,有啥区别?
相信大家在日常开发中这三种方法用到的应该很多,尤其是前两种,经常在开发的时候,随心所欲,想用哪个用哪个,既然存在,那就应该有它存在的道理,那么什么情况下用哪个呢?我们先看看答案:1、toString(),可能会抛空指针异常在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以java对象都可以调用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出异常。采用这种方法时,通常派生类会覆盖。原创 2022-09-16 10:33:26 · 547 阅读 · 0 评论 -
简单聊聊异常体系
当Java中提供的异常不能满足我们的需求时,或者我们需要通过指定异常来触发某些事件时,我们可以自定义异常。定义异常类写继承关系提供空参构造提供带参构造public class 异常类名 extends RuntimeException {public 异常类名() {} public 异常类名(参数) {super(参数);} }原创 2022-09-14 23:54:03 · 278 阅读 · 0 评论 -
Mybatis 中的 DAO 接口和 XML 文件里的 SQL 是如何建立关系的?
SqlSource以及动态标签SqlNodeMappedStatement对象Spring工厂Bean以及动态代理SqlSession以及执行器2、针对有两个XML文件和这个Dao建立关系是否会冲突的问题:不管有几个XML和Dao建立关系,只要保证唯一即可。原创 2022-09-08 17:37:15 · 325 阅读 · 0 评论 -
聊聊spring事务失效的12种场景
在使用@Transactional注解声明事务时,有时我们想自定义回滚的异常,spring也是支持的。可以通过设置参数,来完成这个功能。} }如果在执行上面这段代码,保存和更新数据时,程序报错了,抛了等异常。而BusinessException是我们自定义的异常,报错的异常不属于BusinessException,所以事务也不会回滚。即使rollbackFor有默认值,但阿里巴巴开发者规范中,还是要求开发者重新指定该参数。这是为什么呢?原创 2022-09-03 11:14:17 · 196 阅读 · 0 评论 -
416. 分割等和子集
打卡!!!每日一题今天带着大家做一道相对比较难的题目,当然我会通过讲解01背包问题带着大家过渡一下。题目描述:给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。题目示例:再看这道题之前,我们先研究一下01背包的问题,为啥要研究01背包呢,这道题其实限制条件很明显,首先数组里的元素总和一定是偶数,其次,我们只需要能找到元素之和==sum/2的集合就可以了。...原创 2022-08-30 17:36:14 · 762 阅读 · 1 评论 -
一文梳理SpringCloud常见知识点
Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。...原创 2022-08-29 17:55:32 · 350 阅读 · 0 评论 -
Java 序列化和反序列化为什么要实现 Serializable 接口?
其实我上面思考的过程大家也可以借鉴,不要一上来就要去编码,否则会使自己特别的局限。下面我们来一一解答这几个问题.原创 2022-08-26 17:10:31 · 266 阅读 · 0 评论 -
一文让你彻底了解多线程
System . out . println("请大家多多关注");} }System . out . println("Runable:请大家多多关注");} }如果想要执行的线程有返回,可以使用Callable。return "Callable:请大家多多关注";} }CPU的缓存是以缓存行(cache line)为单位进行缓存的,当多个线程修改相互独立的变量,而这些变量又处于同一个缓存行时就会影响彼此的性能。这就是伪共享。......原创 2022-08-26 16:45:38 · 593 阅读 · 0 评论 -
那些年你啃过的ConcurrentHashMap
有的童鞋在看Juc这一块的时候会去背诵源码,将方法的调用链都讲的头头是道,我认为没有必要,相反面试官可能会觉得你过于抽象,背的这么清楚。并发的核心在于如何用手段去解决可能遇到的安全问题,并且让它更高效点,面试的目的也是为了体现你思维能力。原创 2022-08-21 17:30:57 · 198 阅读 · 0 评论 -
输入URL之后会执行什么流程?
这个问题无论是面试还是我们在学习的过程中都算是一个老生常谈的问题,可是我看了不少人的回答感觉还是不够全面,今天带着大家一起来梳理一下。在浏览器中输入 URL 之后,它会执行以下几个流程:1.执行 DNS 域名解析;2.封装 HTTP 请求数据包;3.封装 TCP 请求数据包;4.建立 TCP 连接(3 次握手);5.参数从客户端传递到服务器端;6.服务器端得到客户端参数之后,进行相应的业务处理,再将结果封装成 HTTP 包,返回给客户端;......原创 2022-08-15 16:02:55 · 5412 阅读 · 0 评论 -
美团后端笔试2022.08.13
昨天刚刚笔试结束,然后今天抽空给大家整理一下,然后简单说一下思路。整场笔试下来,整体难度一般,只不过在第三题扑克牌游戏的时候进行的不是很顺利,附加题难度一般,不知道有没有小伙伴和我一样时间耗费在第三题上面的。...原创 2022-08-14 21:01:46 · 10938 阅读 · 5 评论 -
别再用 offset 和 limit 分页了,性能太差!
随着业务的扩增,用户使用也在呈井喷式增长,不需要担心数据库性能优化问题的日子已经一去不复返了。当然,很多人都是使用的如:PageHelper、MP等插件,他们也是将分页语句替我们加进去罢了,其本质还是limit分页。对于简单的小型应用程序和数据量不是很大的场景,这种方式还是能够“应付”的。如果你想从头开始构建一个可靠且高效的系统,在一开始就要把它做好。今天我们将探讨已经被广泛使用的分页方式存在的问题,以及如何实现高性能分页。...原创 2022-08-09 20:54:54 · 1688 阅读 · 0 评论 -
337. 打家劫舍 III
打卡!!!每日一题今天给大家带来一道经典的动态规划题目:打家劫舍系列。题目描述:337. 打家劫舍 III示例:这道题,我们首先要找到一个突破口,如果我们从根节点来出发,那么到底要不要偷根节点,我们无从判断,因为其受制于子节点,所以我们需要找一个不受制于任何一个结点的结点来下手,很明显,叶子节点最适合不过了,因为从叶子开始,其后继结点为空。同时我们用一个数组来保存每一个结点的盗窃情况[select,notSelect],即偷和不偷对应的金额。如果想先遍历叶子节点,在遍历根节点,很明显后序遍历在合适不过了。原创 2022-08-09 00:38:42 · 560 阅读 · 0 评论 -
一文带你彻底了解synchronized 和 Lock
synchronize在语义上很清晰,可以进行很多优化,有适应自旋,锁消除,锁粗化,轻量级锁,偏向锁等等。的时候,是会消耗CPU资源的。所以自旋必须要有一定的条件控制,否则如果一个线程执行同步代码块的时间很长,那么等待锁的线程会不断的循环反而会消耗CPU资源。在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时Lock的性能要。在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。...原创 2022-08-08 00:56:15 · 2332 阅读 · 0 评论 -
287.寻找重复数
所以我们在重新一个指针finder指向起始位置,让慢指针从相遇位置一步一步的往前走,刚好会在环的入口处相遇,因为在finder指针刚好走a步的时候,慢指针走了(k-1)L+c步,而(k-1)L相当于绕环走了若干圈又回到和快指针相遇的位置,而c步又刚好回到环的入口。给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。很明显这个链表是有环存在的,这是因为重复元素所导致的,所以解决本题的关键就是找到这个链表的。......原创 2022-08-05 15:23:11 · 277 阅读 · 0 评论 -
token 过期后,如何自动续期?
JWT token的 payload 部分是一个json串,是要传递数据的一组声明,这些声明被JWT标准称为claims。除了以上标准声明以外,我们还可以自定义声明。下面代码片段实现了生成一个带有过期时间的token。JWT设置了过期时间以后,一旦过期,那么接口就不能访问了,需要用户重新登录获取token。如果经常需要用户重新登录,显然这种体验不是太好,因此很多应用会采用token过期后自动续期的方案,只有特定条件下才会让用户重新登录。......原创 2022-08-04 12:44:13 · 3959 阅读 · 0 评论 -
既然有 HTTP 协议,为什么还要有 RPC
纯裸 TCP 是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界。于是就有了各种协议,HTTP 和各类 RPC 协议就是在 TCP 之上定义的应用层协议。RPC 本质上不算是协议,而是一种调用方式,而像 gRPC 和 Thrift 这样的具体实现,才是协议,它们是实现了 RPC 调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时 RPC 有很多种实现方式,不一定非得基于 TCP 协议。...原创 2022-08-02 22:37:01 · 675 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
两个节点在同一侧的话,我们需要用一个Hash表存储每个节点的所有父节点,然后获取p,q的父节点列表,因为我们需要层数最深的父节点,所以我们可以考虑采用中序遍历二叉树,这样的话层数最深的结点就会在链表的前面。百度百科中最近公共祖先的定义为“对于有根树T的两个节点p、q,最近公共祖先表示为一个节点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。今天给大家带来一道树类型的题目,也是一道比较经典的深度优先遍历的题目。判断是否在树的两侧,我们只需划分左右子树即可。...原创 2022-08-02 13:15:35 · 216 阅读 · 0 评论 -
221. 最大正方形
本题思路很简单,直接暴力解决,两个for循环遍历,一直遍历到最右下的结点,然后找到一个面积最大值,由于时间复杂度太高,也对不起我们的智商(PS听我吹吹牛就算了,在真正笔试或者面试的时候一定要用最快的速度解决出来,只要能AC就是厉害),下面我们讨论一下动态规划的解决办法。如果D的边长取A的边长+1,即D的边长=4,那么其组成的大正方形,一定包含E区域,这就不合理了,因为题目要求的是我们的正方形必须全部为1。我们定义dp[i][j],表示以(i,j)为右下角的,且只包含1的正方形的边长最大值。......原创 2022-07-30 23:55:29 · 206 阅读 · 0 评论 -
一文带你玩转offer-01
时间轮一种用来存储定时任务的环状数组。环形数组遍历环形数组的指针首先要定义一个固定长度的环形数组,然后数组的每一个元素代表一个时间刻度,假设每个刻度之间的间隔是1s,那么长度为8s的数组就代表8秒钟。然后就是需要有一个指针,那么这个指针是按照顺时针的方向,无限的循环这个数组,每隔一个最小的时间单位就前进一个数组的索引,那么这个指针完整的转一圈的话就代表8秒钟,转一圈的话就代表16秒钟,假设从0点0分0秒开始,转一圈之后就到了0点0分9秒httpshttpshttpshttps。...............原创 2022-07-30 00:33:29 · 693 阅读 · 0 评论 -
207.课程表
在了解什么叫拓扑序列之前,我们需要先知道数据结构中的图,其图分为有向图和无向图。而在有向图中,如果该图中存在环,则此图将不会有拓扑序列给定一个包含n个节点的有向图G,我们给出它的节点编号的一种排列,如果满足对于图G中的任意一条有向边(u,v),u在排列中都出现在v的前面。如何构造出拓扑序列从上图可以看出,拓扑排序就是依次去找入度为0的结点,所以一旦一个有向图中存在环的话,就像下图所示有向有环图。......原创 2022-07-28 16:17:37 · 261 阅读 · 0 评论 -
152. 乘积最大子数组
给你一个整数数组nums,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。在上面的这个过程中,我忽略了负值的情况,也就是说前面可能是负值,后面又乘了一个负值之后,就会变成一个较大的值。刚开始看到这道题,对其很是轻蔑,想着这不就是一道很入门的动态规划题目吗,还是老规矩,找状态转移方程。则有dp[i]=max{nums[i],nums[i]*dp[i-1]}即dp[i]表示到第i个结点对应的最大连续子数组的乘积。初始值dp[0]=nums[0]=2;......原创 2022-07-25 14:40:15 · 702 阅读 · 0 评论 -
排序算法—归并排序
注意一般而言,对于N个元素进行k路归并排序时,排序的趟数m满足k^m=N,从而m=logN,又考虑到m为整数,所以m=「logN]。,先看下图,体会一下归并排序的过程。归并的含义是将两个或两个以上的。所谓2路归并是指两两合并。...原创 2022-07-23 19:19:06 · 299 阅读 · 0 评论 -
141.环形链表
打卡!!!每日一题今天给大家分享一道链表类型的题目,题目很简单,主要是处理的方法,本文主要有两道题,带着大家由第一道题过渡到第二道题目。原创 2022-07-22 14:28:39 · 170 阅读 · 0 评论 -
private修饰的方法可以通过反射访问,那么private的意义是什么?
Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,如果不通过getset方法的方式,那么如何去访问这些设为private类型的方法或者属性呢?但是仍然无法访问私有化的构造方法,普通方法,和私有属性,此时我们可以使用他们继承父类(AccessibleObject)中的setAccessible()方法,来设置或取消访问检查,以达到访问私有对象的目的。答案是有的,这就是java反射带来的便利。...原创 2022-07-21 23:16:29 · 403 阅读 · 0 评论 -
121. 买卖股票的最佳时机
设计一个算法来计算你所能获取的最大利润。若prices[i]=min,计算第i天的收益dp[i]=price[i]-min;说明o(n^2)的时间复杂度不行,我们就只能乖乖的去思考其动态规划的思想了。后面为继续为大家每日分享一题,也欢迎大家一起来打卡,共同进步!最后我们找出dp[i]中的最大值。......原创 2022-07-21 10:55:59 · 134 阅读 · 0 评论 -
带你彻底认识String
很明显两个之间的引用不是指向同一个地方,我在上面也提到了,不知道大家有没有注意,使用newString创建String时会先在堆上创建字符串对象,驻留到字符串常量池,并将字符串的引用压入操作数栈,所以在将字符串驻留到常量池时发现已经有ABCD这个字符串,于是直接返回ABCD的地址,但是这个地址只是保存在堆中,栈里存放的还是堆里创建的对象地址。最后,当执行Strings2="Hydra"时,发现字符串常量池中已经驻留这个字符串,直接返回对象的引用,因此s1和s2指向的是相同的对象。.........原创 2022-07-20 00:25:11 · 296 阅读 · 0 评论 -
101. 对称二叉树
全部符合对称的要求,则说明第三层是对称的,如果还有第三层、第四层、第五层…我们依此逻辑继续向下判断即可。第二层右侧的2这个节点,其右节点=3;我以题目中的示例1为例,第二层左侧的2这个节点,其左节点=3;给你一个二叉树的根节点root,检查它是否轴对称。是否轴对称,其实就是让我们判断左右两边的子树是否相等。第二层左侧的2这个节点,其右节点=4;第二层右侧的2这个节点,其左节点=4;今天给大家分享一道递归类型的题目。在深入一点,其实就是让我们判断。代码(PSJava版)...原创 2022-07-18 14:47:43 · 198 阅读 · 0 评论 -
96. 不同的二叉搜索树
于是G(n)=G(0)*G(n-1)+G(1)*G(n-2)+G(2)*G(n-3)+…+G(n-1)*G(0)比如我们的n=7,i=3,则对应的结点序列为[1,2,3,4,5,6,7]以i为根节点,则其左子树结点个数为i-1,右子树结点个数为n-i。则有G(n)=f(1)+f(2)+f(3)+…我们先假设n个结点对应的二叉搜索树的个数为G(n);记f(i)表示为以i为根的二叉搜索树的个数。则f(i)=G(i-1)*G(n-i)右子树的结点有[4,5,6,7]上面的dp就是我们的G(n)...原创 2022-07-17 16:57:50 · 185 阅读 · 1 评论 -
64. 最小路径和
打卡!!!每日一题今天来一道经典的动态规划题目题目描述:题目示例:我们分析一下:由于路径的方向只能是向下或向右,因此会有以下几种情况:我们记dp[i][j]表示到[i,j]的最小路径值是不是很简单了,我们看看代码(PS:Java版)...原创 2022-07-14 16:09:27 · 145 阅读 · 0 评论 -
一文梳理Dubbo常见面试问题
随着分布式的发展,也演变出一些很出色的分布式架构,如Spring Cloud、Dubbo等;今天带着大家一起来看看Dubbo有哪些常见的问题。在了解一些定义之前,大家可以实操一下,去真实的感受一下Dubbo的开发流程,这些在往下看这些问题时可能感悟更深一些。大家可以先通过这篇文章去跟着简单的实操一下:《springBoot集成dubbo》相关文章推荐:下面我们回到正题Dubbo是一个基于分布式的远程调用框架,通过Dubbo,开发者能像调用本地方法一样调用部署在远端机器上的方法。而RPC是Remote P原创 2022-07-11 23:23:36 · 471 阅读 · 0 评论