- 博客(241)
- 收藏
- 关注
原创 RAID技术
RAID:廉价磁盘冗余阵列目的:提升磁盘性能思想:条带化+校验技术或者镜像技术条带化:将一块连续的数据分布式存储在各个磁盘当中,读取数据的时候可以从多个磁盘中同时进行读取,从而达到磁盘性能的提升最后通过校验技术(海明校验,CRC冗余校验)保障数据的可靠性条带宽度:在一个RAID组中有多少块磁盘来组成。例如上述图片条带宽度为4条带深度:指的是在单块磁盘中的大小条带大小:条带宽度 x 条带深度基本RAID级别:RAID0—RAID7。
2024-10-23 09:37:07 409
原创 DHCP学习
DHCP: Dynamic Host Configure Protocol,动态主机配置协议从BOOTP (bootstrap Protocol)协议发展而来UDP封装,服务器=67,客户端=68动态分配TCP/IP信息(IP地址、子网掩码、默认网关、DNS服务器等)分配出去的信息是有租约的-分配机制:类似于租房子租房子有租期,DHCP服务器将IP地址、子网掩码、默认网关、DNS服务器等等分配出去也是有租约的。
2024-03-08 15:48:47 1001
原创 数组指针和指针数组
首先,理解一下数组指针和指针数组这两个名词:“数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了——数组的指针:是一个指针,什么样的指针呢?指向数组的指针。指针的数组:是一个数组,什么样的数组呢?装着指针的数组。然后,需要明确一个优先级顺序:()>[]>*,所以:(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;p[n]:根据优先级,先看[],则p是一个数组,再结合。
2024-01-23 15:49:36 950 1
原创 Java_网络编程
网络编程的意思就是编写的应用程序可以与网络上其他设备中的应用程序进行数据交互。网络编程有什么用呢?这个就不言而喻了,比如我们经常用的微信收发消息就需要用到网络通信的技术、在比如我们打开浏览器可以浏览各种网络、视频等也需要用到网络编程的技术。我们知道什么是网络编程、也知道网络编程能干什么后了,那Java给我们提供了哪些网络编程的解决方案呢?Java提供的网络编程的解决方案都是在java.net包下。
2024-01-23 15:47:56 858
原创 Java_注解、动态代理
注解和反射一样,都是用来做框架的,我们这里学习注解的目的其实是为了以后学习框架或者做框架做铺垫的。那注解该怎么学呢?和反射的学习套路一样,我们先充分的认识注解,掌握注解的定义和使用格式,然后再学习它的应用场景。先来认识一下什么是注解?Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。比如:Junit框架的@Test注解可以用在方法上,用来标记这个方法是测试方法,被@Test标记的方法能够被Junit框架执行。
2024-01-18 11:13:39 985
原创 Java_单元测试、反射
在学习反射之前,有几个点需要给同学们提前交代一下,接下来我们学习的反射、动态代理、注解等知识点,在以后开发中极少用到,这些技术都是以后学习框架、或者做框架的底层源码。为了方便理解,我给同学们看一个我们见过的例子:平时我们用IDEA开发程序时,用对象调用方法,IDEA会有代码提示,idea会将这个对象能调用的方法都给你列举出来,供你选择,如果下图所示。原因是对象能调用的方法全都来自于类,IDEA通过反射技术就可以获取到类中有哪些方法,并且把方法的名称以提示框的形式显示出来,所以你能看到这些提示了。
2024-01-17 14:41:27 1561
原创 C11新特性
C++智能指针为什么需要给智能指针定义删除器?因为智能指针的作用是能够保证资源绝对的释放,而智能指针默认的释放方式是delete ptr.而当智能指针托管的资源是数组时,释放资源时就需要加[ ] ,当智能指针管理的不是一块内存的资源,而是一个文件,释放文件的方式绝对不是通过delete来实现的,因此通过智能指针管理资源需要能够释放相应的资源,如何给智能指针自定义删除器来指导智能指针正确的释放资源,这就是删除器的作用。
2024-01-16 14:19:15 421
原创 Java_线程池
线程池就是一个可以复用线程的技术。要理解什么是线程复用技术,我们先得看一下不使用线程池会有什么问题,理解了这些问题之后,我们在解释线程复用同学们就好理解了。假设:用户每次发起一个请求给后台,后台就创建一个新的线程来处理,下次新的任务过来肯定也会创建新的线程,如果用户量非常大,创建的线程也讲越来越多。然而,创建线程是开销很大的,并且请求过多时,会严重影响系统性能。而使用线程池,就可以解决上面的问题。如下图所示,线程池内部会有一个容器,存储几个核心线程,假设有3个核心线程,这3个核心线程可以处理3个任务。
2024-01-16 14:11:53 1053
原创 Java_线程通信
只有拿锁对象调用上述方法才不会出Bug,否则一定会出问题,因为只有锁对象知道当前谁占据了它,然后谁需要等待,所以锁对象调用wait()方法就会把占据它的方法进行等待,锁对象调notify()方法就会把等待锁对象的那些方法唤醒。再写测试类,在测试类中,创建3个厨师线程对象,再创建2个顾客对象,并启动所有线程。执行上面代码,运行结果如下:你会发现多个线程相互协调执行,避免无效的资源挣抢。比如下面案例中,有3个厨师(生产者线程),两个顾客(消费者线程)。接下来,我们先分析一下完成这个案例的思路。
2024-01-12 11:26:12 448
原创 Java_线程安全
首先,什么是线程安全问题呢?线程安全问题指的是,多个线程同时操作同一个共享资源的时候,可能会出现业务安全问题。下面通过一个取钱的案例给同学们演示一下。案例需求如下场景:小明和小红是一对夫妻,他们有一个共享账户,余额是10万元,小红和小明同时来取钱,并且2人各自都在取钱10万元,可能出现什么问题呢?如下图所示,小明和小红假设都是一个线程,本类每个线程都应该执行完三步操作,才算是完成的取钱的操作。但是真实执行过程可能是下面这样子的。
2024-01-12 10:30:30 992
原创 Java_线程的创建方式
不能直接去调用run方法,如果直接调用run方法就不认为是一条线程启动了,而是把Thread当做一个普通对象,此时run方法中的执行的代码会成为主线程的一部分。
2024-01-05 17:29:59 1160
原创 Java_日志技术
想搞清楚什么是日志,其实可以通过下面几个问题来了解的。系统系统能记住某些数据被谁操作,比如被谁删除了?想分析用户浏览系统的具体情况,比如挖掘用户的具体喜好?当系统在开发中或者上线后出现了Bug,崩溃了,该通过什么去分析,定位Bug?而日志就可以帮我们解决以上的问题。所以日志就好比生活中的日记,日记可以记录生活中的点点滴滴;而程序中的日志,通常就是一个文件,里面记录了程序运行过程中产生的各种数据。日志技术有如下好处。
2024-01-05 10:35:25 1064
原创 数组指针和指针数组
首先,理解一下数组指针和指针数组这两个名词:“数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了——数组的指针:是一个指针,什么样的指针呢?指向数组的指针。指针的数组:是一个数组,什么样的数组呢?装着指针的数组。然后,需要明确一个优先级顺序:()>[]>*,所以:(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;p[n]:根据优先级,先看[],则p是一个数组,再结合。
2024-01-04 17:29:08 873
原创 Java_特殊文件
前面学习了IO流,知道IO流是用来读、写文件中的数据。但是接触到的文件都是普通的文本文件,普通的文本文件里面的数据是没有任何格式规范的,用户可以随意编写,如下图所示。像这种普通的文本文件,没有任何规律可言,不方便程序对文件中的数据信息处理。在以后的Java开发过程中还会遇到一些特殊的文本文件,这些文件是有一些格式要求的,方便程序对文件中的数据进行处理。比如,后面我们会用到两种特殊的文本文件,一种是properties文件,还有一种是xml文件。如下图所示。首先,我们来认识一下,什么是XML?
2024-01-04 15:43:01 1004
原创 设计模式_结构型模式_装饰器模式
装饰器模式和代理模式很像。代理模式是已经知道代理谁了,所以只是对委托类的访问权限进行限制,因此用户只需要访问相应的代理类就可以。装饰器模式并不知道要装饰谁,所以需要传入具体的被装饰对象进行功能的添加。
2024-01-03 16:00:48 619
原创 Java_流
接下来,我们先学习OutputStreamWriter类,你看这个类名也比较有意思,前面是OutputStream表示字节输出流,后面是Writer表示字符输出流,合在一起意思就是表示可以把OutputStream转换为Writer,最终OutputStreamWriter其实也是Writer的子类,所以也算是字符输出流。序列化流是干什么用的呢?它是先把数据写到缓冲流内部的8BK的数组中(ps: 先攒一车货),等数组存满了,再通过原始的字节输出流,一次性写到目标文件中去(把囤好的货,一次性运走)。
2024-01-03 15:58:44 1028
原创 Java_IO流(字节流)
在前面已经学习过File类。知道File只能操作文件,但是不能操作文件中的内容。我们也学习了字符集,不同的字符集存字符数据的原理是不一样的。有了前面两个知识的基础,接下来我们再学习IO流,就可以对文件中的数据进行操作了。IO流的作用:就是可以对文件或者网络中的数据进行读、写的操作。如下图所示把数据从磁盘、网络中读取到程序中来,用到的是输入流。把程序中的数据写入磁盘、网络中,用到的是输出流。简单记:输入流(读数据)、输出流(写数据)IO流在Java中有很多种,不同的流来干不同的事情。
2023-12-29 10:06:25 1177
原创 设计模式_结构型模式_适配器模式
公司里面做项目会使用第三方的插件(库),由于接口不兼容会添加很多的适配器类。项目的现有接口和想使用的第三方库的接口根本不兼容。解决。
2023-12-27 16:22:39 716 1
原创 Java_字符集
前面我们已经学习了File类,通过File类的对象可以对文件进行操作,但是不能操作文件中的内容。要想操作文件中的内容,我们还得学习IO流。但是在正式学习IO流之前,我们还需要学习一个前置知识叫做字符集,只有我们把字符集搞明白了,再学习IO流才会更加丝滑。
2023-12-27 10:20:56 781
原创 Java_File类
学习完递归是什么,以及递归的执行流程之后,我们再回过头来用递归来找文件夹中子文件夹的内容。但是File对象封装的路径是存在还是不存在,是文件还是文件夹其实是不清楚的。答案如下图所示:可以是变量、可以是数组、可以是对象、可以是集合,但是这些数据都是存储在内存中的,只要程序执行结束,或者断点了,数据就消失了。答案如下图所示:可以将数据以文件的形式存在硬盘里,即使程序结束了,断点了只要硬盘没坏,数据就永久存在。,通过File类提供的方法可以获取文件大小、判断文件是否存在、创建文件、创建文件夹等。
2023-12-25 16:56:20 1004
原创 Java_Stream流
接下来学习一个全新的知识,叫做Stream流(也叫Stream API)。它是从JDK8以后才有的一个新特性,是专业用于对集合或者数组进行便捷操作的。最后,我们再学习Stream流的终结方法。这些方法的特点是,调用完方法之后,其结果就不再是Stream流了,所以不支持链式编程。好,接下来我们正式来学习Stream流。先不用知道这里面每一句话是什么意思,具体每一句话的含义,待会再一步步学习。学习Stream流我们接下来,会按照下面的步骤来学习。,找出姓张,且是3个字的名字,存入到一个新集合中去。
2023-12-25 10:09:48 594
原创 Java_集合进阶Map实现类
比如有如下案例:往HashMap集合中存储Student对象作为键,学生的家庭住址当做值。要求,当学生对象的姓名和年龄相同时就认为键重复。
2023-12-22 16:01:21 962
原创 Java_集合进阶Map集合
各位同学,前面我们已经把单列集合学习完了,接下来我们要学习的是双列集合。首先我们还是先认识一下什么是双列集合。所谓双列集合,就是说集合中的元素是一对一对的。Map集合中的每一个元素是以key=value的形式存在的,一个key=value就称之为一个键值对,而且在Java中有一个类叫Entry类,Entry的对象用来表示键值对对象。键不能重复,值可以重复,每一个键只能找到自己对应的值。下面我们先写一个Map集合,保存几个键值对,体验一下Map集合的特点// 一行经典代码。按照键 无序,不重复,无索引。
2023-12-22 11:30:42 765
原创 Java_集合进阶(Collection和List系列)
已经学习过了ArrayList集合,但是除了ArrayList集合,Java还提供了很多种其他的集合,如下图所示:我想你的第一感觉是这些集合好多呀!但是,我们学习时会对这些集合进行分类学习,如下图所示:一类是单列集合元素是一个一个的,另一类是双列集合元素是一对一对的。Collection是单列集合的根接口,Collection接口下面又有两个子接口List接口、Set接口,List和Set下面分别有不同的实现类,如下图所示:可以自己写代码验证一下,各种集合的特点。
2023-12-20 09:23:18 1122
原创 【设计类】
一、设计并实现几个类,用于打开并读取不同类型的文件内容。1、不能使用系统默认构造、析构、拷贝构造、赋值操作符等;2、实现常用操作接口,如拼接、分隔、字符查找、替换等。
2023-12-20 09:10:26 423
原创 Java_异常
认识了什么是异常,但是无法为这个世界上的全部问题都提供异常类,如果企业自己的某种问题,想通过异常来表示,那就需要自己来定义异常类了。我们通过一个实际场景,来给大家演示自定义异常。需求:写一个saveAge(int age)方法,在方法中对参数age进行判断,如果age<0或者>=150就认为年龄不合法,如果年龄不合法,就给调用者抛出一个年龄非法异常。分析:Java的API中是没有年龄非法这个异常的,所以我们可以自定义一个异常类,用来表示年龄非法异常,然后再方法中抛出自定义异常即可。try {
2023-12-19 14:59:16 1170
原创 Java_正则表达式
整个部分放在括号内,并且带有 {1,2} 的量词,表示这个模式可以出现一次或两次,用来匹配邮件地址中的域名后缀(如.com、.net、.org等)。因此,这个正则表达式用于匹配符合一般电子邮件地址格式的字符串,包括 @ 符号前后的字符、域名部分和域名后缀。但需要注意的是,这只是一个基本的模式,实际上电子邮件地址的格式可能更复杂,也可能受到特定邮件服务器或应用程序的要求限制。在API中有一个类叫做Pattern,我们可以到API文档中搜索,关于正则表达式的规则,这个类都告诉我们了。这里把常用的整理好了。
2023-12-19 08:38:09 1106
原创 Java_常见算法
假设我们要查找的元素是81,如果是基本查找的话,只能从0索引开始一个一个往后找,但是如果元素比较多,你要查找的元素比较靠后的话,这样查找的此处就比较多。在学习二分查找之前,我们先来说一下基本查找,从基本查找的弊端,我们再引入二分查找,这样我们的学习也会更加丝滑一下。所以我们先分析选择排序算法的流程:选择排序的核心思路是,每一轮选定一个固定的元素,和其他的每一个元素进行比较;接下来,我们学习一种算法叫排序算法,它可以将无序的整数,排列成从小到大的形式(升序),或者从大到小的形式(降序)
2023-12-18 10:02:54 77
原创 Java_Lambda表达式&JDK8新特性(方法引用)
但是从另一个角度想,一旦我们学会了,会大大简化我们的代码书写,提高我们编写代码的效率,而且这些新的语法都是有前提条件的,遇到的时候就简化得了。因为方法引用是基于Lamdba表达式简化的,所以也要按照Lamdba表达式的使用前提来用,需要一个函数式接口,接口中代码的返回值类型是Car类型。我们知道Lambda是用来简化匿名代码的书写格式的,而方法引用是用来进一步简化Lambda表达式的,它简化的更加过分。需要给说明一下的是,在使用Lambda表达式之前,必须先有一个接口,而且接口中只能有一个抽象方法。
2023-12-18 08:56:31 149
原创 Java_Arrays类
接下来学习的类叫做Arrays,其实Arrays并不是重点,但是我们通过Arrays这个类的学习有助于我们理解下一个知识点Lambda的学习。为了让Arrays知道按照什么规则排序,我们有如下的两种办法。我们先认识一下Arrays是干什么用的,Arrays是操作数组的工具类,它可以很方便的对数组中的元素进行遍历、拷贝、排序等操作。刚才我们使用Arrays操作数组时,数组中存储存储的元素是int类型、double类型,是可以直接排序的,而且默认是升序排列。如果数组中存储的元素类型是自定义的对象,如何排序呢?
2023-12-17 16:30:26 79
原创 求Top K问题
是将容器中的数据进行排序,排序的时间复杂度最差像冒泡是O(n^2),最好像快排是O(nlogn)。相当于将原始序列遍历一遍就可以找到相应的元素,其实也没有必要将所有的元素进行排序,其他的元素有不有序并不关心。因此就可以使用大小根堆过滤Top K问题。互联网公司的智能推荐,像用户使用频率最高的一些应用,一些热点新闻,搜索频率最高的一些关键字等等原始序列:64 45 52 80 66 68 0 2 18 75如何求出序列中最小/大的前3个元素?
2023-12-17 10:18:36 79
原创 常用API(类)
接下来我们学习的这个类叫BigDecimal,至于它是干什么用的,我们先不说。为了解决计算精度损失的问题,Java给我们提供了BigDecimal类,它提供了一些方法可以对数据进行四则运算,而且不丢失精度,同时还可以保留指定的小数位。学完Date类和SimpleDateFormat类之后,我们再学习一个和日期相关的类,它是Calendar类。Math是数学的意思,该类提供了很多个进行数学运算的方法,如求绝对值,求最大值,四舍五入等,话不多说,直接上代码。先来演示Period类的用法,它的方法如下图所示。
2023-12-15 17:14:28 548
原创 Java_泛型
接下来我们学习一下自定义泛型类,但是有一些话需要给大家提前交代一下:泛型类,在实际工作中一般都是源代码中写好,我们直接用的,就是ArrayList这样的,自己定义泛型类是非常少的。自定义泛型类的格式如下//这里的<T,W>其实指的就是类型变量,可以是一个,也可以是多个。public class 类名<T,W>{接下来,我们自己定义一个MyArrayList泛型类,模拟一下自定义泛型类的使用。注意这里重点仅仅只是模拟泛型类的使用,所以方法中的一些逻辑是次要的,也不会写得太严谨。
2023-12-15 09:55:32 254
原创 Java_基础_final & 抽象类 & 接口
1.final修饰类,类不能被继承2、final修饰方法,方法不能被重写了3、final可以修饰变量总规则:有且仅能赋值一次变量:一,局部变量二,成员变量------1、静态成员变量------2、实例成员变量。
2023-12-14 10:28:22 172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人