java
文章平均质量分 59
Java入门不如放弃
码出自己的精彩!
展开
-
Redis分布式技术
Redis的主从复制在redis.conf配置文件中找到 # replicaof <masterip> <masterport> 打开并配置从属于哪个主节点 启动后可以使用 slaveof host port指定从属于哪个主节点 查看主从的关系 info replication只有主节点能写入数据,从节点只能读数据 slaveof no one 从主节点中脱离redis主从复制的不足没有解决高可用问题 需手动切换主从高可用思路服务端:自动切换主从 客.原创 2021-12-03 11:32:53 · 377 阅读 · 0 评论 -
synchronized之CAS机制的实现原理
CAS机制(比较与替换)CAS方法会传递三个参数,第一个参数V表示要更新的变量,第二个参数E表示期望值,第三个参数U表示更新后的值。更新的方式是,如果V==E,表示预期值和实际值相等,则将V修改成U并返回true,否则修改失败返回false。在Java中的Unsafe类中提供了CAS方法,针对int类型变量的CAS方法定义如下。//这是java的本地方法public final native boolean compareAndSwapInt(Object paramObject, l.原创 2021-12-02 10:33:27 · 1102 阅读 · 0 评论 -
Java多线程学习之synchronized实现原理(2)
偏向锁的原理偏向锁可以认为是在没有多线程竞争的情况下访问synchronized修饰的代码块的加锁场景,也就是单线程执行的情况下。偏向锁的作用就是,在没有线程竞争的情况下去访问synchronized同步代码块时,会尝试先通过偏向锁来抢占访问资格,这个抢占过程是基于CAS来完成的,如果抢占锁成功,则直接修改对象头中的锁标记。其中,偏向锁标记为1,锁标记为01,以及存储当前获得锁的线性ID。而偏向锁的意思就是,如果线程X获得了偏向锁,那么当线程X后续再访问这个同步方法时,只需要判断对象中的线程ID和线原创 2021-12-01 17:19:43 · 393 阅读 · 0 评论 -
synchronized同步锁实现原理(1)
同步锁的实现猜想同步锁的核心特性是排他,要达到这个目的,多个线程必须去抢占同一个资源。 在同一时刻只能有一个线程执行加了同步锁的代码,意味着同一时刻只允许一个线程抢占到这个共享资源,其余没抢占到的线程只能等待。 处于等待状态的线程不能一直占用CPU资源,如果没抢占到锁就要被阻塞等待,并释放CPU资源。 如果非常多的线程都被阻塞了,那么我们要通过一个容器来存储线程,当获得锁的线程执行任务并释放锁后,要从这个容器中唤醒一个线程,被唤醒的线程会再次尝试抢占锁。synchronized同步锁标记..原创 2021-12-01 09:41:26 · 728 阅读 · 2 评论 -
java如何正确终止线程
线程通过start()方法启动后,会在run()方法执行结束后进入终止状态。stop()方法终止线程会导致的两个问题立即抛出ThreadDeath异常,在run()方法中任何一个执行指令都可能抛出ThreadDeath异常。 会释放当前线程所持有的所有锁,这种锁的释放是不控的。示例代码/** * stop()方法会出现的问题 * @author ZhangHao * @since 1.0.0 */public class ThreadStopExample extends Thr原创 2021-11-22 14:58:03 · 506 阅读 · 0 评论 -
Java中多线程
并发与并行并发:并发是指两个或多个任务在同一时间间隔内发生,比如在4核CPU上运行100个线程,由于核数限制,这100个线程无法在同一时刻运行,所以CPU只能采用时间片切换的方式来运行,如果这100个线程能够在1s内全部处理完成,那么我们可以认为当前的并发数为100. 并行:当有多个CPU核心时,在同一个时刻可以同时运行多个任务,这种方式叫并行。比如,4核CPU可以同时运行4个线程。在linux系统中可以通过命令ulimit -n查看,假如得到的结果是1024,那么该进程能够并行处理的连接数就是10原创 2021-11-22 11:29:37 · 819 阅读 · 0 评论 -
常用的正则表达式
起始符“^” 结束符“$” 字符词量“?”0-1次 “+”≥1次 “*” 任意次 {n}固定n次 {n,}n次及以上 {m,n}≥m&&≤n次“·”任意字符 “[]”字符范围 “[^]”排除字符范围原创 2021-09-15 15:45:54 · 521 阅读 · 0 评论 -
使用httpclient上传文件
//http请求文件下载接口 public static String doPostFileUpload(String url, MultipartFile[] files, DrawTemplate drawTemplate) { CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; HttpEntity httpEntity = null.原创 2021-08-17 15:23:15 · 553 阅读 · 0 评论 -
将一个单词中的所有大写字母全部转回为小写字母
思路如下String类型的字符串转化为char[] 遍历数组找到大写字母在此基础上+32 最后返回字符串数字0-9是由ASCII码48-57 大写字母A-Z是由ASCII码65-90 小写字母a-z是由ASCII码97-122 public static String toLowerCade(String str){ char[] chars = str.toCharArray(); for (int i = 0; i < chars.length;原创 2021-03-10 18:11:44 · 545 阅读 · 0 评论 -
SpringBoot整合WebSocket+Redis实现实时数据推送到web界面
实现的主要过程原创 2021-03-09 20:35:33 · 2386 阅读 · 1 评论 -
Java的流库-2021-01-05
Java SE 8 的流库1.迭代与流的操作2.流的创建1.迭代与流的操作对列表中的长单词计数1.迭代操作long count = 0;for(String w : words){ if.(w.length() > 12) count++;}2.使用流操作实现相同功能long count = words.stream().filter(w -> w.length() > 12),count();使用流代替循环的好处: 流操作遵循“做什么而非原创 2021-01-05 13:01:08 · 121 阅读 · 0 评论 -
Spring中的编程思想
Spring的设计初衷(简化开发)四个基本策略 基于POJO的轻量级和最小侵入性编程 通过依赖注入和面向接口松耦合 基于切面和惯性进行声明式编程 通过切面和模板减少样板式代码spring的编程思想OOP :Object Oriented Programming (面向对象编程)用程序归纳总结生活中的一切事物。(封装,继承,多态)。 BOP:BeanOriented Programming (面向bean编程)面向Bean设计程序,解放程序员。(一切从Bean开始)。 AO...原创 2020-10-28 21:16:46 · 386 阅读 · 0 评论 -
学习笔记——JVM(2)java虚拟机、Java对象内存布局
java虚拟机Java对象内存布局原创 2020-09-02 17:03:59 · 80 阅读 · 0 评论 -
学习笔记——JVM(1)运行时数据区(JVM内存模型)
JVM(1)JVM运行时数据区1.方法区(Method Area)(JDK1.7:PermSpace永久代)(JDK1.8:MetaSpace元空间)方法区只有一个,线程共享的内存区域【线程不安全】,生命周期和虚拟机是一样的。 方法区中存储已经被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存。 【逻辑上属于堆的一部分】,垃圾回收一般不讨论方法区的垃圾回收。 内存不够抛出OutOfMemoryError(OOM)。2.堆(Heap)堆只有一个,线程共享的内存区域【原创 2020-09-02 10:21:06 · 116 阅读 · 0 评论 -
学习笔记——装饰器模式
装饰器模式(Decorator Pattern)定义:装饰器模式也叫包装模式,是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案。属于结构型模式。适用场景用于扩展一个类的功能或给一个类添加附加职责 动态的给一个对象添加功能,这些功能可以在动态的撤销通用写法public abstract class Component { /** * 示例方法 */ public abstract void operatio原创 2020-08-25 17:51:00 · 132 阅读 · 0 评论 -
学习笔记——门面模式
门面模式(Facade Pattern)定义:门面模式又叫外观模式,提供了一个统一的接口,用来访问子系统的一群接口。特征:门面模式定义了一个高层接口,让子系统更容易使用。属于结构性模式门面模式的适用场景子系统越来越复杂,增加门面模式提供简单接口构建多层系统结构,利用门面对象作为每层的入口,简化层间调用门面模式的通用写法(general)// 外观角色 Facadepublic class Facade { private SubSystemA a = new Su原创 2020-08-18 11:38:56 · 139 阅读 · 0 评论 -
学习笔记——代理模式
代理模式(Proxy pattern)——SpringAOP是用代理模式实现的。定义:代理模式是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用属于结构型设计模式生活中的代理模式(这些都是动态代理)房产中介 快递小哥 黄牛党(抢票在卖给需要的人)代理模式适用场景保护目标对象 增强目标对象代理的通用写法(general)public interface ISubject { void request();}publi原创 2020-08-18 09:58:35 · 107 阅读 · 0 评论 -
学习笔记:设计模式之建造者模式
建造者模式(Builder Pattern)定义:建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 特征:用户只需要指定需要建造的类型就可以获得对象,建造过程及细节不需要了解。 属于创建型模式。适用场景适用于创建对象需要很多步骤,但是步骤的顺序不一定固定。 如果一个对象有非常复杂的内部结构(很多属性) 把复杂对象的创建和使用分离通用写法@Datapublic class Product { private String name;原创 2020-08-09 18:48:29 · 113 阅读 · 0 评论 -
二进制字符串求和
二进制字符串求和给你两个二进制字符串,返回它们的和(用二进制表示)。输入为 非空 字符串且只包含数字1和0。示例1:输入: a = "11", b = "1"输出: "100"示例2:输入: a = "1010", b = "1011"输出: "10101"提示:每个字符串仅由字符 '0' 或 '1' 组成。1 <= a.length, b.length <= 10^4字符串如果不是 "0" ,就都不含前导零。 public Str...原创 2020-06-23 20:37:37 · 554 阅读 · 0 评论 -
模式匹配
模式匹配你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a","go"是"b"),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。示例 1:输入: pattern = "abba", value = "dogcatcatdog"输原创 2020-06-22 11:20:10 · 175 阅读 · 0 评论 -
字符串转换整数leetcode8
字符串转换整数请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第一个非..原创 2020-06-21 16:31:52 · 115 阅读 · 0 评论 -
二叉树中的最大路径和 LeetCode124
二叉树中的最大路径和给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2:输入: [-10,9,20,null,null,15,7] -10/ \9 20/ \15 7输出: 42题解实现一个函数 maxGain(nod...原创 2020-06-21 14:44:09 · 108 阅读 · 0 评论 -
整数反转LeetCode7
整数反转给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231,231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。题解(1个错解没考虑整数越界的情况) 1.x > 0 flag = 1; x <...原创 2020-06-21 10:53:11 · 170 阅读 · 0 评论 -
Z字型变换:LeetCode6
Z字型变换将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。示例1:输入: s = "LEETCODEISHIRING", numRows = 3输出: "LCI...原创 2020-06-21 09:32:50 · 110 阅读 · 0 评论 -
最长回文子串5
给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"题目解析动态规划:根据回文串去掉首尾字符后,仍然为回文串。得到状态转移方程:这个方程的意思就是说是回文串,且时也是回文串,否则不是回文串。// 动态规划 public String longestPalindrome(Stri...原创 2020-06-20 12:18:22 · 83 阅读 · 0 评论 -
将一个浮点字符串转换为人民币读法
package FourArray;import java.util.Arrays;public class Num2Rmb { private String [] hanArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; private String [] unitArr = {"十","百","千"}; /** * 把浮点数分解...原创 2019-04-06 13:48:30 · 273 阅读 · 0 评论 -
初学者控制台五子棋游戏,输赢没有实现
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Random;public class Gobang { //定义期盘大小 private static int BOARD_SIZE = 15; //定义一个二维数组...原创 2019-04-06 14:47:50 · 142 阅读 · 0 评论 -
Java继承和组合区别
//继承实现类复用class Animal{ private void beast() { System.out.println("心脏跳动..."); } public void breath() { beast(); System.out.println("呼吸中..."); } }//继承Animal,直接复用父类的breath()方法class Bird e...原创 2019-04-11 10:37:02 · 233 阅读 · 0 评论 -
Java中接口的定义、继承和使用,接口和抽象类相似和区别。
接口定义使用Interface关键字定义,接口定义的基本语法如下:[修饰符] interface 接口名 extends 父接口1, 父接口2...{零个到多个常量定义...零个到多个抽象方法定义...零个到多个内部类、接口、枚举定义...零个到多个默认方法或类方法定义...//java9 新增的(零个到多个私有方法定义...)}对上面语法的详细说明...原创 2019-04-23 10:48:39 · 830 阅读 · 0 评论 -
Lambda 表达式入门、与函数式的接口、方法引用与构造器引用以及Lambda表达式与匿名内部类的联系与区别、使用Lambda表达式调用Array树的类方法
Lambda表达式入门Lambda表达式的主要作用就是代替匿名内部类的繁琐语法。它由三部分组成。形参列表:形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参表的圆括号也可以省略。 箭头(->)。必须通过英文中划线和大于号组成。 代码块。如果代码块只包含一条语句,Lambda表达式允许省略代码块的花括号,那么这条语句就不要用花括号表示语句结束。Lambda代码块只有一...原创 2019-04-28 17:08:00 · 284 阅读 · 0 评论 -
使用数组作为缓存池,实现一个缓存实例的不可变类
class cacheImmutale{ private static int MAX_SIZE = 10; //使用数组来缓存已有的实例 private static cacheImmutale[] cache = new cacheImmutale[MAX_SIZE]; //记录缓存实例在缓存中的位置,cache[pos-1]是最新缓存的实例 private static int ...原创 2019-04-20 16:36:39 · 204 阅读 · 0 评论 -
Java的时间日期类及其常用方法
import java.time.Clock;import java.time.Duration;import java.time.Instant;import java.time.LocalDate;import java.time.LocalDateTime;import java.time.LocalTime;import java.time.Month;import jav...原创 2019-05-08 17:02:52 · 375 阅读 · 0 评论 -
java修饰符的适用范围
Java修饰符的适用范围 外部类/接口 成员属性 方法 构造器 初始化块 成员内部类 局部成员 public √ √ √ √ √ protected √ √ √ √ 包访问控制符 √ √ √ √ ...原创 2019-05-06 09:37:53 · 237 阅读 · 0 评论 -
java集合TreeSet的定制排序
import java.util.TreeSet;class M{ int age; public M(int age) { this.age = age; } public String toString() { return "M [age:" + age + "]"; }}public class TreeSetTest4 { public static ...原创 2019-05-20 10:55:19 · 215 阅读 · 0 评论 -
Java正则表达式及其用法
正则表达式正则表达式是字符串处理工具,可以对字符串进行查找、提取、分割、替换等操作。String类里的几个特殊方法boolean matches(String regex)//判断该字符串是否与指定正则表示regex匹配String replaceAll(String regex, String replacement)// 将字符串中所有匹配regex的子串替换成replace...原创 2019-05-10 15:39:13 · 207 阅读 · 0 评论 -
java基础知识(包含二进制、八进制、十进制和十六进制之间的转换例子很好理解)
1.通用环境Java源代码保存在扩展名为(.java)文件中。本地编译器javac编译程序程序,并生成包含字节码的(.class)文件。Java字节码表示可移植的中间语言,通过运行java解释器来解释字节码。解释器也称为虚拟机(Virtual Machine)Java程序的输入可以是下面的任何一种方式:终端输入,这种输入为标准输入。 在调用虚拟机时其他参数——命令行参数(comman...原创 2019-09-29 20:24:17 · 1929 阅读 · 0 评论