自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zjt980452483的博客

神圣兽国游尾郡窝窝乡Java攻城狮

原创 Java并发编程学习系列

Java并发编程系列 1.Atomic基本类型 2.原子性锁 3.不可变对象 4.线程封闭 5.线程不安全类与写法 6.同步容器 7.AQS组件之CountDownLatch 8.AQS组件之信号量(Semaphore) 9.AQS组件之CyclicBarrier 10.AQS组件之Reentra...

2020-01-01 12:53:29 272 0

原创 云服务JDK以及Tomcat环境搭建

一、安装文件上传 1. 使用Xshell链接云服务器,并进入到/路径下 2. 进入到usr文件夹下,创建自己的文件夹(zjt为例) 3. 在zjt文件夹下创建名为jdk和tomcat的文件夹,用于后续安装jdk和tomcat 4. 使用WinSCP工具,链接云服务器,将jdk和tomcat以的...

2020-06-16 01:39:49 48 0

原创 云数据库Mysql 购买和使用(腾讯云为例)

一、 云数据库购买 1. 打开腾讯云产品界面:https://cloud.tencent.com/product,并选择立即选购 2.以学习为目的,因此此处选择低配,50G足够使用了。具体配置信息如下图: 3. Mysql实例购买成功后,需要等待不到一分钟,才可以初始化Mysql数据库 4. 初...

2020-06-15 02:06:17 82 0

原创 云服务器的购买和使用教程(腾讯云为例)

本教程是指导新人想体验使用云服务器部署服务,所以选择最省钱且能实现完整使用云服务器过程为目标 一、 购买云服务(腾讯云) 1.打开腾讯云官网:https://cloud.tencent.com/ 2. 注册账号并实名认证; 3. 点击菜单栏产品,输入云服务器 4. 点击立即选购 5. 在云服务CV...

2020-06-15 01:38:47 141 0

原创 idea创建动态web项目打开jsp文件报404问题

测试项目结构如下: 项目在tomcat中启动后,会自动打开默认的index.jsp文件 为了设置打开的jsp文件是login.jsp文件, 首先打开configurations,确认当前打开的路径是login.jsp路径 进入到configurations中的Deployment项,确认ap...

2020-06-07 18:36:09 146 0

原创 二叉搜索树(Binary Search Tree)

一、基本概念 1. 二叉树 和链表一样,具有动态的数据结构; 具有唯一的根节点; 每个节点最多有两个子节点,最多有一个父节点; 每个节点的左子树也是二叉树,每个节点的右子树也是二叉树; 一个节点或者空也是二叉树; 2.二分搜索树 二分搜索树属于二叉树的一种; 每个节点的值 大于其左子树的所...

2020-02-02 18:06:09 53 0

原创 LeetCode——203. 移除链表元素

LeetCode题目地址 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/remove-linked-list-elements/ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题目 删除链表中等于给定值 val 的所...

2020-01-06 15:38:02 89 0

原创 队列——链表结构实现(带尾指针的链表)

本文接上一篇队列文章 四、链表结构的队列 1.带尾指针的链表 根据链表结构的特性,在队首插入和删除节点比较容易,时间复杂度为o(1),但是在链表尾部插入和删除,都需要先找到链表尾部前一个节点的位置,这是需要遍历整个链表的,对应的时间复杂度为o(n); 因此根据单链表的特性,在链表中添加一个tai...

2020-01-06 00:05:38 254 0

原创 链表——动手封装自己的链表

