- 博客(403)
- 收藏
- 关注
原创 java 代码优化 双层嵌套for循环
这其实就是时间复杂度,for循环嵌套for循环,就好比 循环每一个 user ,拿出 userId 需要在里面的循环从 userMemo list集合里面 按顺序去开盲盒匹配,拿出第一个,看看userId ,拿出第二个,看看userId ,一直找匹配的。相当于拿到userId 想去开盲盒的时候, 根据userId 这个key hash完能直接找到数组里面的索引标记位, 如果底下没链表(有的话O(logN)),直接取出来就完事了。按照目前以JDK8 的hash算法,起hash冲突的情况是非常非常少见了。
2024-03-27 14:42:38 430
原创 LINUX磁盘挂载(centos磁盘挂载)
Last sector,+sectors or +sizefk,M,G) (2048-419430399,default 419430399): # 默认回车。Command (m for help): #输入n回车,添加新分区,如果需要更多,请输入m回车看帮助。Partition number (1-4): # 输入数字1回车,分区数量。select (default p): # 输入p回车,P的意思是主分区。(操作完分区步骤后,就会看到步骤2的结果)如果没有设备 Boot,就没有挂载磁盘。
2024-03-15 10:51:21 709
原创 大数据组件之Sqoop
1.如果导入的数据表中的数据用逗号隔开,那么fields-terminated-by ',' 不能用',',换成其他的符号格式。3.如果出现脏数据或者null数据,那么增加参数: --hive-drop-import-delims。5.出现一个隐藏性的问题,就是缺少mysql驱动,需要增加驱动,才能进行数据抽取和全量读取。4.数据增量覆盖,增加--hive-overwrite。2.如果在hue中执行,那么用tab键进行分割。1.从源端抽取数据导入到目标端。综上: 主要用来抽取大量数据。
2024-03-08 15:53:28 429
原创 责任链设计模式
责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。图片。
2023-05-25 10:06:23 787 1
原创 SpringCloud 分布式事务组件之Seata
那这个时候你觉得可能会产生什么样的问题呢,其实很简单,这个时候你这个订单要购买的商品库存已经被锁定了,你为了下这个订单用的优惠券,也已经被锁定了,结果呢,你的订单自己本身的数据并没进入数据库,然后还返回一个了异常信息给用户说,本次下单失败。接着seata server发现说,这分布式事务都失败了,那赶紧的,他会通知库存系统和营销系统里的seata框架小兄弟说,兄弟们,赶紧的,把之前插入你们数据库里的undo_log表里的补偿日志拿出来,接着呢,你又调用了营销系统,锁定了优惠券,也O了。
2023-05-04 17:38:58 755
原创 ThreadLocal 适合用在哪些实际生产的场景中?
在这种情况下,每个 Thread 内都有自己的实例副本,且该副本只能由当前 Thread 访问到并使用,相当于每个线程内部的本地变量,这也是 ThreadLocal 命名的含义。因为每个线程独享副本,而不是公用的,所以。
2023-04-28 10:34:14 451
原创 SpringCloudAlibaba的底层原理
大家理解一下SpringCloudAlibaba里面都包含哪些技术组件,在系统里都是用来干什么的,然后再给大家分析一下这些技术底层的原理。首先,假设你们公司有两个系统,咱们就假设是系统A和系统B吧,这俩系统现在的需求就是要让系统A可以发送一个请求给系统B来实现系统间的接口调用,咱们看下面这个图。现在有一个最大的问题,系统A是部署在一台服务器上的,系统B又是部署在另外一台服务器上的,那系统A怎么可能莫名其妙的就知道系统B部署在哪台机器上呢?这就好比说,您在大马路上走着走着,看到一个美女,回家了..
2022-04-25 18:46:35 827
原创 Git中使用 Git 回退
1 简介在使用Git管理自己的代码版本时,由于编译生成的中间文件,Git使用SHA-1算法来对文件进行加密,进而得出来一个40位的十六进制加密字符串。325525d8b1f67b5ddd37956a8a728fd26c4ba5ce但这种算法对于文本文件有效,对于二进制之类的文件则无法正常的进行加密。因此Git版本管理多管理文本文件,而非二进制之类的文件,例如obj文件、.class...
2022-04-18 14:36:42 747
原创 设计模式总结
设计模式是众多软件开发人员经过长时间的试错和应用总结出来的,解决特定问题的一系列方案。现行的部分教材在介绍设计模式时,有些会因为案例脱离实际应用场景而令人费解,有些又会因为场景简单而显得有些小题大做。本文会结合在美团金融服务平台设计开发时的经验,结合实际的案例,并采用“师生对话”这种相对诙谐的形式去讲解三类常用设计模式的应用。希望能对想提升系统设计能力的同学有所帮助或启发。引言话说这是在程序员世界里一对师徒的对话:“老师,我最近在写代码时总感觉自己的代码很不优雅,有什么办法能优化吗?”“嗯,
2022-03-14 21:27:08 785
原创 线程池分析
随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(Thread
2022-03-14 21:15:14 151
转载 RPC(Remote Procedure Calls)远程过程调用
很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单地介绍一下两种形式的C/S架构,先说一下他们最本质的区别,就是RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更胜一筹啦!下面来具体说一说RPC服务和HTTP服务。为什么RPC呢?就是无法在一个进程
2022-03-01 09:33:30 1705
原创 Java中的Set对象去重
前言部分Set<T>去重相信大家一定不陌生,尤其是在Set<String>、Set<Integer>等等,但是在使用 Set<实体> ,在不重写 equals()、hashCode() 方法情况下,直接使用貌似并不能生效。所以想要 Set<实体> 实现去重,核心部分在实体中重写 equals()、hashCode() 方法。如下以 User 实体为例,进行测试。代码部分测试代码:publicstaticvoi...
2022-02-16 22:37:17 4348
原创 ReentrantLock 源码解析
1.初始化 : ReentrantLock reentrantLock = new ReentrantLock();本质上内部默认初始化的是:Sync sync = new NonfairSync();2.reentrantLock .lock() 实质上调用的是sync.lock() ----> nonfairSync.lock() --->{设置state从0--->1的过程 设置当前线程}eentrantLock.unlock() 主要发生两个动作:{设置
2022-01-13 16:36:02 130
原创 Semaphore源码解读
Semaphore 所控制的流量其实就是一个个线程,因为并发工具主要研究的主要对象就是线程时序图 类图: 入队过程: 部分源码文字解读:Semaphore semaphore = new Semaphore(3); //初始化容器解析: 依据面向对象的基本特征: 继承特性如果感觉抽象的话,可以这样去理解: Semaphore当做一个盒子,这个盒子中装的是state,而这个state的大小就是我们用来定义业务逻辑的 并且Semaphore中的state是可以循...
2022-01-13 14:50:02 234
原创 关于接口幂等性以及接口防刷限流的代码
package com.wangzaiplus.test.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Targ...
2022-01-12 16:11:37 159
原创 2021-10-08
序列化是干啥用的?序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播,所以概念上很好理解:序列化:把Java对象转换为字节序列。 反序列化:把字节序列恢复为原先的Java对象。而且序列化机制从某种意义上来说也弥补了平台化的一些差异,毕竟转换后的字节流可以在其他平台上进行反序列化来恢复对象。事情就是那么个事情,看起来很简单,不过后面的东西还不少,请往下看。对象
2021-10-08 15:58:48 112
原创 UML类图以及类与类之间的关系
类图的表示形式我们可以看到类图是使用一个矩形来表现我们的类。最上面是类名,中间是属性,方法在最下面。属性属性的前面我们可以看到有加减号,他们是用来表示这个属性或方法的可见性的。"+"表示public,"-"表示private属性后面的等于号是用来表示属性的默认值的。可见性 名称 :类型 [ =默认值]方法可见性 名称(参数列表) [: 返回类型]返回类型可写可不写比如上图的operation2就没有写返回参数,但是如果可以的话建议都写类与类之间关系..
2021-09-23 15:40:39 764
原创 mysql查询时间段内的数据
先来建表语句:SET FOREIGN_KEY_CHECKS=0;– Table structure for t_userDROP TABLE IF EXISTS t_user;CREATE TABLE t_user (userId bigint(20) NOT NULL,fullName varchar(64) NOT NULL,userType varchar(16) NOT NULL,addedTime datetime NOT NULL,PRIMARY KEY (userId)
2021-07-28 10:38:25 2296
原创 Centos7上安装docker
Centos7上安装dockerDocker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。一、安装docker1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条
2021-07-25 16:41:12 103
原创 java(包括springboot)读取resources下文件方式
1、使用项目内路径读取,该路径只在开发工具中显示,类似:src/main/resources/resource.properties。只能在开发工具中使用,部署之后无法读取。(不通用) File file = new File("src/main/resources/resource.properties"); @Test public void testReadFile2() throws IOException { File file = n...
2021-07-15 11:01:52 618 2
原创 部署java项目演练
1.刚开始部署java项目的流程 1.mvn clean 打包 2.scp 3.nohup java -jar ---2.shell脚本部署https://blog.csdn.net/xiaoyao2246/article/details/936493933.docker容器化部署4.k8s部署
2021-07-14 17:43:06 80
原创 线上CPU飚高(死循环,死锁...)?帮你迅速定位代码位置
在Linux系统中,有一个守护进程(daemon)会定期把buffers中的数据写入的磁盘,也可以使用 sync 命令手动把buffers中的数据写入磁盘。使用buffers可以把分散的 I/O 操作集中起来,减少了磁盘寻道的时间和磁盘碎片top基本使用top 命令运行图:***行:基本信息第二行:任务信息第三行:CPU使用情况第四行:物理内存使用情况buff/cache:buffers 和 cache 都是内存中存放的数据,不同的是,buffers ..
2021-07-12 14:19:22 209
原创 个人感悟
感觉官方和粉丝朋友们的支持,做技术真的挺难的,尤其对我这种小白,一直在探索的路上,摸打滚爬,希望得到高人的指点,听君一席言,胜读十年书.感谢
2021-03-02 17:43:48 106
原创 java异常通俗理解总结
确实是这样的,好多东西由于常时间的业务处理,并没有去总结,导致原本知道这个问题,可能一时半会回答不上来,深有同感啊网易面试要我画异常的结构图,什么是检查异常,什么是非检查异常,我当时的表情是这样的,。我看过,忘了。没办法,继续看,写博客掌握。先来看看异常的结构图,建议你结合JDK一起看。可以看出异常的家族势力庞大,通常我们说的异常是包括exception和error。Exception家族我们恐怕见的不少,但是error家族我们可能就没什么印象了,下面我来说说这两个...
2021-03-02 17:33:45 138
原创 ThreadLocal以及InterThradLocal的深度剖析(转载https://www.toutiao.com/i6885197882979254796/)
Dubbo的一次提交开始故事得从前段时间翻阅 Dubbo 源码时,看到的一段代码讲起。这段代码就是这个:org.apache.dubbo.rpc.RpcContext使用 InternalThreadLocal 提升性能。相信作为一个程序猿,都会被 improve performance(提升性能)这样的字眼抓住眼球。心里开始痒痒的,必须要一探究竟。刚看到这段代码的时候,我就想:既然他是要提升性能,那说明之前的东西表现的不太好。那之前的东西是什么?经过..
2020-10-22 16:32:42 3901 1
原创 跨系统传递 traceId(日志)
" 新项目查日志太麻烦,多台机器之间查来查去,还不知道是不是同一个请求的。打印日志时使用 MDC 在日志上添加一个 traceId,那这个 traceId 如何跨系统传递呢? "1 背景同样是新项目开发的笔记,因为使用的是分布式架构,涉及到各个系统之间的交互这时候就会遇到一个很常见的问题:单个系统是集群部署,日志分布在多台服务器上; 多个系统的日志在多台机器,但是一次请求,查日志更是难上加难。解决方案使用 SkyWalkin...
2020-10-20 10:37:10 6956 2
原创 java8的时间处理
时间是开发过程中必不可少的,相信java8的时间api没出来之前,你们都用过SimpleDateFormat和Calendar,其中的痛苦我不必说,懂得都懂。还好,java8出了新的时间api,并且线程安全,性能更好,代码更加简洁。Calendar操作2.LocalDate:处理年,月,日获取当前日期LocalDate now = LocalDate.now(); //2020-10-05设置日期LocalDate of = LocalDate.of(2020, 10, 5);
2020-10-08 13:45:26 300
原创 Spring事务失效怎么办?
实际项目开发中,如果涉及到多张表操作时,为了保证业务数据的一致性,大家一般都会采用事务机制;好多小伙伴可能只是简单了解一下,遇到事务失效的情况,便会无从下手,溪源此篇文章给大家整理了一下常见Spring事务失效的场景,希望开发过程尽量避免踩坑,造成时间精力的浪费。溪源按照最基本的使用方式以及常见失效场景优先级整理,先简单介绍一下具体失效场景:注解@Transactional配置的方法非public权限修饰; 注解@Transactional所在类非Spring容器管理的bean; 注解@Trans
2020-09-21 16:31:47 1017
原创 Java并发工具类Semaphore源码剖析(转载)
本篇文章的主要内容:1:举例说明Semaphore2:Semaphore的原理剖析3:Semaphore的源码剖析1:举例说明Semaphorepublic class SemaphoreTest { private static Semaphore sh = new Semaphore(3); public static void main(String[] args) { for (int i = 0; i < 10; i++) { int finalI = i; new Th
2020-09-21 16:18:04 192
原创 基于RateLimiter的分布式限流
RateLimiter通过线程锁控制同步,只适用于单机应用,在分布式环境下,虽然有像阿里Sentinel的限流开源框架,但对于一些小型应用来说未免过重,但限流的需求在小型项目中也是存在的,比如获取手机验证码的控制,对资源消耗较大操作的访问频率控制等。本文介绍最近写的一个基于RateLimiter,适用于分布式环境下的限流实现,并使用spring-boot-starter的形式发布,比较轻量级且“开箱即用”。本文限流实现包括两种形式:基于RateLimiter令牌桶算法的限速控制(严格限制访问速度)
2020-09-21 14:04:29 1905 1
原创 基于Redis分布式锁
分布式锁是在分布式环境下(多个JVM进程)控制多个客户端对某一资源的同步访问的一种实现,与之相对应的是线程锁,线程锁控制的是同一个JVM进程内多个线程之间的同步。分布式锁的一般实现方法是在应用服务器之外通过一个共享的存储服务器存储锁资源,同一时刻只有一个客户端能占有锁资源来完成。通常有基于Zookeeper,Redis,或数据库三种实现形式。本文介绍基于Redis的实现方案。要求基于Redis实现分布式锁需要满足如下几点要求:在分布式集群中,被分布式锁控制的方法或代码段同一时刻只能被一个客户端上
2020-09-21 13:42:47 96
原创 Redis持久化RDB和AOF
我们都知道,redis是基于内存的K-V数据库。由于内存是断电易失的,所以redis提供了相应的持久化机制。本篇主要讲解redis提供的RDB和AOF两种持久化方式,以及他们的实现原理。RDBRDB(Redis DataBase)是指把某个时刻内存中的数据生成快照(snapshot),以dump.rdb文件的形式存在磁盘上。RDB每次生成的快照(snapshot)都是redis中的全量数据。生成快照可以由两个命令完成,分别是save和bgsave,先看下这两个命令的描述127.0.0.
2020-09-18 17:35:47 137
原创 Java 线程池队列过饱问题?
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue&...
2020-09-15 14:53:25 348
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人