自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 收藏
  • 关注

原创 AQS的应用:基于AQS实现自定义同步器

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等三、基于AQS实现自定义同步器之前学习了这么多关于AQS的原理性的知识,这一期,我们来基于AQS实现一个不可重入的独占锁, 自定义AQS需要重写一系列函数,还需要定义原子变量state的含义。这里我们定义, state=0 表示目前锁没有被线程持有 ,state=1 表示锁己经被某一个线程持有。 由于是不可重入锁,所以不需要记录持有锁的线.

2020-12-24 18:13:16 36 1

原创 AQS——条件变量的支持

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等二、AQS对条件变量的支持1、条件变量之前的推文中,讲解过notify和wait是配合synchronized内置锁来实现线程间同步的,而条件变量的signal和await方法则是通过AQS来实现线程间同步的。两者的不同之处在于:synchronized同时只能与一个共享变量的notify或wait方法实现同步AQS的一个锁可以对.

2020-12-11 18:30:35 47

原创 快速切换Git的用户名和密码,就是这么简单

快速切换Git的用户名和密码,就是这么简单建议使用这种方法,快速简单如果是用https方式clone代码,那么可以通过修改git配置中的用户和邮箱来切换用户:git config --global user.name "xxx"git config --global user.email "xxx@qq.com"...

2020-12-09 13:17:04 114

原创 AQS对锁的底层支持

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、AQS对锁的底层支持AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。1、概述首先看看AQS的类图:其中Node节点的类图是:结合两张图和源码,我们可以知道AQS以及Node的特性:AQS是一个FIFO的双向队列,其内部通过节点he.

2020-11-26 18:23:05 91

原创 锁原理分析系列——LockSupport工具类

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等前面学习了很多Java并发编程的知识,很多知识点都离不开锁的支持,从这期开始,主要讲解一些Java并发包中的锁的原理,让我们来一起揭开它的神秘面纱吧。LockSupport工具类LockSupport是JDK中rt.jar包里的工具类,其主要作用是挂起和唤醒线程,它也是创建锁和其他同步类的基础。LockSupport类与每个使用它的线.

2020-11-25 19:30:35 106

原创 高并发下你还敢用ArrayList?过来看看CopyOnWriteArrayList吧!

