![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
@java小白
Software Developer Engineer
展开
-
2. Add Two Numbers
2. Add Two Numberspublic ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode p = l1, q = l2, curr = dummyHead; int carry = 0; while (p !=...原创 2020-03-22 21:37:46 · 138 阅读 · 0 评论 -
java并发编程 笔记十四
volatile 原理volatile 的底层实现原理是内存屏障,Memory Barrier(Memory Fence)对 volatile 变量的写指令后会加入写屏障对 volatile 变量的读指令前会加入读屏障1. 如何保证可见性写屏障(sfence)保证在该屏障之前的,对共享变量的改动,都同步到主存当中public void actor2(I_Result r) {...原创 2020-03-21 10:54:26 · 126 阅读 · 0 评论 -
java并发编程 笔记十三
终止模式之两阶段终止模式在一个线程 T1 中如何“优雅”终止线程 T2?这里的【优雅】指的是给 T2 一个料理后事的机会。1. 错误思路使用线程对象的 stop() 方法停止线程stop 方法会真正杀死线程,如果这时线程锁住了共享资源,那么当它被杀死后就再也没有机会释放锁,其它线程将永远无法获取锁使用 System.exit(int) 方法停止线程目的仅是停止一个线程,但这种...原创 2020-03-21 10:37:34 · 235 阅读 · 0 评论 -
java并发编程 笔记十二
Java 内存模型JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受 cpu 缓存的影响有序性 - 保证指令不会受 cpu 指令并行优化的影响可见性退不出的循环先来看一个现象,main...原创 2020-03-21 10:34:46 · 235 阅读 · 0 评论 -
java并发编程 笔记十一
同步模式之顺序控制1. 固定运行顺序比如,必须先 2 后 1 打印1.1 wait notify 版 // 用来同步的对象 static Object obj = new Object(); // t2 运行标记, 代表 t2 是否执行过 static boolean t2runed = false; public static void main(...原创 2020-03-19 22:32:14 · 170 阅读 · 0 评论 -
java并发编程 笔记十
ReentrantLock相对于 synchronized 它具备如下特点可中断可以设置超时时间可以设置为公平锁支持多个条件变量与 synchronized 一样,都支持可重入基本语法// 获取锁reentrantLock.lock(); try { // 临界区 } finally { // 释放锁 ...原创 2020-03-19 22:24:10 · 97 阅读 · 0 评论 -
java并发编程 笔记九
重新理解线程状态转换假设有线程 Thread t情况 1 NEW --> RUNNABLE当调用 t.start() 方法时,由 NEW --> RUNNABLE情况 2 RUNNABLE <--> WAITINGt 线程用 synchronized(obj) 获取了对象锁后调用 obj.wait() 方法时,t 线程从 RUNNABLE --> WA...原创 2020-03-19 22:15:23 · 155 阅读 · 0 评论 -
java并发编程 笔记八
Park & Unpark基本使用它们是 LockSupport 类中的方法// 暂停当前线程LockSupport.park();// 恢复某个线程的运行LockSupport.unpark(暂停线程对象)特点与 Object 的 wait & notify 相比wait,notify 和 notifyAll 必须配合 Object Monitor 一起使用...原创 2020-03-19 21:59:54 · 512 阅读 · 0 评论 -
java并发编程 笔记七
同步模式之保护性暂停1. 定义即 Guarded Suspension,用在一个线程等待另一个线程的执行结果要点有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject如果有结果不断从一个线程到另一个线程那么可以使用消息队列(见生产者/消费者)JDK 中,join 的实现、Future 的实现,采用的就是此模式因为要等待另一方的结果,因此归类到同步模式...原创 2020-03-19 20:40:23 · 116 阅读 · 0 评论 -
1 Two Sum
题目地址: 1. Two Sum参照里面第三种解法我产生了一个疑惑:为啥要把complement当成key?一般键值对的话,complement应该是value,而i才是key才对。public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>()...原创 2020-03-14 22:33:35 · 113 阅读 · 0 评论 -
设计模式笔记十二 模板模式
豆浆制作问题编写制作豆浆的程序,说明如下:制作豆浆的流程 选材—>添加配料—>浸泡—>放到豆浆机打碎通过添加不同的配料,可以制作出不同口味的豆浆选材、浸泡和放到豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的请使用 模板方法模式 完成 (说明:因为模板方法模式,比较简单,很容易就想到这个方案,因此就直接使用, 不再使用传统的方案来引出模板方法模式 )模板方...原创 2020-03-13 15:14:16 · 177 阅读 · 0 评论 -
设计模式笔记十一 代理模式
代理模式(Proxy)代理模式的基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK 代理、接口代理)和 Cglib 代理 (可以...原创 2020-03-13 09:43:04 · 106 阅读 · 0 评论 -
设计模式笔记九 外观模式
影院管理项目组建一个家庭影院:DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关开爆米花机放 下 屏 幕 开 投 影 仪 开音响开 DVD,选 dvd去拿爆米花调 暗 灯 光 播放观影结束后,关闭各种设备传统方式解决影院管理传统方式解决影院管理问题分析在 ClientTest 的 main 方法中,创建...原创 2020-03-11 19:30:38 · 107 阅读 · 0 评论 -
设计模式笔记八 组合模式
学校院系展示需求看一个学校院系展示需求编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。传统方案解决学校院系展示存在的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的实际上我们的要求是 :在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系, 因此这种方案,不能...原创 2020-03-10 22:02:09 · 103 阅读 · 0 评论 -
设计模式笔记七 装饰者模式
星巴克咖啡订单项目(咖啡馆):咖啡种类/单品咖啡:Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡)调料:Milk、Soy(豆浆)、Chocolate要求在扩展新的咖啡种类时,具有良好的扩展性、改动方便、维护方便使用 OO 的来计算不同种类咖啡的费用: 客户可以点单品咖啡,也可以单品咖啡+调料组合。方案 1-解决星巴克咖啡...转载 2020-03-09 17:12:01 · 108 阅读 · 0 评论 -
设计模式笔记六 桥接模式
手机操作问题现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网,打电话等),如图:传统方案解决手机操作问题传统方法对应的类图传统方案解决手机操作问题分析扩展性问题(类爆炸),如果我们再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果我们增加一个手机品牌,也要在各个手机样式类下增加。违反了单一职责原则,当我们增加手机样式时,要同时增加所有品牌的手机,这样...原创 2020-03-09 15:39:17 · 127 阅读 · 0 评论 -
设计模式笔记四 适配器模式
基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为三类:类适配器模式、对象适配器模式、接口适配器模式工作原理适配器模式:将一个类的接口转换成另一种接口.让原本接口不兼容的类可以兼容从用户的角度看不到...原创 2020-03-09 15:17:08 · 190 阅读 · 0 评论 -
设计模式笔记五 建造者模式
盖房项目需求需要建房子:这一过程为打桩、砌墙、封顶房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.请编写程序,完成需求.传统方式的问题分析优点是比较好理解,简单易操作。设计的程序结构,过于简单,没有设计缓存层对象,程序的扩展和维护不好. 也就是说,这种设计方案,把产品(即:房子) 和 创建产品的过程(即:建房子流程) 封装在一起,耦合...原创 2020-03-04 12:53:31 · 123 阅读 · 0 评论 -
设计模式笔记四 原型模式
原型模式-基本介绍基本介绍原型模式(Prototype 模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即 对象.clone()形象的理解:孙大圣拔出猴...原创 2020-03-03 21:34:53 · 90 阅读 · 0 评论 -
设计模式笔记三 抽象工厂模式
看一个披萨的项目:要便于披萨种类的扩展,要便于维护披萨的种类很多(比如 GreekPizz、CheesePizz 等)披萨的制作有 prepare,bake, cut, box完成披萨店订购功能。使用传统的方式来完成思路分析(类图)传统的方式的优缺点优点是比较好理解,简单易操作。缺点是违反了设计模式的 ocp 原则,即对扩展开放,对修改关闭。即当我们给类增加新功能的时候...原创 2020-03-02 17:18:04 · 134 阅读 · 0 评论 -
依赖倒转原则
依赖倒转原则为设计模式七大原则中的一个。基本介绍依赖倒转原则(Dependence Inversion Principle)是指:高层模块不应该依赖低层模块,二者都应该依赖其抽象抽象不应该依赖细节,细节应该依赖抽象依赖倒转(倒置)的中心思想是面向接口编程依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构...原创 2020-02-29 13:17:05 · 358 阅读 · 0 评论 -
java并发编程 笔记六
Monitor 概念Java 对象头以 32 位虚拟机为例普通对象数组对象其中 Mark Word 结构为Monitor 结构如下刚开始 Monitor 中 Owner 为 null当 Thread-2 执行 synchronized(obj) 就会将 Monitor 的所有者 Owner 置为 Thread-2,Monitor中只能有一个 Owner在 T...原创 2020-02-28 21:15:19 · 181 阅读 · 0 评论 -
设计模式 笔记一
设计模式的目的编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好代码重用性 (即:相同功能的代码,不用多次编写)可读性 (即:编程规范性, 便于其他程序员的阅读和理解)可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)使程...原创 2020-02-28 11:38:53 · 195 阅读 · 0 评论 -
java并发编程 笔记五
变量的线程安全分析成员变量和静态变量是否线程安全?如果它们没有共享,则线程安全如果它们被共享了,根据它们的状态是否能够改变,又分两种情况如果只有读操作,则线程安全如果有读写操作,则这段代码是临界区,需要考虑线程安全局部变量是否线程安全?局部变量是线程安全的但局部变量引用的对象则未必如果该对象没有逃离方法的作用访问,它是线程安全的如果该对象逃离方法的作用范围,需要考...原创 2020-02-27 21:31:56 · 217 阅读 · 0 评论 -
java并发编程 笔记二
Java 线程方法一,直接使用 Thread// 创建线程对象Thread t = new Thread() { public void run() { // 要执行的任务 }};// 启动线程t.start();方法二,使用 Runnable 配合 Thread把【线程】和【任务】(要执行的代码)分开Thread 代表线程Runnable 可运行的任务(线程要执...原创 2020-02-27 20:14:48 · 182 阅读 · 2 评论 -
java并发编程 笔记四
阻塞式的解决方案synchronized语法:synchronized(对象) // 线程1, 线程2(blocked){ 临界区}解决static int counter = 0;static final Object room = new Object();public static void main(String[] args) throws InterruptedE...原创 2020-02-27 14:37:40 · 223 阅读 · 0 评论 -
java Arraylist题目和使用
题目:利用ArrayList制作一个学生信息系统 ,可以添加学生,按学号查询学生,删除学生,修改学生信息。可以用元素再集合中的位置表示班级序号import java.util.*;import java.util.ArrayList;public class arraylist { ArrayList<String> list = new ArrayList<St...原创 2019-05-12 17:35:25 · 614 阅读 · 0 评论 -
Java 判断用户输入变量定义语句 split()方法
知识点:提取最后一个字符String s="需要被提取的字符。";int start=s.length()-1;int end=s.length();String ss=s.subString(start,end);https://blog.csdn.net/c_staunch/article/details/82706017数组转列表https://blog.csdn....原创 2019-04-27 21:57:30 · 739 阅读 · 0 评论 -
java 调用类的构造函数
注:本文非标准教程,仅是总结个人学习过程,可能存在纰漏,如有错误之处欢迎留言告知,非常感谢题目:一、·定义图书类Book,包含属性(全部私有):书名,作者,出版社,价格,ISBN,构造函数1:通过参数传递书名给书名属性赋值;构造函数2:通过参数传递书名、作者给相关属性赋值;构造函数3:通过参数传递书名、作者、出版社给相关属性赋值;构造函数4:通过参数传递书名、作者、出版社、价格给相关...原创 2019-04-03 13:43:52 · 8802 阅读 · 0 评论 -
java swing求平方根
注:本文非标准教程,仅是总结个人学习过程,可能存在纰漏,如有错误之处欢迎留言告知,非常感谢在图形界面下,可以:使用文本框对象(TextField) 获取用户输入的数据。使用标签对象(Label)或文本框对象输出数据。使用命令按纽(Button)来执行命令。Java Application需要首先创建自己的图形界面.• 通过创建一个Frame创建自己的用户界面,在构建AppFram...原创 2019-04-05 19:42:10 · 425 阅读 · 0 评论 -
java 构造函数 刷题
题目一:Box类 书名,作者,价格1、构造函数 书名赋值2、构造函数,给书名,作者赋值3、构造函数 书名,价格赋值main()l两个对象:1 “Java”2 “C#” 34.5public class Box { String bookname; String author; double price; Box(String newbookname){ ...原创 2019-03-26 14:58:14 · 648 阅读 · 0 评论 -
Java初学者 定义水仙花类和判断闰年
**注:本文非标准教程,仅是总结个人学习过程,可能存在纰漏,如有错误之处欢迎留言告知,非常感谢一、定义水仙花类(Narcissus):定义方法isNarcissus(),用于判断一个数是否是水仙花数。定义方法printNarcissus(),用于输出所有的水仙花数,注意可以调用isNarcissus()方法来实现。水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如...原创 2019-03-12 18:41:29 · 432 阅读 · 0 评论 -
java 二维数组练习
艹猫镇楼。一、定义类Matrix属性为一个二维数组;方法1: 求属性数组某一行的最大值;方法2: 求属性数组某一列的最大值;方法3: 求属性数组某一行的最小值;方法4: 求属性数组某一列的最小值;方法5: 求数组的最大值;方法6: 求数组的最小值;方法7: 将二位数组的两行互换;import java.util.Scanner;public cl...原创 2019-03-19 19:02:38 · 1060 阅读 · 6 评论 -
java Scanner方法的使用
关于对象.nextLine();的使用package test;import java.util.*;public class Test{ public static void main(String []args) { Scanner scan=new Scanner(System.in); double a=scan.nextDouble();...原创 2019-03-08 17:42:02 · 3168 阅读 · 1 评论 -
java 知识总结
用于个人学习,排版比较乱,请见谅。java中的@Override标签,小细节大作用 java的多态(向上转型、向下转型)多态 强制向下转型可能会失败。如果父类的对象变量所引用的对象实际类型是父类型的,就不能被强制转化为子类型。所以可以用instanceof来判断。Java中instanceof关键字的理解构造方法中super()的作用显式调用父类构造只要父类有带参的构造函数,在子类中...原创 2019-05-29 15:00:20 · 195 阅读 · 0 评论 -
java多态 向上转型和向下转型
package com.up;public class Cat extends Animal{ public void eat(){ System.out.println("吃鱼"); } public void work(){ System.out.println("抓老鼠"); }}package com.up;public cl...原创 2019-07-18 17:38:30 · 133 阅读 · 0 评论 -
异常的体系结构
编译时异常和运行时异常/** * * 编译时异常 * IOException * FileNotFoundException * ClassNotFoundException * * * 运行时异常RuntimeException * NullPointException * ArrayIndexOutOfBoundsException * Clas...原创 2019-07-27 11:51:13 · 158 阅读 · 0 评论 -
使用IDEA遇到bug汇总
声明:本人是IDEA新手,记录下自己遇到的使用IDEA问题//=========================================================无法识别同一目录的包路径IDEA “Cannot resolve symbol” 解决办法...原创 2019-09-09 17:42:54 · 209 阅读 · 0 评论 -
static关键字、代码块、内部类的使用
/** * static关键字的使用 * * 1.static:静态的 * 2.static可以用来修饰:属性,方法,代码块,内部类 * * 3.使用static修饰属性:静态变量(或类变量) * 3.1属性,按是否使用static修饰,又分为:静态属性vs非静态属性(实例变量) * 实例变量:我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性,当修改其中一...原创 2019-07-22 19:25:37 · 140 阅读 · 0 评论 -
java 多线程
/** * 测试Thread中的常用方法: 1.start():启动当前线程,调用当前线程的run() * 2.run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中 * 3.currenThread():静态方法,返回执行当前代码的线程 4.getName():获取当前线程的名字 5.setName():设置当前线程的名字 * 6.yield():释放当...原创 2019-07-29 19:07:08 · 77 阅读 · 0 评论