Java
Java SE Java EE
Sky-木落
程序猿!热爱编程、旅行、摄影、轻音乐等、
展开
-
两个线程交替打印输出的各种写法
方式一:使用LockSupportpackage com.muluo.test1013;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.LockSupport;import java.util.concurrent.locks.ReentrantLock;/** * 代码测试 * @author Muluo * @create 2021-10-13 15:28:56 */public原创 2021-10-13 19:58:00 · 227 阅读 · 0 评论 -
快速排序——Java
package com.muluo.test1007;import java.util.Arrays;public class QuickSort { public static void main(String[] args) { int[] arr = {5, 1, 9, 6, 7, 2, 4}; quickSort(arr, 0, arr.length - 1); System.out.println(Arrays.toString(arr));; } private st原创 2021-10-07 19:50:22 · 100 阅读 · 0 评论 -
5. 最长回文子串
1、暴力解法package leetcode;class Solution { public static void main(String[] args) { Solution solution = new Solution(); String str = "cbbd"; System.out.println(solution.longestPalindrome(str)); } public String longestPa原创 2021-10-04 17:32:23 · 85 阅读 · 0 评论 -
双向链表的实现(LinkedList)
package com.muluo.test1003;public class MyLinkedList { public static void main(String[] args) { MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addLast(1); myLinkedList.addLast(5); myLinkedList.addLast(2); myLinkedList.addLast(8);原创 2021-10-04 13:17:32 · 174 阅读 · 0 评论 -
树的建立——Java
package com.muluo.tree;public class TreeNode { int value; TreeNode leftNode; TreeNode rightNode; public TreeNode(int value) { this.value = value; } public void setLeftNode(TreeNode leftNode) { this.leftNode = leftNode; } public void setRig原创 2021-10-04 12:34:29 · 1413 阅读 · 0 评论 -
二叉搜索树的建立
package com.muluo.bsttree;public class BST { Node root; int size; public int getSize() { return this.size; } public void addEle(int i) {// if (root == null) {// root = new Node(i);// } else {// addEle(root, i);// } root = addEle(ro原创 2021-10-04 12:32:33 · 283 阅读 · 0 评论 -
382. 链表随机节点
蓄水池算法随机抽样视频参考/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next =原创 2021-10-03 12:18:03 · 73 阅读 · 0 评论 -
86. 分隔链表
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * }原创 2021-10-02 12:57:49 · 71 阅读 · 0 评论 -
Java 的快速失败和安全失败
参考1参考2一、快速失败(fail—fast)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出 Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变 modCount 的值。每当迭代器使用 hashNext()/next() 遍历下一个元素之前,都会检测 modCount 变量是否为 expected原创 2021-09-30 16:14:13 · 91 阅读 · 0 评论 -
归并排序——链表
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * }原创 2021-09-20 17:23:35 · 112 阅读 · 0 评论 -
冒泡排序—— 链表
package leetcode;class Solution { static class ListNode { int val; ListNode next; ListNode() { } ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) {原创 2021-09-20 16:13:45 · 265 阅读 · 0 评论 -
单向链表—— Java实现
package com.muluo.linkedList;public class SingleLinkedList<E> { public class Node<E> { public E e; public Node next; public Node(E e, Node next) { super(); this.e = e; this.next = next; } public Node(E e) { this(e, n原创 2021-09-19 20:51:54 · 102 阅读 · 0 评论 -
第 1 天 二分查找
二分思想总结:确保题目是有序排列(升序,降序)都可以;二分可以解决的问题有,查找目标元素,寻找插入位置704. 二分查找class Solution { public int search(int[] nums, int target) { int l = 0, r = nums.length - 1; while (l <= r ) { int mid = l + (r - l) / 2; if (原创 2021-08-01 14:07:33 · 78 阅读 · 0 评论 -
67. 二进制求和
class Solution { public String addBinary(String a, String b) { StringBuffer sb = new StringBuffer(); // 使用Math函数中的Max方法求得最大长度 int n = Math.max(a.length(), b.length()), carry = 0; for (int i = 0; i < n; i++) {原创 2021-07-29 22:02:23 · 65 阅读 · 0 评论 -
66. 加一
class Solution { public int[] plusOne(int[] digits) { int[] arr = new int[digits.length + 1]; for (int i = digits.length - 1; i >= 0; i--) { // 最后一位不是9就digits[i]++;推出就行,否则的话要将末尾写为0,重新判断 if (digits[i] != 9) {原创 2021-07-29 20:44:56 · 56 阅读 · 0 评论 -
Gradle代理配置(阿里云镜像)
maven{ url "https://maven.aliyun.com/groups/public" } maven { url "https://maven.aliyun.com/repository/google" } maven { url "https://maven.aliyun.com/repository/jcenter" } ..原创 2021-06-27 17:14:35 · 1041 阅读 · 0 评论 -
多线程下载器项目实战
目录结构源代码Constant.classpackage com.muluo.constant;/** * 常量类 * @author Muluo * @create 2021-06-15 16:34 */public class Constant { /** * 文件下载的存储位置 */ public static final String PATH = "D:\\"; /** * 文件下载单位 */ pub原创 2021-06-17 16:33:58 · 204 阅读 · 1 评论 -
控制输出语句在一行,数据变而其他东西不变
String downInfo = String.format("已下载 %smb/%smb, 速度 %skb/s, 剩余时间 %ss", currentFileSize, httpFileSize, speed, remainTime); System.out.print("\r"); System.out.print(downInfo);原创 2021-06-16 17:32:41 · 96 阅读 · 0 评论 -
instanceof关键字的作用
instanceof严格来说是Java中的一个双目运算符,用来测试一个对象是否为一个类的实例,用法为:boolean result = obj instanceof Class其中obj为一个对象,Classb表示一个类或者接口,当obj为Class的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result都返回true,否则返回false.注意:编译器会检查obj是否能否转换成右边的class类型,如果不能转换直接报错,如果不能确定,则通过编译,具体看运行时定。int i = 0;原创 2021-06-15 08:29:44 · 1643 阅读 · 3 评论 -
852. 山脉数组的峰顶索引
重拳出击class Solution { public int peakIndexInMountainArray(int[] arr) { int max = arr[0], index = 0; for (int i = 0; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; index = i;原创 2021-06-15 07:49:24 · 78 阅读 · 1 评论 -
错误解决:Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/**
解决:降低JDK版本到1.8手动导入以下包:<!--解决Handler dispatch failed;nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter--><dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactI原创 2021-05-24 09:11:20 · 2223 阅读 · 0 评论 -
PageHelper插件的引入
1、导入依赖<!-- MyBatis 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> </dependency>2、在SqlSessionFactoryBean进行配置<!-- 配置插件 --> <property name="原创 2021-05-20 17:00:18 · 624 阅读 · 0 评论 -
ReadisUtil工具类封装
package com.java1234.util;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.util.CollectionUtils;/** * Redis工具原创 2021-05-20 09:04:30 · 83 阅读 · 0 评论 -
MD5加密和判断是否为Ajax请求工具类
package com.atguigu.crowd.util;import java.math.BigInteger;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import javax.servlet.http.HttpServletRequest;import com.atguigu.crowd.constant.CrowdConstant;public class原创 2021-05-20 09:03:14 · 81 阅读 · 0 评论 -
938. 二叉搜索树的范围和
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { *原创 2021-04-28 20:35:23 · 61 阅读 · 0 评论 -
633. 平方数之和
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c 。示例 1:输入:c = 5输出:true解释:1 * 1 + 2 * 2 = 5示例 2:输入:c = 3输出:falseclass Solution { public boolean judgeSquareSum(int c) { int i = 0; int j = (int) Math.sqrt(c) + 1;; while (i原创 2021-04-28 20:09:04 · 55 阅读 · 0 评论 -
Elasticsearch-head解决跨域问题
http.cors.enabled: truehttp.cors.allow-origin: "*"原创 2021-04-25 07:41:29 · 674 阅读 · 0 评论 -
Arrays.sort(int [])流程图
原创 2021-04-19 15:41:16 · 272 阅读 · 0 评论 -
【JVM】空间分配担保机制
1.谁进行空间担保?JVM使用分代收集算法,将堆内存划分为年轻代和老年代,两块内存分别采用不同的垃圾回收算法,空间担保指的是老年代进行空间分配担保2.什么是空间分配担保?在发生Minor GC之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象的总空间,如果大于,则此次Minor GC是安全的如果小于,则虚拟机会查看HandlePromotionFailure设置值是否允许担保失败。如果HandlePromotionFailure=true,那么会继续检查老年代最大可用连续空间是否大于原创 2021-04-05 16:11:38 · 441 阅读 · 0 评论 -
select、poll、epoll有什么区别?
select()机制中提供一fd_set的数据结构,实际上是一long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执行了select()的进程哪一socket或文件发生了可读或可写事件。在poll模型中打破了2048的限制,底层使用了链表总结视频推荐:https://www.bilibili.com/video/BV.原创 2021-04-04 17:07:03 · 116 阅读 · 1 评论 -
AQS加锁分析
一、公平锁(需要判断锁是否是自由状态,再去判断有无队列,相对于第二个线程来说)1、锁是第一个线程来的时候直接获取锁,与队列无关,不会产生队列2、第二个线程来拿锁的时候初始化队列,并进行自旋,因为第二个线程有资格拿锁,如果自锁失败,则park(),队列第一个node为空,所以有资格拿锁的是第二个3、第三个线程来的时候因为队列已经初始化,所以直接排队二、非公平锁(不需要判断锁的状态)1、不管锁有没有被持有,直接cas,不需要管有没有队列2、判断锁的状态,如果锁未被其他线程持有,则进行cas(原创 2021-04-04 09:28:33 · 80 阅读 · 0 评论 -
点餐系统,项目注意点(微信支付)
1、创建新订单(在高并发的情况下,减库存会出现问题)超卖,采用Redis的锁来解决商品价格一定要去自己的数据库去查询,不能有前端传来在创建新订单前,确保库存充足,不能出现超卖的情况查询商品(单价,数量)根据商品的product_id如果为空则抛出异常,商品不存在设置OrderDetail时,设置了6位id,要确保在高并发情况下,id不重复,要添加synchronized锁在创建订单Service层,添加事务注解,确保下单成功,如果不成功则进行回滚计算总金额写入数据库(OrderMa原创 2021-04-03 11:07:14 · 359 阅读 · 0 评论 -
AbstractQueuedSynchronizer简介
1.AQS可以实现独占锁和共享锁。2.独占锁exclusive是一个悲观锁。保证只有一个线程经过一个阻塞点,只有一个线程可以获得锁。3.共享锁shared是一个乐观锁。可以允许多个线程阻塞点,可以多个线程同时获取到锁。它允许一个资源可以被多个读操作,或者被一个写操作访问,但是两个操作不能同时访问。4.AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state = 0无锁。它提供了三个方法(getState()、setState(int newSt原创 2021-03-31 18:45:31 · 56 阅读 · 0 评论 -
java 构造函数什么时候被调用执行
在java语言 中,构造函数又称构造方法。特殊性在于,与普通方法的区别是,他与类名相同,不返回结果也不加void返回值。构造函数的作用是初始化对象,即在创建对象时被系统调用(与普通方法不同,程序不能显示调用构造函数)。构造函数还能够被重载,即可以传入参数,当程序中包含有带参的构造函数时,系统将不会再提供的无参构造函数。构造函数特点:没有函数返回值,构造函数名与类名相同;当创建类对象的时候调用其对应的构造方法去创建。每创建一个类的实例都去初始化它的所有变量是乏味的。如果一个对象在被创建时就完成了所有的初始工作原创 2021-03-30 21:27:27 · 9816 阅读 · 0 评论 -
21. 合并两个有序链表
一、非递归/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; }原创 2021-03-19 19:48:30 · 59 阅读 · 0 评论 -
142. 环形链表 II
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode detectCycle(ListNode he原创 2021-03-16 16:29:15 · 51 阅读 · 0 评论 -
144. 二叉树的前序遍历
一、递归遍历class Solution { List<Integer> list = new ArrayList<>(); public List<Integer> preorderTraversal(TreeNode root) { if (root != null) { list.add(root.val); preorderTraversal(root.left);原创 2021-03-15 15:15:40 · 70 阅读 · 0 评论 -
分别按照二叉树先序,中序和后序打印所有的节点
题目描述分别按照二叉树先序,中序和后序打印所有的节点。import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * } */public class Solution { /** * * @param root TreeNode类 the root of binary tree原创 2021-03-15 14:36:05 · 809 阅读 · 0 评论 -
如何确保三个线程顺序执行?
场景:有三个线程t1、t2、t3。确保三个线程t1执行完后t2执行,t2执行完成后t3执行。1.使用jointhread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。t.join(); //调用join方法,等待线程t执行完毕t.join(1000); //等待 t 线程,等待时间是1000毫秒。一、joinpackage Thread;/** * @a原创 2021-03-13 08:32:01 · 155 阅读 · 0 评论 -
synchronized的基本原理
Synchronized是由JVM 实现的一种实现互斥同步的一种方式,如果,你查看被synchronized修饰过的程序块编译后的字节码,会发现被Synchronized修饰过的程序块,在编译前后被编译器生成了monitorenter和monitorexit两个字节码指令。这两个字节码什么意思呢?在虚拟机执行到monitorenter指令时,首先要尝试获取对象的锁,如果这个对象没有锁定,或者当前线程已经拥有这个对象的锁,把锁的计数器+1,当执行monitorexit指令时锁计数-1,当计数器为0时,锁就原创 2021-03-13 07:25:06 · 73 阅读 · 0 评论