自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 线程安全synchronized方法synchronized块

package cn.threadTest.introduceOfThread;/** * 测试synchronized方法 */public class synchronizedWay { public static void main(String[] args) { // 保证售卖票的对象是一个 ConsumeTicket consumeTicket = new ConsumeTicket(30); new Thread(new Bu.

2020-10-25 15:59:01 165

原创 单例模式保证线程安全

package cn.threadTest.introduceOfThread;/** * 主要介绍线程同步机制: * 进程和线程的区别: * 进程是*操作系统*调度的基本单位,而线程是处理器(cpu)任务调度的基本单位 * 线程是进程的一部分, 进程 > 线程 * 每一个进程都分配单独的内存空间 * 而一个进程内的线程共享一份内存空间 * 一个进程崩溃后不影响其他进程 * 一个线程死掉,整个进程都会崩溃 * 因此:.

2020-10-25 15:56:48 295

原创 JMMjava内存模型

JMM : java memory modul : java内存模型简单的来说,jmm是一种协议,一种规范。它是一种缓存一致性协议,规定了数据读写的规则。JMM定义了线程工作内存和主内存之间的抽线关系,JMM规定了8个操作来完成主内存和工作内存的交互use:把工作内存的值传给执行引擎 assign:从执行引擎中得到的值传递给工作内存的变量中 lock:把变量表示为线程独占内存 unlock:解除独占内存标记 read (读取):作用于主内存变量,它把一个变量的值从主内存传输到线程的..

2020-10-21 20:45:41 316

原创 java垃圾回收

首先看下jvm内存中主要需要回收垃圾的区域Heap 回收分为轻量级的GC和重量级的GC , 又称为GC和full GCGC: 轻量级GC主要作用区域为新生区(Edem),每次轻GC后将会清空Edem区域,未被清除的对象保存到幸存区中,也就是图中的from和to的总称;当幸存区中的对象达到默认存活次数后,该对象进去老年区。默认存活次数是15, 可以修改配置参数修改这个值--X:MaxTenuringThreshold=? 来修改存活次数。四种垃圾回收算法...

2020-10-21 20:30:00 150

原创 java内存分区

java内存分区: 按照分类分为五个部分: 1、 堆 主要组成部分之一,占用大量空间,线程共享区域。此内存区域的唯一目的就是存放对象实例。JDK1.8后去除永久代,将字符串常量池和运行时常量池实际存储在堆中,但是逻辑上还是属于方法区的。堆的组成如下: 2、 栈 栈中存放一个个栈帧,而每个栈帧对应一个个被调用的方法。或者说,这里面可以存放的数据类型有...

2020-10-21 20:01:02 796

原创 反射操作注解

package cn.JAVandReflection.AnnotationTest;import java.lang.annotation.Annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import ja.

2020-10-21 19:17:54 127

原创 注解

package cn.JAVandReflection.AnnotationTest;import java.lang.annotation.*;/** * 介绍什么是注解,以及自定义注解: * Annotation: * 作用:方便阅读程序、 对程序的检查和约束、 可以被其他程序读取(如用反射操作注解,ORM内部的一些原理等下一期讲解)作用对象: * 注解可以作用在包、类、方法、属性等上面 * 常见注解: * @Override * @Dep.

2020-10-21 18:43:46 91

原创 反射基本操作

* 本文主要介绍反射相关:* 反射:(Reflection) 是java被视为动态语言的关键,反射机制允许程序在动态执行期间借助ReflectionAPI动态的获取类的任何* 内部信息,并能直接操作对象的任何内部属性及方法。* 通过类加载器,加载完类之后,在堆内存的方法区中就产生了Class类型的对象(对于相同的类只有一个Class对象),这个对象包含了* 完整的类的结构信息,我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子,我们可以看到类的结构,所以,我们形象地称之为:反射.

2020-10-21 17:14:49 498

原创 打印流

package cn.four;import java.io.FileNotFoundException;import java.io.PrintStream;/** * 主要介绍PrintStream 打印流, 与其他流不同,PrintStream从不抛出IOException * 特点: * 1、 只负责输出 * 2、 不会抛出IOException * 构造方法: * PrintStream(File file) * PrintStre.

2020-10-17 15:34:12 151 2

原创 对象序列化和反序列化

package cn.four;import com.sun.org.apache.xpath.internal.objects.XObject;import java.io.*;/** * 介绍java的对象序列化操作 * 对象序列化: * 将一个对象序列化成字节流 * 对象的反序列化: * 将一个对象的字节流反序列化成对象 * 序列化的作用: * 1、 对象的持久化, * 2、 跨网络的数据交换,远程过程调用 * 要让一个类的对象支.

2020-10-17 15:33:40 104

原创 Properties

package cn.four;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Properties;import java.util.Set;/** *主要介绍Properties类 * 这个类是线程安全的, 多个类可以共享一个Properties对象, 而不需要外部同步 * Properties表示一组持久的属性,Properties可以.

2020-10-17 15:33:11 221 1

原创 缓冲字符流

package cn.four;/** * 本节介绍缓冲流 * 原理: * 将直接读取到的数据先放在缓冲区中byte数组 --> os调用 --> JVM调用 --> 程序 * 区分与原来的方式:原来是读取一个字节就返回一个字节 * 字节缓冲输入流: * BufferedInputStream: * 构造方法: * BufferedInputStream(InputStream in) * .

2020-10-17 15:32:08 113

原创 字符流

package cn.four;import java.io.*;/** * 主要介绍字符流 * 上节介绍了字节流,它可以读取所有文件,但是缺点是每次读取一个字节,如果遇到其他编码格式的文本,这些文本通常用 * 多个字节表示一个字符(文字),那么这种读取出来的文件就会出现乱码现象。因此,Java还有一个流交字符流,专门用来读取 * 不同编码格式下的文本。在读取时可以指定编码格式。 * 抽象基类: * Reader: * vo.

2020-10-17 15:31:33 96

原创 字节流

package three;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.lang.reflect.Field;/** * 介绍字节流 字符流的一些操作: * 简答理解: * 向内存中写的就是输入流,Input之类的 * 从内存中写出就是输出流,.

2020-10-16 17:40:01 164 1

原创 文件对象

package three;import java.io.File;import java.io.FileFilter;import java.io.FilenameFilter;import java.io.IOException;import java.util.Arrays;/** * 主要介绍文件操作相关: * java.io.File 直接处理文件和文件系统,File没有指定信息怎样从文件中读取或者存取到文件系统中 * File是文件和目录的抽象表示形式,与系统无关,任何系.

2020-10-16 17:39:21 380

原创 Map

package three;import java.util.HashMap;import java.util.Map;import java.util.Set;/** * 以下简单介绍Map接口的简单操作 * public interface Map<K,V> * 里面存储的是键值对形式 k=v 、无序 * 键的值不允许重复,但是允许为null,值的值允许重复且可以为null * 抽象方法摘要: * v.

2020-10-16 17:38:49 144

原创 Set

package three;import java.util.*;/** * Set 特点是无重复、五索引 * 底层是: * HashSet 哈希表 * 哈希表 = 数组 + 链表/红黑树 * LinkedHashSet 哈希表 + 链表 * 自定义类型需要重写hash方法和equals方法 * 重要用途:去重 * addAll(Collection<? extends E> c) */public class Operatio.

2020-10-16 17:38:17 89

原创 集合实现类

package three;import java.util.ArrayList;import java.util.LinkedList;/** * 介绍ArrayList 和 LinkedList的简单操作,由于Collection 和 List 中已经包含了的大多数的操作,这些操作ArrayList * 和 LinkedList也可以使用, 所以下面仅介绍二者独有的操作。 * ArrayList: implements List * 底层原理:数组实现, 每增加一个元素,都.

2020-10-16 17:37:47 137

原创 Link接口方法

package cn.test.two;import java.util.ArrayList;import java.util.Comparator;import java.util.List;/** * 前面介绍Collection接口的常用方法,接下来介绍Collection的子接口List的抽象方法,这些方法是List类型集合共有的方法。 * java.util.List extends Collection * 已经在Collection接口中介绍过的方法不在赘述 * * v.

2020-10-15 18:34:23 1918

原创 Collection接口方法

package cn.test.two;import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.Iterator;import java.util.function.Predicate;/** * 主要介绍 Collection 的共性抽象方法; 需要指定泛型 * bool add(E e) 添加一个元素 , * .

2020-10-15 18:33:32 170

原创 StringBuffer和StringBuilder

package cn.test.two;/** *StringBuffer 和 StringBuilder * StringBuffer 和 StringBuilder 相对于String类而言,都是可变的,String的底层byte数组是被final修饰的,不可改变 * 但是StringBuffer 和 StringBuilder 是可变的,再用这两个进行字符串处理的时候,不生成新的对象,在内存使用上要优于String *区别: * StringBuffer 是线程安全的,.

2020-10-15 18:32:50 77

原创 时间对象类

package cn.test.two;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/** * 介绍日期时间类的一些常用操作及方法 * Date类 * Date() 获取当前时间 * Date(long s) 将long类型的s<毫秒>转换为相应的时间 从1970/1/.

2020-10-15 18:32:10 89

原创 Math类的简单使用

package cn.test;import sun.nio.cs.ext.MacHebrew;/** * 介绍Math类的常用方法; 均是静态方法!!! * double pow(double a, double b) 计算a的b次方 * double sqrt(double a) 计算a的正平方根 * int abs(double a) 计算a的绝对值 * double ceil(double a) a向上取整 * double floor(double a) a.

2020-10-14 18:30:05 175

原创 Random的简单使用

package cn.test;import javax.management.relation.RelationNotFoundException;import java.util.Arrays;import java.util.Random;/** * 介绍Random类的常规用法 * 构造方法: * Random() * Random(long seed) * 如果创建的两个random对象有相同的seed,那么他们在同样条件下产生的随机数就相同.

2020-10-14 18:29:33 238

原创 字符串创建及使用

package cn.test;import java.util.Arrays;/** * 介绍字符串的常见创建方法以及常用方法 * 字符串,不可变类型,引用数据类型,默认值null, 在效果上相当于char[], 底层原理是byte[] * 构造方法: * String() 空参创建空串 注意:不等于null; * String(char[] array) 根据字符数组创建 * String(bute[] array) 根据字节数组创建 * .

2020-10-14 18:29:01 265

原创 基本输入Scanner简单使用

package cn.test;import java.util.Scanner;/** * 介绍scanner类的常用操作: * 构造方法: * 最常用,从指定输入流扫描值 * Scanner(InputStream source) *方法; * // next() 只读取输入直到空格就结束 * String next() * // nextLine() 读取输入,包括单词之间的空格和出回车以外的所有字符 * Stri.

2020-10-14 18:28:23 235

原创 包装类简单使用

package cn.test;/** * 介绍基本包装类的一些基本操作 * int Integer * char Character * 其他的包装类除了首字母大写外和基本数据类型名相同。 * 自动拆箱: 将包装类 --> 基本类型 * 自动装箱: 基本类型 --> 包装类 * 包装类的方法都是static的,可以直接类名调用 */public class OperationsOfPackagingGroup { public static void main.

2020-10-14 18:27:52 129

原创 Arrays常用方法介绍

package cn.test;import java.util.Arrays;/** * 以下介绍Arrays的常用操作方法 都是static 的静态方法 * int binarySearch() 二分查找,返回下标 * 常用格式: 最后一个参数都是要查找value的值 * binarySearch(数组, key) * binarySearch(数组, 起始下标, 末尾下标, key) * * boolean equals(array&l.

2020-10-14 18:27:19 222

原创 数组初始化

package cn.test;/** * @author: zhao * @createDate: 2020/10/14 * @description: 这个类用于测试数组的创建方式。 */public class InitArray { public static void main(String[] args) { /** * 数组是一个容器,它可以同时存储多个数据值,但是这些数据值都是相同类型的,他们可以是基本数据类型,也可以是引用数据类型.

2020-10-14 18:26:29 547

原创 定义一个可以修改属性的装饰器

# 首先需要定义一个访问装饰函数,用来对要修改属性的装饰器添加属性from functools import wraps, partialdef touch_attr(obj, func=None): if func is None: # 这样会返回:touch_attr(obj, 然后是一个被装饰的函数) 冻结参数obj return partial(touch_attr, obj) setattr(obj, func.__name__,...

2020-09-21 19:41:47 160

原创 链表类

可以实现中间插, 插入一个列表,序列化,# 实现链表类class Node: def __init__(self, value, next=None): self.value = value self.next = next class MyLinkList: def __init__(self, node=None): self._head = node def append(self, va...

2020-09-08 21:43:32 107

原创 上下文管理器

from queue import Queue# 自定义上下文类要实现__enter__ 和 __exit__ 方法class File: def __init__(self): self._q = Queue(maxsize=5) self.file_obj = None def __enter__(self, path, modle='rt'): if not self._q.full(): self.fi.

2020-08-26 17:25:41 119

原创 用闭包代替一个额外方法的类

import globimport osclass FindFile: """ 创建实例时指定查找文件格式 调用方法时指定文件夹路径 """ def __init__(self, path_name): self._path_name = path_name def fint_py_file(self, path=os.getcwd()): os.chdir(path) return glob.ig.

2020-08-26 17:25:00 170

原创 函数的参数

import random# 定义一个可以接受任意多个位置参数的函数def merge(*args): return random.sample(args, len(args) - 1 if len(args) - 1 > 0 else 1)# 或者我们定义一个可以指定选取个数的函数def merge_s(*args, num): return random.sample(args, num)# 或者我们想不指定num的值时候也能正常运行,那么我们可以指定一个默.

2020-08-25 15:36:28 118

原创 os和os.path

import osif __name__ == '__main__': path = 'C:/Program Files' # 获取当前工作目录 print("当前工作目录:%r" % os.getcwd()) # 改变当前工作目录支持相对路径 os.chdir('..') print("当前工作目录:%r" % os.getcwd()) # 获取指定文件夹下所有内容列表 print("path下内容列表:%r" % os.listdi.

2020-08-23 10:39:32 262

原创 zip和zip_longest

from itertools import zip_longest# zip可以创建一个迭代器,迭代器的长度和其中最短的输入序列长度相同, 示例如下:x = ['name', 'age', 'score', 'address']y = ['liming', 22, 78.6]if __name__ == '__main__': # zip函数可以添加多个序列, 不局限于两个 for m in zip(x, y): print(m, end=' ') # (.

2020-08-21 18:41:29 209 1

原创 迭代出元素的排列组合

# 排列组合# 如果你想要找出某个序列的排列组合情况,有以下三个函数可以供你使用:from itertools import permutations, combinations, combinations_with_replacementmy_items = ['c1', 'c2', 'c3']# permutations(item, length) 排列成长为length的所有可能情况,并以元组形式返回# 考虑元素位置def my_permutations(): for m in.

2020-08-21 18:28:18 246

原创 迭代器切片和过滤文本

from itertools import islice, dropwhile# 想对迭代器和生成器做切片操作x = (i ** 2 for i in range(50))# 用itertools.islice(iter, start, end)def my_slice(itor, start, end): for i in islice(x, start, end): print(i, end='\t')# 如果读取文件,想要跳过文件的所有注释行, 可以用dr.

2020-08-21 18:06:29 153

原创 datetime常规操作

from datetime import datetime, timedeltaif __name__ == '__main__': # 获取当前时间 a = datetime.today() # 或者 b = datetime.now() # 指定特定时间 c = datetime(2020, 8, 11, 17, 52, 43) print("today:{!r}".format(a)) print("now:{!r}".format.

2020-08-20 17:43:51 151

原创 random随机数常规操作

import random# random 模块采用马特赛特旋转算法, 这是一种确定性算法,可以根据random.seed函数来修改初始的种子# 产生一个0-1均匀分布的浮点数a = random.random()# 随机产生正数,可指定范围[] 范围为闭区间[0, 100]b = random.randint(0, 100)# 从序列中随机挑选一个元素values = [12, 24, 58, 69, 63, 99]c = list(random.choice(values) fo.

2020-08-20 17:01:44 222

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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