- 博客(20)
- 收藏
- 关注
原创 Java JUC(java.util.concurrent)上篇
1. JUC 简介 在 Java 5.0 提供了 java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类, 用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中的 Collection 实现等; volatile 关键字 volatile 关键字: 当多个线程进行操作共享数据时,可以保证内存中的数据是可见的; volatile 不具备"互斥性"; volatile 不能保证变量的"原子性"; 相较于 synch
2021-01-03 17:33:23
313
原创 工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 工厂模式可以分为三类: 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 工厂模式是创建型模式 创建型模式(Creational Pattern)对类的实例化过程进
2020-12-28 21:45:03
195
原创 mysql索引
索引: MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 概述: 索引依托于储存引擎的实现,因此每种储存引擎的索引不一定完全相同,并且每种存储引擎也不一定支持所有的索引类型,所有的存储引擎支持每个表最多16个索引,总索引长度至少为256个字节,mysql中的索引的储存类型主要是 B-Tree索引,Hash索引,不是全部但是这里直说这两种。 索引的分类 1,普通索引(单列索引): 2,唯一索引 :索引列的值必须唯一,但允许有空值 3,主键索引 :主键索引也是一种特殊的唯
2020-12-06 11:26:13
190
原创 Java内存模型
主内存与工作内存 Java内存模型规定了所有的变量都存储在主内存(Main Memory)中,此外每条线程还有自己的工作内存(Working Memory)。 线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,不能直接读写主内存中的变量。 并且,不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值得传递均需要通过主内存来完成,线程、主内存 也可以把这里的主内存与工作内存概念与JVM运行时数据区进行对应,主内存主要对应Java堆中
2020-11-26 19:55:22
114
原创 Volatile和Java 内存模型中的可见性、原子性和有序性
Java 内存模型中的可见性、原子性和有序性。 可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个线程马上就能看到。比如:用volatile修饰的变量,就会具有可见性。volatile修饰的变量不允许线程内部缓存和重排序,即直接修改内存。所以对其他线程是可见的。但是这里需要注意一个问题,volatile只能让被他修饰内容具有可见性,但不能保证它具有原子性。比如 volatile int a = 0;之后有一个操作 a++;这个变量a具有可见性,但是a++
2020-11-26 19:32:39
133
原创 java中static用法-静态导包
static用法一: 这大家应该都知道 1.修饰成员变量和方法 在类中,被static修饰的方法称作静态方法。同静态变量一样,静态方法可通过“类名.方法名”直接调用,而不需要创建对象调用。 2.静态代码块 随着类的加载而执行,而且只执行一次。执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。 执行顺序:静态代码块----->main方法----->非静态代码块-------->构造方法----->普通方法
2020-11-20 19:40:32
1013
原创 java基础特性
一、Java的基础特性 1.抽象 父类为子类提供一些属性和方法,子类根据业务需求实现具体的行为。 抽象类使用abstract进行修饰,子类要实现所有父类抽象方法,否则子类也是抽象类 2.封装 将对象的属性和方法结合为一个整体,不着重考虑对象内部的实现细节,一般用private来隐藏内部属性,通过set和get对外提供访问接口。 3.继承 java中的类是可以被继承的。子类继承父类的属性和方法,并根据自己的需求扩展新的属性和方法。java中的继承用extend关键字, override:重写,特点:方法名一样
2020-11-17 20:24:29
241
1
原创 用滑动窗口A题
什么是滑动窗口 滑动窗口可以看成数组中框起来的一个部分。在一些数组类题目中,我们可以用滑动窗口来观察可能的候选结果。当滑动窗口从数组的左边滑到了右边,我们就可以从所有的候选结果中找到最优的结果。 滑动窗口的重要性质是:窗口的左边界和右边界永远只能向右移动,而不能向左移动。这是为了保证滑动窗口的时间复杂度是 O(n)O(n)。如果左右边界向左移动的话,这叫做“回溯”,算法的时间复杂度就可能不止 O(n)。 用一个例题具体说明 *剑指 Offer - 和为s的连续正数序列 输入一个正整数 target ,输出所
2020-11-17 13:38:29
154
原创 leetcode之回文链表
回文链表 请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 想法一:找到链表中点,然后反转链表前一部分,或者链表后半部分,然后比较, 想法二:采用递归,先找到最后一个节点,在依次和第一个比较,(感觉这种方法更简洁一些,不过要在方法外定义个表头,占用空间,写了方法二的代码) class Solution { private ListNode first; public boole
2020-11-15 11:07:52
182
原创 从一道小题引出位运算符的学习
leetcode:只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗? 示例 1: 输入: [2,2,1] 输出: 1 示例 2: 输入: [4,1,2,1,2] 输出: 4 直接挨个查时间复杂度就高了,不过我还是写一下, public int singleNumber(int[] nums) { Arrays.sort(nums);
2020-11-14 16:43:53
149
原创 环形链表的不同解法_快慢指针
给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环, 如果链表中存在环,则返回 true 。 否则,返回 false 。 如下图 代表有环 解法一: 遍历这个链表,在遍历时将节点存入一个哈希表中,如果这个节点已存在,说明是环形链表, 代码如下: public class Solution { public boolean hasCycle(ListNode head) { HashSet<
2020-11-13 20:33:44
141
原创 反转链表的不同解法
反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 如题,一上来先用最好理解的方法:依此将后一节点链接到最前面。 具体逻辑是:将原本的头节点指向将要被放到头节点的节点的下一个节点,然后将p节点放到初始节点了前面,然后更新初始节点,再更新p节点 class Solution { public ListNode reverseList(ListNode head) {
2020-11-13 17:04:10
212
原创 LeetCode之自动机
字符串转换整数 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不
2020-11-13 14:37:37
251
原创 linux命令记录
Linux下查看和停止所有java进程 1.ps -ef | grep java 在Linux下查看所有java进程命令:ps -ef | grep java 停止特定java进程命令:kill -9 java进程序号 停止所有java进程命令:pkill - 9 java
2020-11-10 17:13:46
222
原创 Linux常用命令(关于部署)
1.检测是否有安装了Tomcat: rpm -qa|grep tomcat 2.查看Tomcat的进程ID: ps -ef|grep tomcat 3.查看运行的java文件 ps -ef|grep java 4.运行打包的jar文件 一、java -jar XXX.jar 这是最基本的jar包执行方式,但是当我们用ctrl+c中断或者关闭窗口时,程序也会中断执行。 二、java -jar XXX.jar & &代表在后台运行,使用ctrl+c不会中断程序的运行,但是关闭窗口会中断程序的运行
2020-10-16 15:19:53
145
原创 笔试小结
笔试小结 1.每份考卷都有一个8位二进制序列号。当且仅当一个序列号含有偶数个1时,它才是有效的。例如,00000000、01010011都是有效的序列号,而11111110不是。那么,有效的序列号共有() 个 答案居然是这样做的,着实没想到 解析:总共有2^8=256个序列,其中要么含有偶数个1,要么奇数个,所以对半分为128个。 2.六支笔,其笔身和笔帽颜色相同:但6支笔颜色各不相同,求全部笔身都戴错笔帽的可能性有多少种? 第一步,把第n个元素放在一个位置,比如位置k,一共有n-1种方法; 第二步,放编号
2020-10-15 14:32:15
2011
原创 笔试小结系列:写一个单例!延迟加载,线程安全,高性能
写一个单例!延迟加载,线程安全,高性能 上面提到延迟加载,所谓延迟加载,就是指当实际用到该对象时才加载对应类,否则只是声明,并未实际花费资源去初始化对象 首先先来一个最基本的,最最简单的 public class Singleton { private Singleton() {} //私有的构造函数 private static Singleton instance = null; public static Singleton getInstance() {
2020-10-14 23:37:56
396
原创 HashMap和Hashtable
HashMap和Hashtable的区别这两个类都是Map接口下的实现类,HashMap的线程不安全,但是存储效率高。Hashtable线程安全,他的底层put方法前面加的synchronized(同步)关键字,但他的存储效率低。合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLo
2020-05-30 10:52:01
178
原创 前端总结
HTML的学习总结 1. 概念: Hyper Text Markup Language 超文本标记语言 1.超文本: 不止是文本,结合标签及其他信息 超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本. 2.标记语言: 是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。与文本相关的其他信息(包括文本的结构和表示信息等)与原来的文本结合在一...
2019-09-18 20:59:34
271
原创 初识反射
反射 介绍:这是框架开发的灵魂 描述:将类的各个组成部分封装为其他对象,这就是反射机制 一、Java代码经历的三个阶段 (1)源代码阶段 1.我写了一个类,包括里面的属性和方法 2.javac进行编译,生成字节码文件(.class文件) (2)class阶段 1.把字节码加载进内存(用类加载器) (3)运行时阶段(生成对象) ...
2019-09-18 20:12:22
160
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