自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言基础——指针

文章目录指针和地址指针和参数指针和数组 指针和地址 指针存储变量在内存中的地址,比如c是一个字符串,那么p就是一个指针,存储c的内存地址,形象地理解p“指向”c 在对象名称前面加&,返回内存中对象的地址,适用于变量和数组,不适用于表达式、常量和register变量。 p = &c; p现在就是一个指针,可以用*来表示。比如 int x = 1, y = 2, z[10]; int *ip; /* ip is a pointer to int */ ip = &x; /* ip n

2021-01-20 15:03:09 339

原创 Java网络编程——过滤器

JavaEE的规范(接口)之一,作用是拦截请求,应用场景:权限检查,事务管理… 使用过滤器: 建立一个类继承Filter接口,获取session对象,再用session里的数据来判断。 在配置web文件的时候,规定在什么地方使用过滤器。 <filter-mapping> <filter-name>AdminFilter</filter-name> <url-pattern>/admin/*</url-pattern>//过滤器安

2021-01-20 13:28:58 247

原创 Java网络编程——Servlet

文章目录简介生命周期继承类请求HttpServletRequest和HttpServletResponsebase标签重定向CookieSession 简介 Servlet是Java EE的规范之一,也就是接口。Servlet程序是运行在服务器上的Java小程序,根据HTTP协议可以接受客户端发来的请求,响应数据给客户端。 实现Servlet接口: 新建servlet接口的实现类,重写service方法。 在web.xml文件里写配置,举例: <servlet> <servle

2021-01-20 13:28:42 382

原创 Java网络编程——基础

文章目录基本概念TomcatXMLJSONJavaEE的结构 基本概念 请求(request):浏览器向服务器发送信息,要求服务器返回要求的数据。 响应(response):服务器向浏览器返回要求的数据。 JavaWeb三大组件:Servlet程序,Filter过滤器,Listener监听器 服务器:最主流的是tomcat Tomcat tomcat简介:官网下载压缩包后,解压到指定文件夹就可以使用。 开启和关闭: 1.在bin文件夹里找到开启,然后执行,关闭要么执行关闭程序,要么直接关

2021-01-20 13:27:56 181

原创 操作系统——虚拟内存

文章目录概述请求页面与页面置换调入调出页面 概述 虚拟存储是通过把进程中不需要立即使用的部分存到外存来扩大内存空间的一种技术。 局部性原理: 时间局限性:因为程序里存在大量的循环,所以一个内存部分被访问过一次还会再被访问。 空间局限性:访问某个内存部分的时候,通常会接着访问内存附近的部分。 虚拟存储的实际容量=Min(内存+外存之和,CPU的寻址范围),比如某计算机的CPU是32位的,内存是4GB,外存是512MB,那么虚拟存储的大小就是Min(222,232)=2^22。虚拟内存的最大容量就是CPU

2021-01-20 13:27:35 1027 1

原创 操作系统——内存

内存概述 内存是存放进程的存储器,可以按字节编址或按字编址。内存种存放进程的地址是物理地址,但一般不会在程序种使用物理地址,而是使用逻辑地址,在把进程装入内存时,需要把逻辑地址转化成物理地址。 地址:逻辑地址(相对地址),物理地址(绝对地址) 从源代码到变成进程运行: 编译:由源代码生成目标模块,把高级语言翻译成机器语言。 链接:由目标模块生成装入模块,形成完整的逻辑地址。 装入:把装入模块装入内存, 形成物理地址。 装入方式: 绝对装入:编译器负责地址转换,产生绝对地址。;装入程序按装入模块中的地址存储

2021-01-20 13:25:01 309

原创 操作系统——死锁

死锁发生的条件: 互斥条件:资源是竞争性的,有多个线程需要这个资源。 不可剥夺条件:只能靠线程主动释放资源,不能强行剥夺。 请求和保持条件:线程占用某些资源的同时,还请求其他资源。 循环等待条件:进程A需要的资源掌握在进程B手中,进程B需要的资源掌握在进程A手中。如果资源数大于1,这就是不充分条件,资源数为1就是充分必要条件。 死锁发生的场景: 争夺不可剥夺的系统资源,如打印机 请求和释放资源的顺序不当,如进程A占用资源1,进程B占有资源2,紧接着线程A申请资源2,进程B申请资源1。 信号量使用不当

2021-01-14 16:24:56 258

原创 操作系统——多进程

文章目录进程同步与互斥信号量管程 进程同步与互斥 有时并发的几个进程为了完成某个任务,需要按一定顺序先后进行操作,这种顺序就是直接制约关系,又叫进程同步。在同步操作时,多个进程需要访问同一个资源,这个资源叫临界资源。一个进程访问临界区时,其他进程都无法访问,这叫间接制约关系,也叫互斥。 互斥访问临界资源代码的组成部分: 进入区:负责检查能否进入临界区,如果可以,就设置正在的访问的标志,可以理解为加锁。 临界区:访问临界资源并操作数据的代码段。 退出区:解除正在访问临界区的标志,可以理解为解锁。 剩余区:其

2021-01-14 16:19:01 809

原创 操作系统——进程调度

文章目录调度层级进程调度调度算法的评价指标进程调度算法 在CPU分配资源的时候,我们需要考虑分配资源的规则,通过规则或者说算法选择一个进程给处理机执行就是处理机调度,就像银行排队是先到者优先还是VIP客户优先。 调度层级 调度的层级分为:高级、中级、低级。 高级调度是作业调度,通过特定算法把作业从外存调入内存。由于内存空间有限,系统无法给用户提交的所有作业分配内存,没有被分配到内存的作业的代码存放在外存。系统根据算法从外存中选择一个作业放入内存并创建PCB,让作业有权竞争CPU 的控制器,当作业调出后再销

2021-01-14 16:15:18 522

原创 操作系统——线程

文章目录线程的特点多线程模型 有时一个进程也需要同时完成多个任务,比如微信聊天的同时还要给对方发文件,这时就我们就在进程内部给各个功能划分出不同的线程,相当于轻量级的进程。引入线程后,线程就成为最小的CPU执行单元,在分配非CPU的系统资源时,我们才用到进程。 线程的特点 多核CPU计算机,进程内部的各个线程可以占用不同的CPU。 共享内存地址空间,线程通信无需系统干预。 共享进程的资源。 每个线程都有线程ID、线程控制块(TCB)。 几乎不拥有系统资源。 操作系统中,线程又分为用户级和内核级线程。用户级线

2021-01-14 16:09:31 343 1

原创 操作系统——进程

文章目录进程概述结构、组织方式和特征进程的状态进程控制进程通信 进程概述 进程是为了操作系统进行并发操作而引入的概念,是程序运行的过程,也可以看成是进程实体的运行过程,是资源分配和调度的独立单位。 结构、组织方式和特征 进程的结构就可以看成是进程实体的结构: PCB:进程的唯一标识。 代码段:内存中存放应用程序代码的地方 数据段:内存中存放应用程序要处理或执行后产生的数据的地方。 PCB的内容: 进程描述信息:进程标识符PID(创建时产生,唯一),用户标识符UID。 资源分配清单:进程分配到的资源,比如程序

2021-01-14 16:07:56 174

原创 操作系统——基础

文章目录概述中断和异常系统调用 概述 操作系统在硬件和应用程序、用户之间,控制、管理和分配计算机的软件和硬件资源,调度计算机工作,为用户和应用程序使用计算机提供方便的接口,是最基本的系统软件。 操作系统对计算机资源的管理方式: 处理机管理 存储器管理 文件管理 设备管理 举例:使用微信视频,先找到微信的执行程序启动,这就是文件管理。微信启动后,产生一个进程,操作系统把进程放到CPU里执行,这就是存储器管理。用视频聊天需要调用摄像头,操作系统把摄像头设备给这个进程使用,就是设备管理。 操作系统为用户和应用程

2021-01-14 16:04:54 187

原创 Java并发编程——多线程基础

文章目录创建线程的方法继承Thread类实现runnable接口实现Callable接口终止线程中断线程线程通信线程限流 创建线程的方法 继承Thread类 构造一个内部类,继承thread类,然后重写run()方法。 如果需要用到共享数据,那么必须是静态属性; 举例:thread\ThreadTest.java,thread\Window2.java 实现runnable接口 过程: 1.创建一个类实现runnable接口; 2.创建这个类的对象; 3.把这个对象作为参数,新建一个Thread类的对象;

2021-01-14 15:59:23 160

原创 Java基础——反射

反射与直接new的方式的区别: 编译的时候不知道造哪个类的对象,需要用到反射,因为反射具有动态性。比如,服务器不知道用户登录还是注册,因而不知道造谁的对象,所以需要用到反射。 反射与封装性: 反射解决的是能不能调的问题,封装性解决的是应该调谁的问题。 Class类 类的编译过程: 程序接受javac.exe命令后,会新建一个或多个字节码文件,以.class结尾。 类的加载过程: 使用java.exe命令运行字节码文件,首先是加载到内存中去,这就是运行时类。运行时类就是Class的对象,每个Class的实例都

2021-01-14 15:57:14 162 1

原创 Java基础——泛型

文章目录泛型类和泛型方法通配符 不使用泛型,使用Object的问题: 不安全,会混入其他类型的变量。 取用变量的时候,如果声明类型就要强转,很容易出现类型转换错误,特别是当混入其他类的时候。 泛型不能使用基本数据类型,只能使用类 实例化时,没有声明类型,就默认为Object类 泛型类和泛型方法 异常类不能声明为泛型 静态方法中不能使用泛型类,因为静态方法在实例化声明泛型前就已经加载。 泛型方法的泛型参数和泛型类没有关系 泛型方法可以声明为静态方法,因为是在方法调用时声明泛型参数,而不是实例化的时候。 *

2021-01-14 15:55:35 246

原创 Java基础——IO流

文章目录FileReader类FileInputStream类缓冲流转换流对象流随机存取文件流(RandomAccessFile)不常用的流 FileReader类 举例: IO\FileReaderWriterTest.jav; IO\FileWriterTest.java FileInputStream类 可以批量读写英文文本文件,英文字符只有一个字节,而其他语言占多个字节,就会出现乱码的情况。 如果一个一个读写或只是复制操作,不涉及控制台输出,文本文件还是可以用字节流处理。(.txt,.java,.C

2021-01-14 15:55:00 159

原创 Java基础——HashSet和TreeSet类

文章目录HashSetTreeSet HashSet 源码: 添加元素的过程: 先调用该元素所属类的hashCode()方法计算哈希值,再处理得到底层数组的索引位置。 如果得到的索引位置上已经有元素,二者的哈希值不一定是一样。这时,比较哈希值,如果相同,再用equals()方法比较,如果返回为true,添加失败。 如果哈希值相同而且用equals()方法比较返回为false,用链表的方式添加到这个元素的后面,即原来的元素指向新添加的元素。 *哈希值计算方法: 哈希值相当于是一个随机数。 乘数一般选31,

2021-01-09 19:26:18 212 1

原创 Java基础——ArrayList类和LinkedList类

文章目录ArrayListLinkedList实现类互转 ArrayList 相当于动态数组 ArrayList与LinkedList、Vector的异同: 同: ·都是List接口的实现类,存储有序、可重复数据 ·ArrayList与Vector的底层实现都是使用Object类型的数组 异: ·ArrayList是线程不安全的,效率更高,Vector是线程安全的,源码里的许多方法都是同步方法。 ·LinkedList的底层实现是使用双向链表,在插入、删除操作上效率更高。 ·ArrayList扩容的默认容量

2021-01-09 19:25:51 418 1

原创 Java基础——数组

内存分析 创建一个数组后,存在栈里,他的第一个元素在堆空间里的地址也就是首地址,就是该数组的内存地址,用一个十六进制数表示。 一开始数组里的值都默认为null/0,添加元素后被替代。 一旦数组再次初始化,原有的数组就被垃圾回收器回收,内存地址也会发生变化。 当方法执行完后,所有的数组出栈,内容也会被垃圾回收器回收。 二维数组 初始化方式: 1) int[][] array1 = new int[2][]; array1[0] = new int[1]; array1[0][0

2021-01-08 16:40:30 192

原创 Java基础——集合接口

文章目录Collection接口List接口Set接口Map接口 数组需要实现设定好固定长度,而现实中往往需要数据结构的长度可变,我们就需要基于新的数据结构——集合。和集合相关的接口主要Collection接口和Map接口。 Collection接口 add() addAll():添加一个collection对象 contains():用equals方法判断是否相等,从而判断是否包含,如果需要只判断自定义对象的内容是否相等,需要重写对象的equals方法 containsAll():用于判断是否包含coll

2021-01-08 16:17:37 273

原创 Java基础——如何处理程序出现的问题

文章目录一般try/catch语句throw/throws 语句 一般 过程:先抛出异常给JRE,再由JRE捕获异常。 分类:throwable 的 子类:Error(不需要程序员处理), Exception(chekcked;unchecked) 异常处理原则: 异常处理不能替代错误,比如用户名错误; 异常处理不能替代测试; 异常处理不能小粒度地处理,最好是整个任务放在一个try语句里; 异常处理最好在高层即父类进行。 常见unchecked异常处理方法: ArithmeticException,举例:

2021-01-08 15:59:11 184

原创 Java基础——File类和Scanner类

File类 File f1 = new File("e:/谷歌下载/results-pr01.xls"); f1.isFile(); f1.isDirectory(); File f2 = new File("e:/谷歌下载/","test.txt"); try { f2.createNewFile();<>如果文件不存在,创建路径后,还要用这个这个方法才可以创建<>

2021-01-08 15:30:33 403

原创 Java基础——时间相关类

文章目录Date类DateFormat类和SimpleDateFormat类Calendar类和GregorianCalendar类 Date类 方法: before(); after(); 源码: public Date() { this(System.currentTimeMillis());<>打印当前距1970.1.1零时过去的毫秒数<> } public long getTime() { return getTimeImp

2021-01-08 15:15:09 221

原创 Java基础——枚举类

使用保留字enum作为关键字修饰 public class Season { private final String seasonname; private final String seasondescr; private Season(String seasonname, String seasondescr) { this.seasonname = seasonname; this.seasondescr = seasondescr;

2021-01-08 15:13:51 130

原创 Java基础——包装类

包装类 将基本数据类型转化为对象操作,位于java.lang包,自动导入。 比如Integer类就是int类型的数字转化Integer对象 Integer.parseInt();//将字符串转化为数字 Integer i = new Integer("2323"); String s = i+"";//将数字转化为字符串 intValue();//将Integer转化int autoboxing(自动装箱)和unboxing(自动拆箱) 为了提高效率,Java 5之后在编

2021-01-08 15:11:50 137

原创 Java基础——String、String Builder和String Buffer类

文章目录String不同赋值方式不可变性StringBuilder的可变性StringBuffer String String实际上就是一个字符数组; 初始化方法: 1) char[] c = {‘a’,‘b’}; String s1 = new String©; 2)String s2 = new String{‘a’,‘b’}; 3)String s3 = “ab”; 常用方法: String s= "abc"; s.charAt(0); s.indexO

2021-01-08 15:02:16 402

原创 Java面向对象编程——面向对象编程(3)

文章目录基本概念强转多态final关键字abstract关键字抽象类接口 基本概念 子类调用关键词“extends”继承父类,也就拥有了父类的所有属性和方法,但一定可以全部访问,可以重写父类的方法,增加属性; Java的类只有单继承,即一个类最多只能继承一个类; 所有类,如果没有调用extends,那么默认继承Object类。 强转 父类、子类可以互相转,但子类之间不能转; 子类向上转的时候,就需要用()强制转型,举例: Object obj = new String("abcd"); String str

2021-01-08 14:54:17 131

原创 Java基础——面向对象编程(2)

静态值 内存分析 栈:每执行一个方法,就创建一个栈帧,执行完栈帧就被删除 堆:存放创建的对象并赋给对象地址 方法区:存放类的代码和常量、字符串、静态属性、方法 JVM类的运行过程: 代码、静态值、常量都放在方法区,创建的对象放在“堆”,运行的方法放在栈,运行一个创建一个栈帧,结束后栈帧被删除。 内部类 成员内部类: 非静态内部类: 可以调用外部类的方法、变量; 必须要外部类的对象创建后,才能创建内部类的对象;举例: public class User { class Administer {

2021-01-08 09:24:09 212

原创 Java基础——面向对象编程(1)

文章目录内存分析:内部类构造器参数值传递方法重写方法重载深拷贝与浅拷贝 对象是类的具体化 内存分析: 栈:每执行一个方法,就创建一个栈帧,执行完栈帧就被删除 堆:存放创建的对象并赋给对象地址 方法区:存放类的代码和常量、字符串、静态属性、方法 JVM类的运行过程: 代码、静态值、常量都放在方法区,创建的对象放在“堆”,运行的方法放在栈,运行一个创建一个栈帧,结束后栈帧被删除 内部类 成员内部类: 非静态内部类: 可以调用外部类的方法、变量; 必须要外部类的对象创建后,才能创建内部类的对象;举例: pu

2021-01-07 20:03:43 143

原创 Java基础——注释

文章目录一般注释文档注释类注释方法注释属性注释生成文档 当代码变多,甚至需要多个一起编写代码的时候,我们需要注明代码的相关信息,让其他人能更好理解代码。注释是给予提示或其他简短信息,当需要给出很多信息时,就需要文档注释,这些文字都不被执行。 一般注释 使用//标识单行注解 //把0赋值给a int a = 0; 使用/开头,/结尾,可以编写多行注解 /* *把0赋值给a *再把a加1 */ int a = 0; a++; 有时代码里又/*分隔符,这时就不适合使用这种形式的多行注释 文档注释 用/**开头

2021-01-06 17:03:30 139

原创 Java基础——控制语句

文章目录条件判断语句if...else语句三元运算符switch语句 条件判断语句 条件判断语句如果为真,就执行花括号内的语句,相当于人类语言中的“如果…那么…” if…else语句 使用if、else、else if等保留字,如果需要执行的语句就只有一个,就可以不加花括号。 int i = 1; if(i > 0) { i++; System.out.print(i); } 这里先判断i是不是大于0,大于0把i加1,再打印i。 if语句还可以和else语句组合 int i = 1; if(i

2021-01-06 15:59:31 211

原创 Java基础——运算符

文章目录四则运算:布尔运算:三元运算符位运算条件判断 四则运算: 加:+ 减:- 乘:* 整除:/ 取模:% x += 4等于x = x+4,同样x /= 4 等于x = x/4 i ++ 或++i等于i = i+1,只不过i++如果和其他操作结合,那么i会在操作结束后才加1,而++i则会在操作之前就加1。 布尔运算: 仅限于基本数据类型,如果满足就返回true,否则返回false 等:x == y 不等:x != y 小于:x < y 大于:x > y 与:&和

2021-01-06 13:47:07 224

原创 Java基础——如何表示数值

文章目录字面量、变量和常量基本数据类型整数类型浮点数类型字符类型布尔类型字符串 字面量、变量和常量 字面量(literal)是编程语言中对固定值的一种表示方法,或者说就是等号右边的数值。比如 int a = 123; char b = 'c'; 变量(variable):可以变化或赋值的数值。用**一个“=”**进行赋值,多于1个不行。比如上面的a和b就是变量,需要在前面先声明其类型。 常量(constant):赋值后不能改变数值的变量,如 final double c = 1.0; 基本数据类型 Ja

2021-01-05 17:28:33 1144 3

原创 Java基础——语法

文章目录类结构包命名规范 编程语言需要有一定的结构组织编写的代码,就像人的语言有语法一样。 类结构 类是Java语言最基本的逻辑单位,所有内容都必须放在类里,Java程序就是由一个一个类构成的。 public class HelloWorld{ int a; public void test(){ } } 一个.java文件内可以有多个类,但只能有一个public修饰的类,比如这里只有HelloWorld可以被public修饰。 类的构成: 成员变量/属性:用于存储数值或作为参数使用,比如这里

2021-01-05 15:29:07 272

原创 Java基础——搭建Java运行环境

文章目录术语 术语 JDK:Java开发工具, JRE:Java运行环境 Java SE: Java EE: open JDK

2021-01-05 13:48:37 343 1

原创 Java基础——HashMap类及源码

文章目录属性空参构造器添加数据第一次添加:非第一次添加及扩容:具体扩容操作扩容原理总结 属性 DEFAULT_INITIAL_CAPACITY : HashMap的默认容量,16 MAXIMUM_CAPACITY: :HashMap的最大支持容量,30位即2^30 DEFAULT_LOAD_FACTOR:HashMap的默认加载因子,为0.75,这是为了减少数组中出现链表的情况,也确保数组空间的利用率不过低 TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转化为红黑树,默认为8 U

2020-11-14 19:10:04 152

原创 String的不可变性与StringBuilder的可变性原理(JDK1.8)

文章目录String的不可变性StringBuilder的可变性原理:扩容原理: String的不可变性 String的底层是一个不可变的字符数组。 private final char value[]; 如果发生变化,即使长度一致,也要更改内存地址。 String s1 = "abc"; String s2 = s1; s2 = "mbc"; //结果为false System.out.println(s2 == s

2020-11-14 15:12:37 747

原创 红黑树基础

文章目录2-3 search trees红黑树(read black tree)简介基本操作 2-3 search trees 2 nodes:有2个指针,父节点只有一个key,左边的子节点比父节点小,右边的子节点比父节点大。 3 nodes:有3个指针,父节点有两个key,左边的子节点比两个key的value都小,中间的子节点在两个key的value中间,右边的子节点比两个key的val都大 添加规则:如果是2 nodes,那么插入一个节点就变成3 nodes, 如果是3 nodes,就先组成4 n

2020-11-13 09:40:25 215

原创 创建Java线程的方法

文章目录继承Thread类实现runnable接口实现Callable接口线程池线程池的优点线程池的种类自定义线程池 继承Thread类 构造一个内部类,继承thread类,然后重写run()方法。 如果需要用到共享数据,那么必须是静态属性; 举例: class MyThread extends Thread{ @Override /* 重写run方法是为了让这个线程执行这个类的特殊任务; */ public void run() { super.r

2020-11-13 09:23:14 104

原创 Java并发编程——概念

文章目录并发基本概念并发级别并发编程特征Happen-Before原则线程生命周期线程优先级守护线程信号量倒计数器循环栅栏 并发基本概念 程序:为完成某个任务、用某种语言编写的一系列指令的集合,是静态的代码、静态的对象 进程:程序执行的过程,即正在执行的程序,是动态的、有生命周期的 线程:进程可进一步细分为线程,是程序内部的一条执行路径,如电脑管家杀毒、清理垃圾,就是两个 单核CPU:只有一个CPU,在同一个时间片内,只执行一个线程。通过时间片轮转,在不同线程之间迅速地切换线程,让人能感觉在

2020-11-13 09:14:28 169

空空如也

空空如也

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

TA关注的人

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