![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java-高级篇
文章平均质量分 70
大鱼等于负
每天进步一点点,慢一点,才能更快!
展开
-
工作队列模式(任务队列)| RabbitMQ系列(二)
RabbitMQ系列汇总:RabbitMQ系列工作队列(又称任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进 程将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。作为一名将来的高级程序员,我们先将之前的简单队列模式来进行一定的优化。优化抽取连接工厂、建立连接、建立通道大致结构这样nice!然后想怎么用就怎么用吧!二、消费者为了测试,这里我们建原创 2022-06-30 17:54:25 · 1117 阅读 · 0 评论 -
Java多线程(九)线程同步和锁
前言前面的文章介绍了并发的情况下会有数据错误的现象出现。并发:同一个对象被多个线程同时操作,也就是不同线程同时操作同一个资源地址,造成数据紊乱。同步:多个需要同时访问资源的线程进入对象的等待池,等待前面线程使用完毕。锁:每个对象都有把锁,当获取对象时,独占资源,其他线程必须等待,使用结束后才释放一个线程持有锁会导致其他所有需要此锁的线程挂起在多线程竞争下,加锁,释放锁会导致比较多的上下文切换和调度延时,引起性能问题如果一个优先级高的线程等待一个优先级低的线程释放锁,会导致优先级倒置,引起性原创 2021-03-18 16:41:17 · 1085 阅读 · 0 评论 -
Java多线程(九)线程的同步
前言原创 2021-03-12 09:30:52 · 9264 阅读 · 0 评论 -
Java多线程(八)线程的状态、优先级和守护线程
前言原创 2021-03-11 09:02:54 · 9490 阅读 · 0 评论 -
Java多线程(七)线程停止、休眠、礼让和强制执行
前言原创 2021-03-11 09:02:26 · 9731 阅读 · 1 评论 -
Java多线程(六)lamda表达式
前言lamda表达式只支持函数式接口。Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。为啥要突然插播一个lamda表达式的学习,因为这玩意很有逼格呀~代码写起来更有大佬的感觉。一、函数式接口什么是函数式接口?任何一个接口,有且只有 一个抽象方法,那么它就是函数式接口。典型的函数式接口public interface mainInterface { v原创 2021-03-10 13:23:50 · 10249 阅读 · 0 评论 -
Java多线程(五)多线程中的静态代理
前言静态代理属于设计模式中的代理模式。反之则有动态代理,本篇文章不展开讲,有兴趣的可自行谷歌研究研究。其实继承Thread也属于静态代理的一种,所以在这里学习静态代理有助于我们学习多线程。一、静态代理实际案例:买房买房人 我买房办理人 中介共同的行为 买房代码实现案例:class MyI implements BuyHouse { //对我来说,我只需负责拿钱,签字即可 @Override public void Buy() {原创 2021-03-10 09:14:09 · 10506 阅读 · 0 评论 -
Java多线程(四)线程并发的理解
前言并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。----以上摘自百度百科一、龟兔赛跑案例在开始并发之前,我们先来看一个好玩的案例。龟兔赛跑。程序实现赛道两条乌龟和兔子赛道长度根据历史来看,需要让兔子间隔休息(因为最后兔子输了嘛)sleep(int) 线程休眠,参数单位是毫秒代码实现案例:public class RunGame implements Runna原创 2021-03-08 17:18:44 · 11564 阅读 · 5 评论 -
Java多线程(三)线程的调度
一、线程调度顺序前提: 如果一个进程中同时开三个线程,那么谁先谁后呢?代码实现案例:/** * 测试线程的执行顺序 */public class TestThreadSort implements Runnable{ public static void main(String[] args) { //使用实现Runnable方法的好处就是可以多实现 TestThreadSort testThreadSort = new TestThreadSort(原创 2021-03-04 14:25:14 · 14529 阅读 · 2 评论 -
Java多线程(二)线程的三种实现方式
一、继承Tread类实现方式:继承Tread类重写run方法创建实例调用start()方法实现代码案例:/** * 多线程的实现方式一 :继承Tread类,并重写run方法,创建实例调用start方法 */public class TestTread extends Thread{ //idea中快速重现父类方法的快捷键是 ctrl + o @Override public void run() { System.out.println("我是原创 2021-03-04 11:52:13 · 14508 阅读 · 1 评论 -
Java多线程(一)线程的基本概念
前言多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” 。------以上摘自百度百科一、生活中多线程的例子城市发展:乡村小道:可以理解为典型的单线程,当车流量较少时,可以正常同行,不会原创 2021-03-04 10:23:19 · 14548 阅读 · 3 评论 -
Java多线程学习汇总
未完待续!!!!!写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论、收藏来一波~让博主更有动力吧!路漫漫其修远兮,吾必将上下求索~原创 2021-03-04 09:38:32 · 14719 阅读 · 1 评论 -
Java网络编程(一)网络的基本认知
前言这是一个信息化的时代,在生活中,网络通信无处不在。比如发送短信,邮件,视频通话等。以邮件为例子:① 收件人: 相当于网络编程的ip地址+端口号,定位到某一个具体的地方!只有找对地方才可以成功发送对吧?②内容: 相当于网络编程中的数据包。也就是具体发送的内容。③内容语言: 相当于是网络协议,比方说我发个英语写的内容给你,不懂英语的人也看不懂内容。双方约定好的格式,就是协议,你懂我懂大家都懂!④发送人: 证明是谁发送的,跟收件人是相对的~一、IP①ip地址:inetAddress公网:原创 2021-03-02 11:35:01 · 14422 阅读 · 0 评论 -
Java网络编程学习汇总
Java网络编程(一)概念未完待续!!!!!写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论、收藏来一波~让博主更有动力吧!路漫漫其修远兮,吾必将上下求索~原创 2021-03-02 11:32:59 · 14611 阅读 · 0 评论 -
Java注解和反射(四)反射的获取及使用
前言前面我们讲了反射对象的获取和类的加载过程,接下来我们得讲下如何使用反射的class对象!一、获取运行时类的结构通过反射可以获取运行时类的完整结构:①FIeld(属性)②Method(方法)③Constructor(构造器)④Superclass(超类)⑤Interface(接口)⑥Annotation(注解)示例代码如下:Person类:import lombok.Data;@Datapublic class Person extends Object{ priva原创 2021-03-01 19:21:18 · 14870 阅读 · 3 评论 -
Java注解和反射(三)类加载过程
前言学习了类加载过程,可以更加方便我们理解反射的机制和原理。没兴趣的同学可直接跳过该篇。一、类加载过程1、加载(load)将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据结构,然后生成一个代表这个类地java.lang.Class对象。2、链接(link)将类的二进制数据合并到 JRE 中。验证:确保加载的类信息符合JVM规范,没有安全方面的问题准备:正式为类变量(static)分配内存并设置类变量默认初始值的阶段,这些内存都将在方法区中进行分配解析:虚拟原创 2021-03-01 11:19:23 · 14739 阅读 · 1 评论 -
Java注解和反射学习汇总(已完结)
Java注解和反射(一)注解的学习和理解Java注解和反射(二)Calss对象..未完待续!!!!!写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论、收藏来一波~让博主更有动力吧!路漫漫其修远兮,吾必将上下求索~...原创 2021-02-25 16:23:41 · 14707 阅读 · 0 评论 -
Java注解和反射(二)Calss对象
前言一句话概括重要性:几乎所有的框架底层都是用反射来实现的!一、概述要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息。二、反射的对象1、通过类来获取2、通过对象来获取3、通过方法来获取三、类加载内存分析四、类加载五、动态创建六、整合注解七、总结...原创 2021-02-25 16:16:49 · 14816 阅读 · 1 评论 -
Java注解和反射(一)注解的学习和理解
前言Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。重点:和 Javadoc 不同,Java 标注可以通过反射获取标注内容。大话空话不用说太多,简而言之,在编译器生成类文件时,标注 可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。反射+注解,是不是感觉Java变成一种动态语言?哈哈哈!我觉得注解可以分为三个部分来讲:内置注解,元注解,自定义注解。一、内置注解1、@Ove原创 2021-02-24 11:33:21 · 15030 阅读 · 0 评论 -
java中如何实现setter链式调用?
前言如何让自己的代码更加简洁?如何让自己的代码看起来更加具有逼格?setter链式调用是你的不二之选 ,让你在代码逼格上成功前进了一大步!方式一setter 返回当前的POJO ,而不是void无返回值,并且返回this。public class Student { //姓名 private String name; //年龄 private Integer age; //爱好 private String like; //get方法为了测试原创 2021-02-22 15:49:31 · 15189 阅读 · 1 评论 -
Redis(十二)拓展:Redis的面试题整理和解答
前言关于Redis的学习到此就告一段落,其中关于特别的点,如:布隆过滤器、分布式锁 我会另开两篇文章来讲解的!学了新的知识,肯定要立马使用起来,我个人的习惯是:看面试题,查漏补缺!事先申明,以下所有面试题和答案都是网上找的,只推荐一些比较好的供大家自己查阅!面试题①Redis常见面试题点击跳转②Redis面试题(2020最新版)点击跳转③2021年最新redis面试题大全及答案(收藏)点击跳转④Redis面试题总结点击跳转⑤《进大厂系列》系列-Redis常见面试题点击跳转Redis扩展:原创 2021-01-26 20:39:28 · 33228 阅读 · 6 评论 -
Redis(十一)进阶:Redis缓存穿透、击穿和雪崩的理解和学习
前言原创 2021-01-26 20:24:24 · 32195 阅读 · 7 评论 -
Redis(八)进阶:Redis如何实现发布订阅功能?
前言Redis发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接受消息。Redis客户端可以订阅任意数量的频道!一、实现方式:①命令:这些命令被广泛用于构建即时通信应用,比如网络聊天室(chatroom)和实时广播、实时提醒等。②发布订阅的实现:1、订阅端:127.0.0.1:6379> pingPONG127.0.0.1:6379> SUBSCRIBE dingdada #订阅名字为 dingdada 的频道Reading m原创 2021-01-26 13:44:05 · 29135 阅读 · 13 评论 -
Redis(七)进阶:Redis持久化之RDB和AOF
前言Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能 !一. RDB(Redis DataBase)①首先我们进入服务器找到dump.rdb文件:②测试触发rdb操作:vim打开redis.conf配置文件为了方便测试,我们将其改为 :save 60 5 #意思是在60秒内进行了5次操作,即写入rdb文件中进行持久化保存如下图所示:③触发机制:1、save的规则满足的情况下,会原创 2021-01-26 11:01:04 · 33345 阅读 · 7 评论 -
Redis(四)整合:Redis在Jedis中如何使用和操作?
前言百度的概念性解答我就不贴了,简单来说,Jedis是Redis官方推荐的Java连接开发工具! 虽然现在的SpringBoot2.×版本已经将Jedis换成了Lettuce,但是我觉得还是有必要了解一下Jedis的使用!如何在java项目中整合Jedis并且连接Redis数据库?①创建一个Maven项目空的即可~怎么创建我就不赘述了!②导入Jedis和fastjson依赖,耐心等待下载完成!<!--导入jedis的包--><dependency> <原创 2021-01-20 22:57:24 · 30899 阅读 · 4 评论 -
Redis(三)基础:Redis中的事务和乐观锁如何实现?
前言事务①原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。②一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。③隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。④持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库原创 2021-01-20 21:29:55 · 42144 阅读 · 13 评论 -
Redis(二)基础:三大特殊数据类型的学习和理解
前言很多博客只讲了五大基本类型,确实,是最常用的,而且百分之九十的程序员对于Redis只限于了解String这种最常用的。但是我个人认为,既然Redis官方提供了其他的数据类型,肯定是有相应的考量的,在某些特殊的业务场景中,这些特殊的类型还是能够给我们多一种解决思路!那么,这个学习就是值得的!!!Geospatial: 地理位置城市经纬度查询: 经纬度查询注意点1:两极无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!注意点2:有效的经度从-180度到180度。注意点3:有原创 2021-01-20 11:12:25 · 41918 阅读 · 5 评论 -
Redis学习汇总(已完结)
Redis学习汇总Windows和Linux下如何安装RedisRedis(一)入门:五大数据类型的学习和理解① Redis(一)入门:五大数据类型的学习和理解② 未完待续~写作不易,如果您觉得写的不错,欢迎给博主点赞、收藏、评论、收藏来一波~让博主更有动力吧!路漫漫其修远兮,吾必将上下求索~...原创 2021-01-19 15:36:16 · 315328 阅读 · 49 评论 -
Redis(一)入门:五大数据类型的学习和理解②
接上一篇Redis(一)入门:五大数据类型的学习和理解① 点击跳转.二、Redis的五大数据类型String(字符串)-传送门.List(列表)①lpush(左插入)、lrange(查询集合)、rpush(右插入)操作#lpush127.0.0.1:6379> lpush list v1 #新增一个集合(integer) 1127.0.0.1:6379> lpush list v2(integer) 2127.0.0.1:6379> lpush list v3(原创 2021-01-19 15:24:57 · 50925 阅读 · 23 评论 -
Redis(一)入门:五大数据类型的学习和理解①
一、概述Redis是什么?what?Redis(Remote Dictionary Server ),即远程字典服务 !是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。免费和开源!是当下最热门的 NoSQL 技术之一!也被人们称之为结构化数据库!Redis能干嘛?1、内存存储、持久原创 2021-01-18 15:23:04 · 115835 阅读 · 25 评论 -
maven的那些事儿~~~想要学会maven,看这篇文章就够了!
简介Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。(这一段话来自百度百科~)我们为什么要使用Maven?[why]目前的技术在开发中存在的问题:1.一个项目就是一个工程:如果项目非常庞大,就不适合继续使用package来划分模块。2.项目中需要的jar包必须手动 “复制”,“粘贴” 到WEB-INF/lib目录下。3.jar包需要别人替我们准备好,或者到官网下载。4.一个jar包依赖的其他jar包需要自己手动加入到项目当中。使用m原创 2020-09-11 13:34:41 · 40769 阅读 · 1 评论 -
java-URL短连接的生成(保证生成的唯一性)
业务场景:短信平台发送带有跳转链接的短信时,会存在一个问题,有的时候链接会特别长,而且可能会有一些特殊字符,影响点:这样手机的短信会将链接会切开来,直接点击无法跳转.复制粘贴时浏览器可能无法将其直接跳转,会将其默认为搜索条件而不是链接地址来跳转.正是以上的这些原因(只是一小部分的原因),就衍生了短连接的生成这个需求短链接的生成方式:加密方式:最简单的办法就是通过MD5方式来加密,也是目前网上最多的一种实现方式,我也是借鉴了其方法,不过亲测高并发下无法支持其生成的唯一性,可能引起短连接地址原创 2020-08-19 09:35:19 · 47835 阅读 · 0 评论 -
使用随机数实现扑克牌洗牌的算法(弱智版)
最近刷leetCood有点着魔了,突然想写一个扑克牌洗牌的实现方式。大脑中第一印象就是用随机数来实现:1)随机数范围为1-542)建立一个集合来存放随机生成的数3)新随机出来的数如果该集合有,则丢弃,反之则加进去直接上代码吧,不完善,随便写写,不喜勿喷。//实现方式一 使用随机数 随机生成54个在1-54范围内的数字,当这些数字不重复时,完成洗牌 public static ...原创 2020-01-16 14:53:09 · 10882 阅读 · 0 评论 -
5、java异常
1.算术运算符:加 : + 减 : - 乘 : * 除 : / 求余 :%2.数学函数与常量:在Math类中,包含了各种各样的数学函数,下面介绍一些比较常用的数学函数:1)计算一个数值的平方根 ----- sqrt 方法 :...原创 2019-06-12 14:22:00 · 4989 阅读 · 0 评论