- 博客(323)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 让你彻底理解Java的值传递和引用传递
学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的说法,做一次考证,以得出信得过的答案。其实,对于值传递和引用传递的语法和运用,百度一下,就能...
2019-08-16 19:02:58
1028
4
转载 聊聊本地缓存和分布式缓存
本地缓存做为一级缓存,分布式缓存做为二级缓存,首先从一级缓存中查询,若能查询到数据则直接返回,否则从二级缓存中查询,若二级缓存中可以查询到数据,则回填到一级缓存中,并返回数据。1、业务网关刚启动时,本地缓存没有数据,读取 Redis 缓存,如果 Redis 缓存也没数据,则通过 RPC 调用导购服务读取数据,然后再将数据写入本地缓存和 Redis 中;:应用中的缓存组件,缓存组件和应用在同一进程中,缓存的读写非常快,没有网络开销。但各应用或集群的各节点都需要维护自己的单独缓存,无法共享缓存。
2023-07-27 17:15:49
524
转载 Redis数据结构
Redis 为什么那么快?除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis 能高效的处理。因此,这次我们就来好好聊一下 Redis 数据结构,这个在面试中太常问了。注意,Redis 数据结构并不是指 tring(字符串)、List(列表)、Hash(哈希)、Set(集合)和 Zset(有序集合),因为这些是 Redis 键值对中值的数据类型,并不是数据结构。这些数据类型的底层实现的方式,才是数据结构。Red
2021-12-03 18:55:40
291
转载 gitlab找回已删除的分支
今天找之前的分支的时候,发现被同事删掉了,该分支上的代码还没上线,处于开发阶段。1,找到该分支的最后一次提交的commitId,在gitlab的activity菜单:2, 在项目代码文件夹中打开git,执行 git checkout -b branchname commitId3, push到远程分支作者:归去来ming链接:https://www.jianshu.com/p/8f8b26484696来源:简书...
2021-11-12 10:29:36
3041
转载 spark 原理简述
1 引言1.1 Hadoop 和 Spark 的关系 Google 在 2003 年和 2004 年先后发表了 Google 文件系统 GFS 和 MapReduce 编程模型两篇文章,. 基于这两篇开源文档,06 年 Nutch 项目子项目之一的 Hadoop 实现了两个强有力的开源产品:HDFS 和 MapReduce. Hadoop 成为了典型的大数据批量处理架构,由 HDFS 负责静态数据的存储,并通过 MapReduce 将计算逻辑分配到各数据节点进行数据计算和价值发现.之后以 HDF
2021-10-26 15:59:56
968
转载 kafka消息中间件面试专题
1.什么是消息中间件? 2.kafka 是什么?有什么作用? 3.kafka 的架构是怎么样的? 4.Kafka Replicas是怎么管理的? 5.如何确定当前能读到哪一条消息? 6.生产者发送消息有哪些模式? 7.发送消息的分区策略有哪些? 8.Kafka 支持读写分离吗?为什么? 9.那 Kafka 是怎么去实现负载均衡的? 10.Kafka 的负责均衡会有什么问题呢? 11.Kafka 的...
2021-10-25 19:30:15
234
转载 openFeign 夺命连环 9 问
今天介绍一款服务调用的组件:OpenFeign,同样是一款超越先辈(Ribbon、Feign)的狠角色。文章目录如下:2、Feign是什么?Feign也是一个狠角色,Feign旨在使得Java Http客户端变得更容易。Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用,只不过对原有的方式(Ribbon+RestTemplate)进行了封装,开发者不必手动使用RestTemplate调服务,而是定义一个接口,在这个接口中标注一个注解即可完成服务调用,这
2021-10-25 18:45:25
297
转载 RocketMQ的分布式事务(半消息事务)
正文回到顶部一、背景RocketMQ的分布式事务可以称为“半消息事务”。回到顶部二、原理2.1原理RocketMQ是靠半消息机制实现分布式事务:事务消息:MQ 提供类似 X/Open XA 的分布事务功能,通过 MQ 事务消息能达到分布式事务的最终一致。半消息:暂不能投递的消息,发送方已经将消息成功发送到了 MQ 服务端,但是服务端未收到生产者对该消息的二次确认,此时该消息被标记成“暂不能投递”状态,处于该种状态下的消息即半消息。半消息回查:由于网络闪断、生产者应用重
2021-10-22 19:02:22
3624
原创 spark api 简单的chrome 翻译
org.apache.spark.api.java接口 JavaRDDLike<T,This 扩展 JavaRDDLike<T,This>> 所有超级接口: java.io.Serializable 所有已知的实现类: JavaDoubleRDD、JavaPairRDD、JavaRDD、JavaSchemaRDD 公共接口JavaRDDLike<T,This extends JavaRDDLike<T,This>> ..
2021-10-09 11:21:20
208
转载 2021-08-30
Kafka中存在大量的延迟操作,比如延迟生产、延迟拉取以及延迟删除等。Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定时器(SystemTimer)。JDK的Timer和DelayQueue插入和删除操作的平均时间复杂度为O(nlog(n)),并不能满足Kafka的高性能要求,而基于时间轮可以将插入和删除操作的时间复杂度都降为O(1)。时间轮的应用并非Kafka独有,其应用场景还有很多,在Netty、Akka、Quartz、Z
2021-08-30 22:18:21
93
转载 JAVA锁的膨胀过程
首先简单说下先偏向锁、轻量级锁、重量级锁三者各自的应用场景:偏向锁:只有一个线程进入临界区; 轻量级锁:多个线程交替进入临界区; 重量级锁:多个线程同时进入临界区。锁膨胀过程:上图跟下面这个解析基本相同:偏向所锁,轻量级锁都是乐观锁,重量级锁是悲观锁。一个对象刚开始实例化的时候,没有任何线程来访问它的时候。它是可偏向的,意味着,它现在认为只可能有一个线程来访问它,所以当第一个线程来访问它的时候,它会偏向这个线程,此时,对象持有偏向锁。偏向第一个线程,这个线程在修改对象头成为偏向锁
2021-08-10 17:44:27
219
转载 为什么开源的RocketMQ没有支持任意精度的延时消息
写在前面在我们日常的开发中,经常会遇到这样"在一段时间之后,触发某一个事件"的业务场景。如:电商平台下单后30分钟不支付订单自动取消 红包24小时不领取自动退还常见的解决方案1.定时扫描事先记录事件的触发时间点,定时任务不停查数据库对比触发时间。这种方式不实时,随着定时任务的执行频率变高,触发实时性会有所提升,但是频繁地扫描增加了数据库的压力,也是最简单的做法。2.jdk的解决方案jdk为我们提供的定时器Timer,延时队列DelayQueue。这种方式在单机,对可靠性要
2021-06-15 17:28:58
579
原创 java代码替换指定url里的参数值
/** * 资源位编码配置 * @param linkUrl * @param rcode * @return */public static String addRcode(String linkUrl, String rcode) { if (StringUtils.isBlank(rcode)){ return linkUrl; } String name="rcode"; if (linkUrl.contains(name)) { .
2021-05-14 17:21:17
820
转载 jmeter压力测试(踩坑)报错:java.net.BindException: Address already in use: connect
最近在写搜索接口服务,写完接口进行压力测试,但是在长期线程较高的进行测试时会报如下错误:排除问题:首先先查看服务器的日志,发现没有报错。然后查看nginx数据,发现请求数和测试发出的请求数不一致,服务器接收到的少,就想到丢失请求。后来经过查找资料了解是windows 机器的问题,原因:windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错。解决办法(在jmeter所在服务器操作):
2021-05-11 11:39:52
755
转载 Cannot assign requested address问题总结
1.背景 最近一个项目中,出现了java.net.ConnectException:Cannotassignrequestedaddress的异常。通过查找资料、分析后,认为是由于程序对外建立新连接,结果本地端口已经用完导致的异常。2.问题原因 为什么会出现这种情况呢?就要从linux的TCP/IP协议栈说起了。 先看一下TCP/IP的状态图:主动关闭连接的一方,连接会处在TIME-WAIT的状态下,需要等2MSL时间后,系统才会回收这条连接,端口才可以继续被使用。...
2021-05-11 11:38:00
4109
1
转载 java8 list转树形结构的方法
定义包含下级权限的对象继承自UmsPermission对象,之增加了一个children属性,用于存储下级权限。/** * Created by macro on 2018/9/30. */public class UmsPermissionNode extends UmsPermission { private List<UmsPermissionNode> children; public List<UmsPermissionNode> g...
2021-04-29 18:03:18
1601
转载 用户提交订单,30分钟还没付款,取消订单功能
订单超时自动取消方案1、数据库轮询小型项目常用方式,通过一个线程去扫描数据库或者数据库定时任务,通过订单时间,判断超时的订单,进行更新状态或者其他操作。2、JDK延迟队列DelayQueue 是一个无界阻塞队列,只有在延迟期满时才从中获取元素,放入DelayQueue中的对象需要实现Delayed接口。ProducerDelay生产者生成一个任务 DelayQueue通过poll()或者take()方法获取超时时间任务。然后到达消费者consumerDelay3、延时消息3、Redi...
2021-04-28 17:34:41
343
转载 final修饰byte类型进行运算的问题
byte类型进行运算的问题。代码片段:原因:java中凡是byte、short、char数据类型的数据在运算的时候都会转换成int类型的数据再运算,此处两个int类型的数值相加,结果赋给byte类型,肯定会报错。解决的办法有两种,我先说第一种,强转再介绍第二种方法之前,我先说个知识点:1.如果进行运算的是两个变量,此时先会根据情况对类型进行提升,然后再进行运算赋值(如上述所说)。2.如果进行运算的是两个常量,此时先计算数值的大小运算,然后再判断是否满足...
2021-04-09 13:50:39
1007
转载 elasticsearch 面试题
前言涵盖各大公司会问到的面试点,同时随着版本的升级,可能也会有一些面试题更新,也会同步保持更新,因为篇幅原因(其实是我懒,哈哈)所以列了一部分答案,所有的答案见下文,总共485页合计20个技术点,文末自取pdf.1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。面试官:想了解应聘者之前公司接触的 ES 使用场景、规模,有没有做过比较大规模的索引设计、规划、调优。解答:如实结合自己的实践场景回答即可。比如:ES
2021-04-01 15:35:00
225
转载 Redis订阅与发布并源码简单分析
订阅与发布Redis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是订阅/发布到频道和订阅/发布到模式, 下文先讨论订阅/发布到频道的实现, 再讨论订阅/发布到模式的实现。频道的订阅与信息发送Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。作为例子, 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— c
2021-03-12 15:39:42
196
转载 Redisson 分布式锁实现分析(二)
上篇Redisson 分布式锁实现分析中提到了RedissonLock中的redis命令都是通过CommandExecutor来发送到redis服务执行的,本篇就来了解一下它的实现方式。先来看其源码public interface CommandExecutor extends CommandSyncExecutor, CommandAsyncExecutor {}可以看到它同时继承了同步和异步(sync/async)两种调用方式。Note: 在分布式锁的实现中是用了同步的 ..
2021-03-12 15:09:14
528
转载 Redisson 分布式锁实现分析(一)
Why 分布式锁java.util.concurrent.locks中包含了 JDK 提供的在多线程情况下对共享资源的访问控制的一系列工具,它们可以帮助我们解决进程内多线程并发时的数据一致性问题。但是在分布式系统中,JDK 原生的并发锁工具在一些场景就无法满足我们的要求了,这就是为什么要使用分布式锁。我总结了一句话,分布式锁是用于解决分布式系统中操作共享资源时的数据一致性问题。设计分布式锁要注意的问题互斥分布式系统中运行着多个节点,必须确保在同一时刻只能有一个节点的一个线程获得锁,这是.
2021-03-12 15:06:34
654
转载 Redis分布式锁-Redisson源码解析
当我们在设计分布式锁的时候,我们应该考虑分布式锁至少要满足的一些条件,同时考虑如何高效的设计分布式锁1、互斥在分布式高并发的条件下,我们最需要保证,同一时刻只能有一个线程获得锁,这是最基本的一点。2、防止死锁在分布式高并发的条件下,比如有个线程获得锁的同时,还没有来得及去释放锁,就因为系统故障或者其它原因使它无法执行释放锁的命令,导致其它线程都无法获得锁,造成死锁。所以分布式非常有必要设置锁的有效时间,确保系统出现故障后,在一定时间内能够主动去释放锁,避免造成死锁的情况。3、性...
2021-03-11 19:59:10
338
转载 Java 程序员的 24 个MySQL面试题
一、为什么用自增列作为主键?1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。2、数据记录本身被存于主索引(一颗B+Tree)的叶子节点上,这就要求同一个叶子节点内(大小为
2021-03-10 18:09:13
150
转载 你在线上怎么修改列的数据类型的
目前业内在线修改表结构的方案,据我了解,一般有如下三种方式一:使用mysql5.6+提供的在线修改功能所谓的mysql自己提供的功能也就是mysql自己原生的语句,例如我们要修改原字段名称及类型。mysql>ALTERTABLEtable_nameCHANGEold_field_namenew_field_namefield_type;那么,在mysql5.5这个版本之前,这是通过临时表拷贝的方式实现的。执行ALTER语句后,会新建一个带有新结构的临时表,将原表数据...
2021-03-10 18:00:52
412
转载 分库分表后如何部署上线
分库分表后如何部署上线引言我们先来讲一个段子面试官:“有并发的经验没?”应聘者:“有一点。” 面试官:“那你们为了处理并发,做了哪些优化?” 应聘者:“前后端分离啊,限流啊,分库分表啊。。” 面试官:"谈谈分库分表吧?" 应聘者:“bala。bala。bala。。” 面试官心理活动:这个仁兄讲的怎么这么像网上的博客抄的,容我再问问。面试官:“你们分库分表后,如何部署上线的?” 应聘者:“这!!!!!!”不要惊讶,我写这篇文章前,我特意...
2021-03-10 17:36:14
116
原创 windows下,charles抓包设置中无网络问题的解决
win10系统下网络配置文件的设置。公用选项改为另外一个选项专用,可以畅通的使用网络还可以选择关闭防火墙 (关闭防火墙容易木马)
2021-03-03 14:23:56
960
1
原创 JAVA读取Excel文件的科学计数类型的解决方法
public static void main(String[] args) { String localFilePath = "D:\\renqun.xlsx"; Collection<Long> userIds = ExcelUtil.excelToListLong(localFilePath, 0, 0); System.out.println(userIds);}public String getHSSTextString(Row row, int co.
2021-03-01 19:48:40
250
转载 分布式缓存与DB秒级一致设计实践(携程)
分布式缓存与DB秒级一致设计实践原创携程技术2021-02-26 17:52:02一、前言爆款项目是2020年携程的一个新项目,目标是将全品类、高性价比的旅行商品统一集合在一个频道供用户选购。出于这样的业务定位,项目有三个特点:1)高流量2)部分商品会成为热卖商品3)承担下单职能那么在系统设计之初,就必须考虑下面两个点:1)如何应对高QPS(包括整体高QPS和个别商品的高QPS),高流量,保障C端用户体验?2)在满足第一点的情况下,如何保障信息的时效性,让用户尽可能看到最
2021-03-01 10:22:20
221
原创 java List转String去掉[ 、]、空格
public static void main(String[] args) { List dd=new ArrayList(); dd.add("111"); dd.add("111"); dd.add("111"); String relationIdStr=StringUtils.strip(dd.toString(),"[]"); System.out.println(relationIdStr); String ddStr=...
2021-02-24 11:32:34
1521
转载 面试系列-分布式事务
对于分布式事务,相信所有人都应该很了解,为什么会有分布式事务?无论是数据量导致的分库,还是现在微服务盛行的场景都是他出现的原因。这一篇内容还是避免不了俗套,主要的范围无非是XA、2PC、3PC、TCC,再最后到Seata。但是,我认为这东西,只是适用于面试和理论的了解,你真要说这些方案实际生产中有人用吗?有,但是会实现的更简单,不会套用理论来实现,大厂有大厂的解决方案,中小公司用框架或者压根就不存在分布式事务的问题。那,为什么还要写这个?为了你面试八股文啊,小可爱。事务要说分布式
2021-02-18 13:30:16
445
转载 面试系列-网络IO
谈一谈你对TCP/IP四层模型,OSI七层模型的理解?为了增强通用性和兼容性,计算机网络都被设计成层次机构,每一层都遵守一定的规则。因此有了OSI这样一个抽象的网络通信参考模型,按照这个标准使计算机网络系统可以互相连接。物理层:通过网线、光缆等这种物理方式将电脑连接起来。传递的数据是比特流,0101010100。数据链路层:首先,把比特流封装成数据帧的格式,对0、1进行分组。电脑连接起来之后,数据都经过网卡来传输,而网卡上定义了全世界唯一的MAC地址。然后再通过广播的形式向局域网内所有电脑发
2021-02-18 13:28:43
149
转载 面试系列-Linux
1.CPU负载和CPU利用率的区别是什么?首先,我们可以通过uptime,w或者top命令看到CPU的平均负载。Load Average:负载的3个数字,比如上图的4.86,5.28,5.00,分别代表系统在过去的1分钟,5分钟,15分钟内的系统平均负载。他代表的是当前系统正在运行的和处于等待运行的进程数之和。也指的是处于可运行状态和不可中断状态的平均进程数。如果单核CPU的话,负载达到1就代表CPU已经达到满负荷的状态了,超过1,后面的进行就需要排队等待处理了。如果是是多核多CP.
2021-02-18 13:27:26
88
转载 面试系列-Spring
1.说说Spring 里用到了哪些设计模式?单例模式:Spring 中的 Bean 默认情况下都是单例的。无需多说。工厂模式:工厂模式主要是通过 BeanFactory 和 ApplicationContext 来生产 Bean 对象。代理模式:最常见的 AOP 的实现方式就是通过代理来实现,Spring主要是使用 JDK 动态代理和 CGLIB 代理。模板方法模式:主要是一些对数据库操作的类用到,比如 JdbcTemplate、JpaTemplate,因为查询数据库的建立连接、执行查询、关
2021-02-18 13:26:26
85
转载 面试系列-Java基础
说好了面试系列已经完结了,结果发现还是真香,嗯,以为我发现我的Java基础都没写,所以这个就算作续集了,续集第一篇请各位收好。等到你们收到这篇文章的时候,公众号读者数量就破4000了,可不是4万,就庆祝下,存稿都发出来了,下周又得肝了!说说进程和线程的区别?进程是程序的一次执行,是系统进行资源分配和调度的独立单位,他的作用是是程序能够并发执行提高资源利用率和吞吐率。由于进程是资源分配和调度的基本单位,因为进程的创建、销毁、切换产生大量的时间和空间的开销,进程的数量不能太多,而线程是比进程更小
2021-02-18 13:25:35
103
转载 面试专题系列-JVM篇
这是面试专题系列第五篇JVM篇。这一篇可能稍微比较长,没有耐心的同学建议直接拖到最后。说说JVM的内存布局?Java虚拟机主要包含几个区域:堆:堆Java虚拟机中最大的一块内存,是线程共享的内存区域,基本上所有的对象实例数组都是在堆上分配空间。堆区细分为Yound区年轻代和Old区老年代,其中年轻代又分为Eden、S0、S1 3个部分,他们默认的比例是8:1:1的大小。栈:栈是线程私有的内存区域,每个方法执行的时候都会在栈创建一个栈帧,方法的调用过程就对应着栈的入栈和出栈的过程。每个栈帧
2021-02-18 13:24:20
85
转载 2021-02-18
你们为什么使用mq?具体的使用场景是什么?mq的作用很简单,削峰填谷。以电商交易下单的场景来说,正向交易的过程可能涉及到创建订单、扣减库存、扣减活动预算、扣减积分等等。每个接口的耗时如果是100ms,那么理论上整个下单的链路就需要耗费400ms,这个时间显然是太长了。如果这些操作全部同步处理的话,首先调用链路太长影响接口性能,其次分布式事务的问题很难处理,这时候像扣减预算和积分这种对实时一致性要求没有那么高的请求,完全就可以通过mq异步的方式去处理了。同时,考虑到异步带来的不一致的问题,我们可以
2021-02-18 13:23:04
98
转载 面试专题系列-Dubbo
这是面试专题系列第四篇,Dubbo系列。Dubbo本身并不复杂,而且官方文档写的非常清楚详细,面试中dubbo的问题一般不会很多,从分层到工作原理、负载均衡策略、容错机制、SPI机制基本就差不多了,最大的一道大题一般就是怎么设计一个RPC框架了,但是如果你工作原理分层都搞明白了这个问题其实也就相当于回答了不是吗。说说Dubbo的分层?从大的范围来说,dubbo分为三层,business业务逻辑层由我们自己来提供接口和实现还有一些配置信息,RPC层就是真正的RPC调用的核心层,封装整个RPC的调用过程
2021-02-18 13:20:48
108
转载 Redis夺命连环11问
说说Redis基本数据类型有哪些吧 字符串:redis没有直接使用C语言传统的字符串表示,而是自己实现的叫做简单动态字符串SDS的抽象类型。C语言的字符串不记录自身的长度信息,而SDS则保存了长度信息,这样将获取字符串长度的时间由O(N)降低到了O(1),同时可以避免缓冲区溢出和减少修改字符串长度时所需的内存重分配次数。 链表linkedlist:redis链表是一个双向无环链表结构,很多发布订阅、慢查询、监视器功能都是使用到了链表来实现,每个链表的节点由一个listNode结构来表示,每个
2021-02-18 13:17:34
110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人