​微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、ArrayList线程不安全在Java的集合框架中,想必大家对ArrayList肯定不陌生,单线程的情况下使用它去做一些CRUD的操作是非常方便的,先来看看这个例子:public class ListTest { public static void main(String[] args) { List&lt.

2020-11-21 15:56:10 158 1

原创 浅谈比LongAdder功能更强大的LongAccumulator

一、前言上一期分析了LongAdder的原理,这期我们来学习下比LongAdder功能更强大的LongAccumulator。要是上期LongAdder不记得的同学就再看看这篇:高并发下解决AtomicLong性能瓶颈的方案——LongAdder 来回顾一下~LongAdder是本期要学习的LongAccumulator的一个特例,下面我们一起来探究下LongAccumulator。二、浅谈LongAccumulator1、LongAccumulator的结构如图,LongAccumulator类同

2020-11-16 20:53:11 75

原创 高并发下解决AtomicLong性能瓶颈的方案——LongAdder

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、 LongAdder简介LongAdder类是JDK1.8新增的一个原子性操作类。上一节说到,AtomicLong通过CAS提供了非阻塞的原子性操作,相比用阻塞算法的synchronized来说性能已经得到了很大提升。在高并发下大量线程会同时竞争更新同一个原子变量,但由于只有一个线程的CAS操作会成功,这就造成了大量线程竞争失败后,会通.

2020-11-15 22:42:33 133

原创 JUC中原子操作类原理分析

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、前言java.util.concurrent 包里提供了一系列的原子性操作类,这些类都是使用CAS机制实现的,相当于使用锁实现原子性操作在性能上有了很大的提高。由于原子性操作类的原理都大致相同,所以本文主要讲解AtomicLong类的常用方法的分析。二、原子变量操作类AtomicLongAtomicLong是原子性递增或者递减类,其.

2020-11-12 20:21:32 252

原创 闯祸了,我用了一个‘<>’操作符引发的线上Bug

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、发现问题昨天下午四点多的时候,一位同事找到我说,我所负责的系统中修改机器状态的功能不可用了。我当时是感到非常开心的,因为摸了这么多天的鱼,终于有活干了!于是我在正式环境发了一个请求给出问题的接口,谷歌浏览器按F12,发现接口报错了,Http的返回码是500,很显然这是服务端报错。然后我查看报错的信息,发现:原来报错的原因是:'&.

2020-11-11 16:56:57 89

原创 浅谈Java中的“八锁”——概述、常见实现方式与使用场景

​微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等一、锁锁其实是操作系统中的一个概念。在多线程编程中,操作系统引入了锁机制。通过锁机制,能够保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。所谓的锁,可以理解为内存中的一个整型数,拥有两种状态:空闲状态和上锁状态。加锁时,判断锁是否空闲,如果空闲,修改为上锁状态,返回成功;如果已经.

2020-11-10 19:15:40 124

原创 非计算机科班如何系统学习Java后端开发技术栈

​微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验、生活感悟等大三、大四的同学还可以找我帮忙【虎牙】内推噢。一、前言前不久,也就是国庆期间,我受信科党支部副书记的邀请(因为我是党支部的一名预备党员),给20级的师弟师妹们分享一些就业经验。因为新生入学了,我们党支部要给新生开展入党动员,其中有个环节是关于大学生活的经验分享环节,在现任支部成员里面,我在技术和就业方面还行,所以被邀请到给信科的师弟师妹.

2020-11-07 14:37:27 186

原创 毕业后,选择国企“养老”还是互联网“打工”,我用亲身经历告诉你。

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验等…大三、大四的同学还可以找我帮忙【虎牙】内推噢。一起实习的同学决定回到老家的中国电信今天,一起在同个组里实习的同学准备离职了。离职的原因很简单,一是秋招已经结束,公司的校招HC已经没有了,二是他的岗位性质是无法走内部转正的,实习三个月后即可提出离职。既然这样,对于应届毕业生而言,再花上更多的时间和经历在这里并没有太大的意义。当然,他技术真心不错,.

2020-11-04 19:44:03 290 2

原创 解决多线程间共享变量线程安全问题的大杀器——ThreadLocal

微信公众号:Zhongger我是Zhongger,一个在互联网行业摸鱼写代码的打工人!关注我,了解更多你不知道的【Java后端】打工技巧、职场经验等…大三、大四的同学还可以找我帮忙【虎牙】内推噢。上一期,讲到了关于线程死锁、用户进程、用户线程的相关知识,不记得的小伙伴可以看看:字节跳动面试官问我:你知道线程死锁吗?用户线程、守护线程的概念与区别了解吗?这期,我们来聊一聊一个在Java并发编程中很重要的类:ThreadLocal 在多线程应用程序中,对共享变量进行读写的场景是很常见的。如果不使用.

2020-11-04 19:34:00 211

原创 别只做CRUD程序员,收下这篇操作系统干货(二)——进程管理!

别只做CRUD程序员,收下这篇操作系统干货(二)——进程管理!一、进程的概念1.进程的定义现代操作系统的重要特点是程序的并发执行,及系统所拥有的资源被共享和系统的用户随机地使用。通常,操作系统的重要任务之一是使用户充分、有效地利用系统资源。进程是描述程序的执行过程和作为资源分配的基本单位。2.程序的并发执行(1)程序是一个在时间上按严格次序前后相继的操作序列,是一个静态的概念。(2)程序的顺序执行Repeat IR ← M [pc] pc ← pc+1 〈 Execute (instr

2020-10-08 10:23:10 94

原创 [100%有效]国内访问GitHub很慢或者无法访问的解决办法

1、进入https://fastly.net.ipaddress.com/(全球最好的IP地址查询工具)2、查询 github.com 与 github.global.ssl.fastly.net3、将上面查询到的两个IP写入到C:\Windows\System32\drivers\etc 下的hosts文件中:# Github 140.82.112.4 github.com199.232.69.194 github.global.ssl.fastly.net4、访问

2020-10-05 08:36:55 306 1

原创 IDEA中Maven经常下载Jar包失败,反复出现LastUpdate文件的解决办法

IDEA中Maven经常下载Jar包失败,反复出现LastUpdate文件的解决办法这个问题一直困扰着我,直到我加了这样的参数后,这个问题迎刃而解!-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true...

2020-10-02 16:28:49 487 4

原创 Docker常用命令

Docker常用命令总结1.启动Dockersystemctl start docker2.Docker与MySQL(1)启动MySQL容器 docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql(2)查看Docker中活跃的镜像docker ps -a(3)停止某个镜像docker rm 镜像ID(4)Docker进入MySQLdocker exec -it MySQL启动的镜像I

2020-10-01 09:15:44 1318

原创 Windows10下VirtuaBox安装CentOS7虚拟机

Windows10下VirtualBox安装CentOS7虚拟机1. 下载并安装VirtualBox直接官网下载VirtualBox最新版,安装好即可2. 下载CentOS7http://isoredirect.centos.org/centos/7/isos/x86_64/3.新建虚拟机在新建虚拟机之前,必须开启BIOS64位虚拟化选项,方法为开机进入BIOS界面,在配置选项中将virtualization选项置为enabled,保存并退出。打开VirtualBox,新建虚拟机

2020-09-29 13:17:37 93

原创 别只做CRUD程序员,收下这篇操作系统干货(一)!

别只做CRUD程序员,收下这篇操作系统干货(一)!一、操作系统概念1.计算机系统组成任何一个计算机系统都是由两部分组成:计算机硬件和计算机软件。计算机硬件通常是由中央处理机(运算器和控制器)、存储器、输入设备和输出设备等部件组成。计算机软件包括系统软件和应用软件。系统软件如操作系统、多种语言处理程序( 汇编和编译程序等 )、连接装配程序、系统实用程序、多种工具软件等; 应用软件为多种应用目的而编制的程序。2.操作系统的非形式定义操作系统是计算机系统中的一个系统软件,它是这样一些程序模块的集

2020-09-07 13:07:37 91

原创 内存型数据库Redis,是如何实现持久化的?

内存型数据库Redis,是如何实现持久化的?一、导读Redis是内存数据库,它将字节的数据库状态存储在内存里面,所以如果不想办法将存储在内存里的数据库状态保存到磁盘中,那么Redis服务器进程一旦退出,Redis中的数据库状态也会消失不见…总所周知,Redis实现持久化主要有两种方式——RDB和AOF,本文主要介绍RDB。RDB持久化既可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中,如图1:RDB持久化所生成的RDB文件是一个经过压缩的

2020-09-05 17:53:38 167

原创 学了这么久的Java,你知道Java的特性吗?

Java程序设计概述1996 年 Java 第一次发布就引起了人们的极大兴趣。“ 作为一种计算机语言,Java 的广告词确实有点夸大其辞。然而,Java 的确是一种优秀的程序设计语言。作为一个名副其实的程序设计人员,使 用 Java 无疑是一个好的选择。有人认为:Java 将有望成为一种最优秀的程序设计语言,但还需要一个相当长的发展时期。一旦一种语言应用于某个领域,与现存代码的相容性问题就摆在了人们的面前。”1.Java的几个特性1.1 简单性Java 剔除了 C++ 中许多很少使用、 难以理解、

2020-09-01 18:44:40 78

原创 Java技术栈系统学习系列——前言

Java技术栈系统学习系列——前言转眼,时间就到了九月份,我的大四生活即将开始,大四这一年或许是我比较清闲的一年了。大一期间忙于各种学生组织、社团和活动;大二期间开始沉淀知识,参加各种学科竞赛,也取得了还行的成绩;大三上学期疯狂地刷算法题和看Java实习有关的面经,也写过几篇博客进行学习输出,参加校招实习春招,收获虎牙Java后台实习offer,入职三个月后参加转正答辩通过,拿到了虎牙Java后台开发工程师的校招录用offer。很感谢前三年相对努力的自己,没有虚度大学光阴。已经拿到了校招offer后,我不

2020-09-01 13:47:30 64

原创 Java的String面试题(记录)

简单总结一下:直接赋值而不是使用new关键字给字符串初始化,在编译时就将String对象放进字符串常量池中;使用new关键字初始化字符串时,是在堆栈区存放变量名和内容;字符串的拼接操作在程序运行时,才在堆中创建对象。一般,可以认为使用""比较的是引用,equals比较的是内容。对于上面的题,看完下面的几个例子,你就会有所感悟:String str = new String(“good”);是在编译时在堆栈中创建对象和分配内容,而在传参的时候,传递的是地址,把外面的str引用地址复制了一份给方法内的str而不

2020-08-24 22:12:18 74

原创 Java 8 新特性
原力计划

Java 8 新特性1.写在前面自学Java已经快要一年了,一直用的都是Java8,在虎牙实习参与的项目中,大量地使用到了Java8的新特性:Lambda表达式和Stream流式计算,它们脱离了数据库层面的运算,直接在内存中对数据做过滤、统计等操作,给应用程序的效率带来了极大的提升。今天趁着需求写完了的空闲时间,来学习并总结一下Java 8的新特性。2.Lambda 表达式Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函

2020-05-26 20:21:38 649

原创 Docker入门学习(一)
原力计划

Docker入门学习(一)1.什么是Docker?Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。2.Docker的应用场景Web 应用的自动化打包和发布。自动化测试和持续集成、发布。在服务型环境

2020-05-26 11:50:49 190

原创 快速入门JVM,只看这一篇就够了(部分)
原力计划

深入理解JVM,只看这一篇就够了1.JVM的整体结构在运行时数据区中,方法区和堆区是线程共享的,而其他区域是线程独占的,这一点要注意。接下来,会有堆JVM的各个结构做更加深入的讲解。2.回顾一下Java代码的执行流程从宏观上看,Java源程序会被编译成字节码文件,然后字节码文件会在不同操作系统上的JVM上被执行,从而得到我们想要的结果。从微观上看,会有很多复杂的过程,这篇博客写得非常清...

2020-05-26 09:57:56 166

原创 ArrayList源码分析(入门篇)
原力计划

ArrayList源码分析前言:写这篇博客的主要原因是,在我上一次参加千牵科技Java实习生面试时,有被面试官问到ArrayList为什么查找的速度较快,插入和删除的速度较慢?当时我回答得不好,很大的一部分原因是因为我没有阅读过ArrayList源码,虽然最后收到Offer了,但我拒绝了,打算寒假学得再深入些再广泛些,下学期开学后再去投递其他更好的公司。为了更加深入理解ArrayList,也为...

2020-05-26 09:57:10 2116 2

原创 重温《MySQL必知必会》学习到的一些关键点(一)
原力计划

重温《MySQL必知必会》学习到的一些关键点1.谨慎使用select *一般,除非你确实需要表中的每个列,否则最好别使用*通配符。虽然使用通配符可能会使你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。2.检索不同的行——DISTINCT关键字不能部分使用DISTINCT DISTINCT关键字应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT vend_id,prod_price,除非指定的两个列都不同,否则所有行都将被检索出来3.限

2020-05-18 10:50:20 192

原创 IDEA的Duplicated code fragment (14 lines long)提示如何关闭

IDEA的Duplicated code fragment (14 lines long)提示如何关闭今天是我实习的第二天,由于我参与的老项目要有新的需求,我发现其中有很多这样的提示,看着不爽,就很强迫症地将其关闭了。解决方案如下图:重复多余的代码提醒,将此处的勾勾取消即可。...

2020-05-09 16:15:06 2246

原创 Windows10下的JDK1.8下载安装与配置教程

Windows10下的JDK1.8下载安装与配置教程1.前言作为一名学习Java开发快一年的学生,现在来编写这篇博客是出于怎样的目的呢?因为今天是我实习入职的第一天,领取了全新的电脑,坐到了全新的工位,开始我在虎牙实习的生活啦。第一天就先安装完必备的软件,所以先装一波JDK,编写博客来记录安装的过程,也方便以后在其他的设备上进行安装。2.下载JDK1.8由于在官网下载需要使用Oracle账号,如果不想去注册账号的话可以下载我提供的百度网盘链接的JDK:链接:https://pan.baidu.co

2020-05-08 18:09:55 378

原创 分布式组件:Spring Cloud Alibaba——Nacos配置中心

分布式组件:Spring Cloud Alibaba——Nacos配置中心参考Spring Cloud Alibaba——Nacos Config的文档即可https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc/nacos-config.ado...

2020-04-25 14:52:08 119

原创 分布式组件:Spring Cloud —— OpenFeign远程服务调用

分布式组件:Spring Cloud —— OpenFeign远程服务调用1.引入依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign&lt...

2020-04-25 14:29:29 276

原创 分布式组件:Spring Cloud Alibaba——Nacos注册中心

分布式组件:Spring Cloud Alibaba—Nacos注册中心1.简介:Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring...

2020-04-24 22:12:26 123

原创 你不可不会的——Docker安装Redis

你不可不会的——Docker安装Redis(完全照我的步骤一定能成功)(1)下载 Redis 镜像docker pull redis(2)创建配置文件mkdir -p /mydata/redis/conftouch /mydata/redis/conf/redis.conf(3)启动容器docker run -p 6379:6379 --name redis \-v /myda...

2020-04-15 10:49:16 85

原创 你不可不会的——Docker安装与启动MySQL5.7

Docker安装与启动MySQL5.7(完全照我的步骤一定没问题)很久没更新博客了,最近在准备实习生春招,面了好多公司,也凉了好多公司,太难了呀1.确保自己的Linux虚拟机上有Docker环境首先来安装Docker:(1)使用yum源安装yum -y install docker(2)启动dockersystemctl start docker (3)查看docker服务状态...

2020-04-15 09:57:38 204

原创 圆圈中最后剩下的数字(Java实现)

圆圈中最后剩下的数字(Java实现)题目:0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例:输入: n = 5, m = 3输出: 3有名的约瑟夫问题,利用ArrayL...

2020-03-30 21:20:15 102

原创 分布式系统唯一ID生成方案汇总
原力计划

分布式系统唯一ID生成方案汇总系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下面就介绍一些常见的ID生成策略。1. 数据库自增长序列或字段最常见的方式。利用数据库,全数据库唯一。auto_increment。优点:1)简单,代码方便,性能可以接受。2...

2020-03-28 12:24:04 96

原创 2020大厂面试必备——HashMap1.7和1.8源码解析
原力计划

实习面试准备——Map1.HashMap(1)数据结构在JDK1.7中,HashMap中的数据结构是数组+单链表的组合;在JDK1.8中的HashMap存储结构是由数组、链表、红黑树这三种数据结构形成。(2)JDK1.7中HashMap源码分析(2.1)首先看一张图片:这张图片非常清晰直观地表示了HashMap底层的数据结构,即数组+链表。(2.2)实现原理成员变量: /** ...

2020-03-27 17:54:14 167

原创 2019招商银行信用卡中心秋招IT笔试编程题总结
原力计划

2019招商银行信用卡中心秋招IT笔试编程题总结1.给定一个字符串来代表一个员工的考勤纪录,这个纪录仅包含以下两个字符:‘A’ : Absent,缺勤‘P’ : Present,到场如果一个员工的考勤纪录中不超过两个’A’(缺勤),那么这个员工会被奖赏。如果你作为一个员工,想在连续N天的考勤周期中获得奖赏,请问有多少种考勤的组合能够满足要求解答:该题其实就是组合问题,可以归结为下面的...

2020-03-27 11:20:42 418

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除