- 博客(78)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 通俗理解java的可见性、有序性和原子性
话不多说,先上一张图没错,我们今天聊的东西,跟他没啥关系。上面这是java的内存结构(我就是忽悠你们来的)。今儿主要先聊一聊java的内存模型(嗯,也不是非想跟你们聊,主要是标题得从这玩意儿来引出)。但是也不能干聊不是?想起兄弟们曾经对我灵魂的拷问(无图言屌),所以我就又从网上盗了一张图。来来来,看图说话:java真·内存模型java中所有的变量都是存在主内存里的。各自的线程在工作的时候会自己拿到一块工作内存。里面保存了该线程用到的变量的副本。线程对变量的操作,都是对自己工作内存中
2020-09-29 21:32:36
1134
2
原创 记录一个坑: java.io.FileNotFoundException
今天在公司撸代码的时候, 有一个需求是去远端服务器下载到本地之后,然后读取本地下载的文件,然后进行操作, 代码如下:然后就提示:然后我看了下 文件是真实存在的,路径也是对得, 咋回事 ,百撕不得骑姐后面仔细一想路径没有问题,那么一定是出现在文件名称上 哎 一看文件名称也是对的,然后显示下文件的后缀名看下: 原来的文件夹后缀名选择默认是不展示的, 我在创建文件的时候加了个后缀名.txt, 本来是test.txt 现在是test.txt.txt ,真是离谱他妈给离谱他家开门,离谱到家了 ...
2022-06-07 20:44:23
5660
2
原创 关于雪花算法id冲突的思考&解决思路
标识位的获取依赖 Mac 地址和进程 PID,虽然能做到尽量不重复,但仍有小几率标识位如何定义才能不重复?有两种方案:预分配和动态分配预分配应用上线前,统计当前服务的节点数,人工去申请标识位这种方案,没有代码开发量,在服务节点固定或者项目少可以使用,但是解决不了服务节点动态扩容性问题动态分配通过将标识位存放在 Redis、Zookeeper、MySQL 等中间件,在服务启动的时候去请求标识位,请求后标识位更新为下一个可用的通过存放标识位。
2022-06-01 19:47:21
3111
原创 Lamdba表达式(四)创建Stream的方式
1.Stream关注的是对数据的运算,与CPU打交道 2. ①Stream自己不会存储元素 ②Stream不会改变源对象,相反,他们会返回一个持有结果的新stream ③操作是延迟执行的, 这意味着他们会等到需要将结果的时候才会执行 3. Stream 执行流程 ①:Stream的实例化 ② 一系列的中间操作(过滤,映射........) ③终止操作 4.说明: 4.1 一个中间操作链,对数据源的数据进行处理
2022-05-09 22:25:52
157
原创 Lamdba表达式(三)—方法引用&构造器引用&数组引用
一: 方法引用的使用 1.使用情境:当要传递给lamdba体的操作,已经有了实现的方法了,可以使用方法引用 (说白了 也就是lamdba体的代码, 已有现有方法了, 那么就可以用现有的方法进行替换) 2.方法引用,本质上也是lamdba表达式,而lamdba表达式作为函数式接口的实例,所以方法引用 也是函数式接口的实例。 3.使用格式 : 类(或对象):: 方法名 4. 具体分为如下的三种情况: 对象 ::非静态方法 类 ::静态方法
2022-04-17 12:34:53
402
原创 Lamdba表达式内置的4大核心函数式接口
java 内置的4大核心函数式接口 消费型接口Comsumer<T> void accept(T,t) 供给型接口Supplier<T> T get() 函数型接口Function<T,R> R apply(T t) 断定型接口 Predicate<T> boolean test(T t)
2022-04-17 12:25:28
451
原创 Lamdba表达式(一)
lambda表达式的使用 1.举例 (o1,o2)->integer.compare(o1,o2) 2.格式: -> :lamdba操作符或者 箭头操作符 -> 左边: lamdba形参列表(其实就是接口中的抽象方法的形参列表) -> 右边: lamdba体 (其实就是重写的抽象方法的方法体) 3. lamdba表达式的使用(分6种情况介绍) 总结: ->左边: lamdba形参列表的参数类型可以省略(类型推断);如果lamdba形参
2022-04-12 21:26:22
413
原创 spring的bean工厂准备工作-自定义属性编辑器
1.自定义实现了ProperEditorSupport接口的编辑器2.让spring能够识别到此编辑器,自定义实现一个属性编辑器的注册器, 实现了PropertyEditorRegistor接口3.让spring能够识别到对应的注册器beanFactoryProstProcessor:执行后置处理器
2021-12-09 07:03:24
323
原创 nginx:改变URL,不触发重定向
nginx 修改URL,不重定位 ;rewrite ^(.*) api-gateway$1 break; proxy_pass http://uc_login_state_new;
2021-11-24 20:59:08
6173
原创 Linux环境变量的加载顺序
先上结论:/etc/profile->~/.bash_profile -> ~/.bashrc->/etc/bashrc->~/.bash_logout注: 后面的变量会覆盖前面顺序的变量/etc/profile:这个文件预设了几个重要的变量,例如PATH, USER, LOGNAME, MAIL, INPUTRC, HOSTNAME, HISTSIZE, umask等等。/etc/bashrc:这个文件主要预设umask以及PS1。这个PS1就...
2021-11-14 13:24:59
1486
原创 Gradle入门(二)gradle构建脚本
println 'this is my outside gradle'task firstgvy{ println 'this is my inside gradle' doLast{ println 'this is my first gradle' } }Gradle构建脚本用来处理两件事情:一个是项目,另外一个就是任务每个Gradle生成表示一个或者多个项目。一个项目表示一个JAR或者WEB应用程序,也肯能表示由其他项目产生的JAR文件组装的ZI.
2021-09-25 17:00:54
456
原创 gradle安装
前提安装gradle先提前安装好java :1. 进入到逛网Gradle Build Tool进去下载最新的版本( complete 完整的版本)下载完成之后进行解压,并在在环境变量中配置bin目录:然后在cmd中查看版本, 如果显示版本则说明安装成功大功告成...
2021-09-25 15:49:47
487
原创 Spring源码解析-refresh(二)-obtainFreshBeanFactory方法之自定义定义标签
上一篇文章中我们介绍了loadBeanDefinitions的对beanDefinition的加载工作,本次我们将研究其更深层次,如何解析自定义标签。解析文件的过程:1.加载spring.handlers配置文件2.将配置文件内容加载到map结合中3.根据指定的key去获取对应的处理器如果需要自定义标签的话,需要做一下的步骤创建一个对应的解析处理器类创建一个普通的spring.handlers配置文件,让应用程序能够完成加载工作。 protected void loadBeanDefin
2021-09-20 21:36:31
108
原创 Spring源码解析-refresh(二)-obtainFreshBeanFactory方法
总结一句话:告诉子类刷新内部bean工厂进入到obtainFreshBeanFactory可看到有两个方法:protected ConfigurableListableBeanFactory obtainFreshBeanFactory() { refreshBeanFactory(); return getBeanFactory(); }我们先研究refreshBeanFactory()方法:/**此实现执行此上下文的底层 bean 工厂的实际刷新,关闭先前的 bean.
2021-09-12 22:53:25
211
原创 linux中cd / cd~ 区别
区别:cd/ 进入根目录cd ~ 进入用户主目录扩展:cd 进入用户主目录 cd - 返回进入此目录之前所在目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd !$ 把上个命令的参数作为cd 参数使用 cd. 当前目录...
2021-09-09 16:28:16
3367
原创 Spring源码解析-refresh()-prepareRefresh方法
d往后我们进入到refresh方法内部进去处理 @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { //准备此上下文以进行刷新 prepareRefresh(); // Prepare the bean factory for use in this context
2021-09-06 23:05:47
273
2
原创 spring源码-前置篇setConfigLocations(二)
上一篇进行了 super()方法的解析, 本篇进入到setConfigLocations一句话概括就是加载配置文件信息public ClassPathXmlApplicationContext( String[] configLocations, boolean refresh, @Nullable ApplicationContext parent) throws BeansException { super(parent); setConfigLocations(con.
2021-08-31 21:34:44
402
原创 关于对JVM的相关知识总结
以下的内容是自己看书和平时总结得来的,记录下,以便以后好复习jvm的内存结构:jvm是按照运行时的存储结构来划分内存结构的。可以分为如下六种:1.PC寄存器数据:用于保存当前正在执行的程序的内存地址。也就是记录着当前线程执行到了哪里。2.Java栈:创建一个线程的时候就会创建一个对应的Java栈,一个栈中会含有多个栈帧,其中每创建一个方法就会创建一个栈帧,栈帧当中含有一些内部变量(方法内定义的变量),操作栈和方法返回值等信息。3.堆:存储Java对象的地方,堆时被所有Java现成共享的,由此引出Ja
2021-01-21 20:44:25
134
原创 shell脚本&post请求
在我们做需求的时候,经常需要调用别的需求的接口,但是由于我们测试是在测试环境上的,和生产的环境还是有点区别的, 因为在伤心的时候我们需要去生产环境去验证别人的接口是否能够调的通,网络策略是否畅通,因此用到了shell的脚本如下是实例:post请求:#!bin/shcurl 'http://127.0.0.1/demo/test' -X POST --header 'content-type:application/json' --header 'userName:test' --header 'pas
2020-12-02 21:24:19
8421
原创 简单易懂理解债券
1.何为债券:引子:平常生活中,如果我们会遇到手头上比较紧的时候,这个时候我们就会通过去找别人借钱的方式去度过难关,比如我向隔壁老王借钱,说好了借钱一万,一年之后还一万一千, 空头无凭,于是约定打了个借条:写着啥时候借钱,借钱一万,一年之后还款一万一千。那么来了,债券就是标准化的借条,里面明确的规定了借钱的金额,借钱的利息,多久之后还钱;利息是多少,是单息还是复息。2.债券如何赚钱:2.1.票面利息: 约定好债券到期的利息: 如预定好 借款一万,到期后的利息是10% ,则利息是1000块钱。2.2
2020-09-23 22:57:50
2682
原创 NotePad++使用技巧:打开多个文件,搜索文件内容去重
NotePad++使用技巧:打开多个文件,搜索文件内容去重一级目录三级目录前言notepad++ 安装前置工作好戏开始批量打开文件find what we need数据去杂数据去重(wps 去重复项)额外加工(wps分列)一级目录三级目录前言在工作中需要查找文件中的某个内容,并且进行去重,网上找了下发现我们可以用notePad++ ,可以很轻松的做到, 周末了整理处理下,小白式的教程,希望能帮助到其他人。notepad++ 安装就是这货,在我们开发过程中 很好的编辑工具。如果自己没有安装的,
2020-09-12 18:57:24
10256
原创 强引用、软引用、弱引用、幻象引用通俗理解
强引用、软引用、弱引用、幻象引用通俗理解通俗理解状态转换关系各状态详解强引用(StrongReference)软引用(SoftReference)弱引用虚引用总结:鸣谢之前忙于工作,都没有好好地去研究基础的知识,周末挤出点时间去了解下:通俗理解强引用、软引用、弱引用、幻象引用的区别,其实这是三个区别,我们可以通俗的理解:形象的比喻:强引用就像大老婆,关系很稳固。软引用就像二老婆,随时有失宠的可能,但也有扶正的可能。弱引用就像情人,关系不稳定,可能跟别人跑了。幻像引用就是梦中情人,只在梦里
2020-09-05 18:40:37
546
原创 通过“控制面板-程序和附件“查看程序安装位置(终极篇)
网上有很多查找安装目录的不教程,不外乎是通过快捷方式或者软件来帮忙的,但是如果的快捷方式都不见了,就很难找到了。右键点击名称会出来选项,在其它里找到位置,勾上后就会在后面多出位置一项,这一项就能看到程序安装的位置注: 标准的程序一般都可以显示出来,有一些比如vc++运行库等可能在系统的关键位置,就不会显示出来。下面是操作过程的截图:1.打开控制面板,在名称栏右键:参考链接:https://blog.csdn.net/qq_38161040/article/details/87994208喜
2020-08-31 23:26:53
14772
3
原创 sql常用指令-必须懂的命令
Show databases : 查看MySQL中有多少个数据库Use databaseName : 使用指定数据库Show tables : 查看指定数据库中有多少张表Select version() : 查看数据库的版本Select now() : 查看数据库所在服务器详细时间Select Current_Date : 查看日期Select Current_Time
2020-08-29 22:12:25
301
原创 Exception和Error的通俗理解
1.两者关联:都是Throwable的子类。2.不同点:Exception:表示可恢复的异常, 又可细分为可检查异常: 比如在代码中显示的使用try catch必行捕获的代码,或者使用throws不可检查异常:在代码运行中才可能知道的异常,比如nullpointExcetionERROR:不可恢复的异常,比如内存溢出。3. 如何避免:对于Exception :在使用try catch 语句的时候,保持范围最小的原则, 因为如果发生了异常的时候,需要存储快照, 如果频繁发生异常的话, 会暂用很
2020-08-29 22:09:39
430
原创 对Java运行过程的理解
“一次编译、到处运行”说的是Java语言跨平台的特性,Java的跨平台特性与Java虚拟机的存在密不可分,可在不同的环境中运行。比如说Windows平台和Linux平台都有相应的JDK,安装好JDK后也就有了Java语言的运行环境。其实Java语言本身与其他的编程语言没有特别大的差异,并不是说Java语言可以跨平台,而是在不同的平台都有可以让Java语言运行的环境而已,所以才有了Java一次编译,到处运行这样的效果。严格的讲,跨平台的语言不止Java一种,但Java是较为成熟的一种。“一次编译,到处运行”
2020-08-20 22:12:58
267
原创 CPU上下文切换(上)
什么是CPU上下文?CPU上下文:CPU寄存器和程序技术器CPU寄存器:CPU内置的容量最小、但速度极快的内存。程序计数器:用来存储CPU正在执行的指令位置,或者即将执行的下一条指令的位置。结构如下:CPU上下文切换是什么意思?CPU上下文切换:指将前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来(保存在系统内核中),然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所值的位置,运行新任务。什么是进程上下文切换?什么是系统上下文切换?进程上下文切换
2020-08-06 08:10:05
568
原创 Linux基础篇:如何理解平均负载
细细回想,已经在代码的世界混了四年多,对linux的使用还是属于基础的部分,终于下定决心去系统得深入学习linux的性能优化方面的知识。我们经常使用top命令来查看机器的使用情况,但是有时候还是对平均负载和CPU使用率的定义还是觉得疑惑。平均负载:指的是单位时间内,系统处于可运行状态和不可运行状态的平均进程数...
2020-07-29 07:09:43
202
原创 (转)MyBatis 配置文件 与 约束
1、MyBatis 主配置文件 mybatis.xml下面展示一些 内联代码片。<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 这里写配置内容 --&g
2020-07-15 06:44:33
275
原创 碰上了maven依赖冲突,如何解决
解决方案解决方案: 以idea 操作为例, 打开maven依赖的图,确定要使用的jar的版本,将冲突的jar包给excludemaven版本以来的缘由. 软件工程是多人合作的结果,我们在开发软件的时候经常会使用一些别人编写好的,比较成熟的库。 比如,早期的前端开发用到了 jQuery库,那么通常的做法是去官网下载一个最新版本的jQuery,然后放在自己本地的项目中。对于简单的前端项目来说,这样可以简单粗暴地达到目的。但当项目越来越庞大,除了 jQuery之外,你还会依赖一些其他的第三方库。比如
2020-06-05 07:02:08
1082
原创 SpringBoot线程池的创建、@Async配置步骤及注意事项(转)
转)前 言:最近在做订单模块,用户购买服务类产品之后,需要进行预约,预约成功之后分别给商家和用户发送提醒短信。考虑发短信耗时的情况所以我想用异步的方法去执行,于是就在网上看见了Spring的@Async了。但是遇到了许多问题,使得@Async无效,也一直没有找到很好的文章去详细的说明@Async的正确及错误的使用方法及需要注意的地方,这里简单整理了一下遇见的问题,Spring是以配置文件的形式来开启@Async,而SpringBoot则是以注解的方式开启。ps:线程池配合定时任务效果绝佳:https:
2020-05-21 06:48:00
1000
原创 简单明了介绍java修饰符
关于修饰符的理解在Java中常用的修饰符主要有default,proteced,private,public,很多人在写业务代码的时候,对合理使用修饰符都不太在意,都是统一得使用public,导致方法或者变量的范围过大,从而导致在代码调整的时候,无法准确判断代码的边际,从而举步维艰,因此我们必须合理的使用修饰符首先是default修饰符 在常规的情况下,我们是不用写的,其默认范围是default:默认修饰符,保护属性,在本类及其子类中可以使用protected属性:作用域本类及其包下priva
2020-05-20 07:09:27
263
原创 关于kafka消费能力的思考
在我们的开发过程中,会经常遇到kafka消费能力低,导致消费堆积的问题,kafka默认的消息保存有效期是7天,7天后消息自动过期(无论是否消费),此时我们可以通1)加大处理线程数量 或者起多节点去消费 2 )优化处理逻辑,提高处理效率这个提高kafka消费能力的方法,百度上已有很多博客有讲,我就不在写出来了。但我要说的是另一个方面:kafka消费降速缘由:公司的kafka消费工程一直在消费,但是业务时不时更新用户数据,导致在用户高峰期突然丢过来千万基本kafka消息,导致kafka消费,影响到了正常
2020-05-09 20:32:51
1565
原创 阿里巴巴编码规范&试题
不知不觉已经在Java领域搬了四年砖,在撸业务代码的过程中,发现了形形色色的代码,形形色色的代码风格,各种各样的坑;<图片:压力山大>,后面慢慢的发现代码需要有统一的规范: 如常用变量要抽成枚举;静态变量大写等等;后来不经意间发现阿里巴巴代码规范,为此去看了一波,受益良多,为此推荐大家去学一波,最好通过考试。...
2020-05-07 23:00:21
5400
6
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人