package dataStructure.chapter4; /** * @Author: zjtMeng * @Date: 2020/1/1 22:24 * @Version 1.0 */ public class LinkedList<E> { private...

2020-01-05 13:24:50 71 0

原创 链表—— 最基础的动态数据结构

package dataStructure.chapter4; /** * @Author: zjtMeng * @Date: 2020/1/1 22:24 * @Version 1.0 */ public class LinkedList<E> { private...

2020-01-04 18:11:17 49 0

原创 队列——数组结构实现(循环队列)

本文接上一篇队列文章 三、循环队列 循环队列的优点 普通队列出队操作开销大:在出队操作时,索引为0后面的所有元素,都需要往前移动一位,元素越多,消耗的时间也越多,时间复杂度为O(N) 3.1 循环队列的逻辑 当元素较少时(tail位置在front后面),循环队列与普通队列出队操作一样,入队的...

2019-12-29 18:10:31 191 1

原创 队列——数组结构实现(普通队列)

一、队列 1. 队列的概念 队列的核心理念是:先进先出; 队列是一种特殊的线性表:它只允许在表的前端(front)进行删除操作,而在表的后端(tail)进行插入操作; 队列和栈都是一种操作受限的线性表,其中进行插入操作的端称之为队尾,进行删除操作的端称之为队首; 2.队列的属性 getFro...

2019-12-29 15:52:02 148 0

原创 栈——封装自己的栈

public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E pop(); E peek(); } 底层用数组实现的栈 /** * @a...

2019-12-22 16:32:16 45 0

原创 动态数组——二次封装自己的数组

package dataStructure.chapter1; /** * 自定义数组 * @Author: zjtMeng * @Date: 2019/12/15 12:46 * @Version 1.0 */ public class Array<E> { p...

2019-12-16 00:34:43 63 0

原创 时间处理(更新ing)

1.获取上周的周一(周日) @Test public void getLastMonday(){ LocalDate local = LocalDate.now();//获取当前时间 DayOfWeek dayOfWeek = local.getD...

2019-12-09 16:51:46 44 0

原创 LeetCode——3.无重复字符的最长子串

LeetCode题目地址 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题目...

2019-11-25 23:38:37 41 0

原创 LeetCode——2.两数相加

题目 描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 输入:(2 ->...

2019-11-18 11:31:12 25 0

原创 Java并发编程——Spring的线程安全

Spring没有保证bean的线程安全 1.线程安全问题的由来: 线程安全问题都是由全局变量及静态变量引起的 若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的; 若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。 2.spri...

2019-11-17 17:46:00 229 0

原创 Java并发编程——多线程的最佳实践

1.尽量使用本地变量 尽量使用本地变量,而不是创建一个类或实例的变量。 定义在函数内部的变量就是本地变量; 2.尽量使用不可变类 String、Integer等。不可变类可以降低代码中需要的同步数量; 3. 最小化锁的作用域范围:S=1/(1-a+a/n) 该公式称为:“阿姆达尔定律&qu...

2019-11-17 14:41:14 81 0

原创 算法——排序算法类模板

package algorithms.example; /** * @Author: zjtMeng * @Date: 2019/11/14 22:15 * @Version 1.0 */ public class Example { /** * 排序算法的实现 ...

2019-11-15 00:24:22 55 0

原创 后端获取http请求中的参数

1.参数在请求url上,如:http://{host:port}/mnagement//{ruleId} 方法:在入口方法的参数前面,使用@PathVariable注解,并且变量名与url中大括号中变量名一致,即可直接传入该方法中 获取其中{ruleId}的示例代码: //对应请求:http:/...

2019-11-14 12:54:43 316 0

原创 SpringBoot+Mybatis 配置多数据源

目的: 在springBoot项目中添加database1数据库和database2数据库 第一步:修改application.properties配置文件    1. 在application.properties文件中追加了以下内容 #mysql database1数据库 spring.dat...

2019-11-14 11:32:07 34 0

原创 剑指offer——变态青蛙跳

题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法; 规律: 一级台阶:1 = 2^0; 二级台阶:2 = 2^1; 三级台阶:4 = 2^2; 四级台阶:8 = 2^3 … n级台阶:count = 2^(n-1) 代码实现 pub...

2019-11-12 11:23:31 17 0

原创 剑指offer——青蛙跳

问题 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 方法一:递归 public class Solution1 { /** * 运行时间:489ms * 占用内存:9308k * @p...

2019-11-12 00:04:53 16 0

原创 剑指offer——斐波那契数列

题目: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 方法一:递归求解(不推荐) public class FibonacciDemo1 { public static int Fibonacci(int n) {...

2019-11-11 23:24:53 23 0

原创 Git命令操作

工作区 ----- git add ----> 暂存区 ----- git commit----> 仓库 一、仅本地操作 1.本地创建文件,其中“-p”确保目录名称存在,不存在的就建一个。 mkdir-p demo_git #创建demo_git文件夹 2.git init ...

2019-11-04 11:31:31 45 0

原创 Java并发编程——死锁与并发最佳实践

一、死锁 1.产生的必要条件 互斥条件:进程对锁分配的资源进行排他性使用; 请求和保持条件:线程已经保持了一个资源,但是又提出了其他请求,而该资源已被其他线程占用; 不剥夺条件:在使用时不能被剥夺,只能自己用完释放 环路等待条件:资源调用是一个环形的链; 2.死锁示例 示例代码: /** *...

2019-11-03 18:59:35 59 0

原创 Java并发编程——线程池Executor

一、线程池Executor 1. 传统 new Thread的弊端 每次new Thread 新建对象,性能差; 线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多的系统资源导致死机或者OOM(out of memory内存溢出),这种问题的原因不是因为单纯的new一个Thread,...

2019-11-03 15:34:12 88 0

原创 Java并发编程——J.U.C组件FutureTask、ForkJoin、BlockingQueue

一、Runnable与Callable 1.Runnable与Callable对比 通常实现一个线程我们会使用继承Thread的方式或者实现Runnable接口,这两种方式有一个共同的缺陷就是在执行完任务之后无法获取执行结果。从Java1.5之后就提供了Callable与Future,这两个接口就...

2019-10-30 15:03:40 46 0

原创 Java并发编程——AQS组件之ReentrantLock、ReentrantReadWriteLock、StempedLock以及Condition

一、可重入锁ReentrantLock 1.ReentrantLock介绍  java中有两类锁,一类是Synchronized,而另一类就是J.U.C中提供的锁。ReentrantLock与Synchronized都是可重入锁,本质上都是lock与unlock的操作。 2.ReentrantLo...

2019-10-28 12:34:48 70 0

原创 Java并发编程——AQS组件之CyclicBarrier

一、AQS组件CyclicBarrier 1.CyclicBarrier介绍 CyclicBarrier跟AQS其他组件,也是一个同步辅助类,它允许一组线程相互等待,直到到达某个公共的屏障点(循环屏障) CyclicBarrier可以完成多个线程之间相互等待,只有每个线程都准备就绪后才能继续往下...

2019-10-28 11:00:32 185 0

原创 Java并发编程——AQS组件之信号量(Semaphore)

一、AQS组件——信号量Semaphore 1. 信号量(Semaphore)介绍: 作用:用于保证同一时间并发访问线程的数目。 信号量在操作系统中是很重要的概念,Java并发库里的Semaphore就可以很轻松的完成类似操作系统信号量的控制; Semaphore使用acquire方法和rele...

2019-10-27 23:50:42 117 0

原创 Java并发编程——AQS组件之CountDownLatch

一、AQS 1. AQS介绍:   AQS(AbstractQueuedSynchronizer),是并发容器J.U.C(java.lang.concurrent)下locks包内的一个类。它实现了一个FIFO(FirstIn、FisrtOut先进先出)的队列。底层实现的数据结构是一个双向列表。 ...

2019-10-27 20:51:40 99 0

原创 Java并发编程——同步容器

一、同步容器类 1.Java中同步容器主要包括2类: 1).Vector、Stack、HashTable Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是Vector中的方法都是synchronized方法,即进行了同步措施。 Stack也是一个同步...

2019-10-26 20:20:25 49 0

原创 Java并发编程—— 线程不安全类与写法

一.概念 如果一个类的对象同时被多个线程访问,如果不做特殊的同步或并发处理,很容易表现出线程不安全的现象,比如抛出异常、逻辑处理错误等,这种类我们就称为线程不安全的类; 二. StringBuilder【线程不安全】和StringBuffer【线程安全】对比 1.两者同时存在的意义: 在只考...

2019-10-25 20:49:27 73 0

原创 Java并发编程——线程封闭

一、线程封闭 1.概念 **线程封闭:**当访问共享的可变数据时,通常需要同步。一种避免同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步,这种技术称为线程封闭(thread confinement)。 2. 线程封闭的几种策略 ① Ad-hoc 线程封闭: 维护线程的封闭性的职责...

2019-10-25 17:06:42 71 0

原创 Java并发编程——不可变对象

一、不可变对象 1. 不可变对象需要满足的条件: 对象创建以后其状态就不能修改; 对象所有的域都是final类型; 对象是正确创建的(在创建期间,this引用没有逸出) 2.具体来说可以通过以下策略来实现: 将类声明成final,那么该类就无法被继承了; 将所有的成员设置成private属性...

2019-10-25 12:40:38 51 0

原创 Java并发编程——原子性锁

一、同步锁 synchronized同步锁:依赖JVM来实现; 优缺点:不可中断,适合竞争不激烈的场景,可读性号; Lock:依赖特殊的CPU指令、代码来实现,如ReentrantLock 优缺点:可中断锁,多样化同步,适合竞争激烈的场景,能维持常态; 二、synchronized 常见四种用...

2019-10-24 18:32:32 64 0

原创 Java并发编程——Atomic基本类型

Atomic原子类 一. Atomic基本类型 1.基本数据类型 AtomicInteger AtomicLong AtomicBoolean 2.常用方法 int get() // 获取当前值 int getAndSet(int value) // 获取当前值并设置成指定值等价于普通变量的...

2019-10-24 18:04:44 101 0

原创 9月28日

文章目录代码纠错代码示例: 代码纠错 将对象中的某个字符串转换成字符串时,经常使用 ** toString() **方法,但是当该字段为null时,使用 ** toString() ** 方法就会报空指针错误,因此使用该方法前判断一下。 代码示例: public EfficiencyMonthD...

2019-09-28 16:28:34 19 0

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