RAID技术 RAID:廉价磁盘冗余阵列目的:提升磁盘性能思想:条带化+校验技术或者镜像技术条带化:将一块连续的数据分布式存储在各个磁盘当中,读取数据的时候可以从多个磁盘中同时进行读取,从而达到磁盘性能的提升最后通过校验技术(海明校验,CRC冗余校验)保障数据的可靠性条带宽度:在一个RAID组中有多少块磁盘来组成。例如上述图片条带宽度为4条带深度:指的是在单块磁盘中的大小条带大小:条带宽度 x 条带深度基本RAID级别:RAID0—RAID7。
DHCP学习 DHCP: Dynamic Host Configure Protocol,动态主机配置协议从BOOTP (bootstrap Protocol)协议发展而来UDP封装,服务器=67,客户端=68动态分配TCP/IP信息(IP地址、子网掩码、默认网关、DNS服务器等)分配出去的信息是有租约的-分配机制:类似于租房子租房子有租期,DHCP服务器将IP地址、子网掩码、默认网关、DNS服务器等等分配出去也是有租约的。
数组指针和指针数组 首先,理解一下数组指针和指针数组这两个名词:“数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了——数组的指针:是一个指针,什么样的指针呢?指向数组的指针。指针的数组:是一个数组,什么样的数组呢?装着指针的数组。然后,需要明确一个优先级顺序:()>[]>*,所以:(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;p[n]:根据优先级,先看[],则p是一个数组,再结合。
Java_网络编程 网络编程的意思就是编写的应用程序可以与网络上其他设备中的应用程序进行数据交互。网络编程有什么用呢?这个就不言而喻了,比如我们经常用的微信收发消息就需要用到网络通信的技术、在比如我们打开浏览器可以浏览各种网络、视频等也需要用到网络编程的技术。我们知道什么是网络编程、也知道网络编程能干什么后了,那Java给我们提供了哪些网络编程的解决方案呢?Java提供的网络编程的解决方案都是在java.net包下。
Java_注解、动态代理 注解和反射一样,都是用来做框架的,我们这里学习注解的目的其实是为了以后学习框架或者做框架做铺垫的。那注解该怎么学呢?和反射的学习套路一样,我们先充分的认识注解,掌握注解的定义和使用格式,然后再学习它的应用场景。先来认识一下什么是注解?Java注解是代码中的特殊标记,比如@Override、@Test等,作用是:让其他程序根据注解信息决定怎么执行该程序。比如:Junit框架的@Test注解可以用在方法上,用来标记这个方法是测试方法,被@Test标记的方法能够被Junit框架执行。
Java_单元测试、反射 在学习反射之前,有几个点需要给同学们提前交代一下,接下来我们学习的反射、动态代理、注解等知识点,在以后开发中极少用到,这些技术都是以后学习框架、或者做框架的底层源码。为了方便理解,我给同学们看一个我们见过的例子:平时我们用IDEA开发程序时,用对象调用方法,IDEA会有代码提示,idea会将这个对象能调用的方法都给你列举出来,供你选择,如果下图所示。原因是对象能调用的方法全都来自于类,IDEA通过反射技术就可以获取到类中有哪些方法,并且把方法的名称以提示框的形式显示出来,所以你能看到这些提示了。
C11新特性 C++智能指针为什么需要给智能指针定义删除器?因为智能指针的作用是能够保证资源绝对的释放,而智能指针默认的释放方式是delete ptr.而当智能指针托管的资源是数组时,释放资源时就需要加[ ] ,当智能指针管理的不是一块内存的资源,而是一个文件,释放文件的方式绝对不是通过delete来实现的,因此通过智能指针管理资源需要能够释放相应的资源,如何给智能指针自定义删除器来指导智能指针正确的释放资源,这就是删除器的作用。
Java_线程池 线程池就是一个可以复用线程的技术。要理解什么是线程复用技术,我们先得看一下不使用线程池会有什么问题,理解了这些问题之后,我们在解释线程复用同学们就好理解了。假设:用户每次发起一个请求给后台,后台就创建一个新的线程来处理,下次新的任务过来肯定也会创建新的线程,如果用户量非常大,创建的线程也讲越来越多。然而,创建线程是开销很大的,并且请求过多时,会严重影响系统性能。而使用线程池,就可以解决上面的问题。如下图所示,线程池内部会有一个容器,存储几个核心线程,假设有3个核心线程,这3个核心线程可以处理3个任务。
Java_线程通信 只有拿锁对象调用上述方法才不会出Bug,否则一定会出问题,因为只有锁对象知道当前谁占据了它,然后谁需要等待,所以锁对象调用wait()方法就会把占据它的方法进行等待,锁对象调notify()方法就会把等待锁对象的那些方法唤醒。再写测试类,在测试类中,创建3个厨师线程对象,再创建2个顾客对象,并启动所有线程。执行上面代码,运行结果如下:你会发现多个线程相互协调执行,避免无效的资源挣抢。比如下面案例中,有3个厨师(生产者线程),两个顾客(消费者线程)。接下来,我们先分析一下完成这个案例的思路。
Java_线程安全 首先,什么是线程安全问题呢?线程安全问题指的是,多个线程同时操作同一个共享资源的时候,可能会出现业务安全问题。下面通过一个取钱的案例给同学们演示一下。案例需求如下场景:小明和小红是一对夫妻,他们有一个共享账户,余额是10万元,小红和小明同时来取钱,并且2人各自都在取钱10万元,可能出现什么问题呢?如下图所示,小明和小红假设都是一个线程,本类每个线程都应该执行完三步操作,才算是完成的取钱的操作。但是真实执行过程可能是下面这样子的。
Java_日志技术 想搞清楚什么是日志,其实可以通过下面几个问题来了解的。系统系统能记住某些数据被谁操作,比如被谁删除了?想分析用户浏览系统的具体情况,比如挖掘用户的具体喜好?当系统在开发中或者上线后出现了Bug,崩溃了,该通过什么去分析,定位Bug?而日志就可以帮我们解决以上的问题。所以日志就好比生活中的日记,日记可以记录生活中的点点滴滴;而程序中的日志,通常就是一个文件,里面记录了程序运行过程中产生的各种数据。日志技术有如下好处。
数组指针和指针数组 首先,理解一下数组指针和指针数组这两个名词:“数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了——数组的指针:是一个指针,什么样的指针呢?指向数组的指针。指针的数组:是一个数组,什么样的数组呢?装着指针的数组。然后,需要明确一个优先级顺序:()>[]>*,所以:(*p)[n]:根据优先级,先看括号内,则p是一个指针,这个指针指向一个一维数组,数组长度为n,这是“数组的指针”,即数组指针;p[n]:根据优先级,先看[],则p是一个数组,再结合。
Java_特殊文件 前面学习了IO流,知道IO流是用来读、写文件中的数据。但是接触到的文件都是普通的文本文件,普通的文本文件里面的数据是没有任何格式规范的,用户可以随意编写,如下图所示。像这种普通的文本文件,没有任何规律可言,不方便程序对文件中的数据信息处理。在以后的Java开发过程中还会遇到一些特殊的文本文件,这些文件是有一些格式要求的,方便程序对文件中的数据进行处理。比如,后面我们会用到两种特殊的文本文件,一种是properties文件,还有一种是xml文件。如下图所示。首先,我们来认识一下,什么是XML?
设计模式_结构型模式_装饰器模式 装饰器模式和代理模式很像。代理模式是已经知道代理谁了,所以只是对委托类的访问权限进行限制,因此用户只需要访问相应的代理类就可以。装饰器模式并不知道要装饰谁,所以需要传入具体的被装饰对象进行功能的添加。
Java_流 接下来,我们先学习OutputStreamWriter类,你看这个类名也比较有意思,前面是OutputStream表示字节输出流,后面是Writer表示字符输出流,合在一起意思就是表示可以把OutputStream转换为Writer,最终OutputStreamWriter其实也是Writer的子类,所以也算是字符输出流。序列化流是干什么用的呢?它是先把数据写到缓冲流内部的8BK的数组中(ps: 先攒一车货),等数组存满了,再通过原始的字节输出流,一次性写到目标文件中去(把囤好的货,一次性运走)。
Java_IO流(字节流) 在前面已经学习过File类。知道File只能操作文件,但是不能操作文件中的内容。我们也学习了字符集,不同的字符集存字符数据的原理是不一样的。有了前面两个知识的基础,接下来我们再学习IO流,就可以对文件中的数据进行操作了。IO流的作用:就是可以对文件或者网络中的数据进行读、写的操作。如下图所示把数据从磁盘、网络中读取到程序中来,用到的是输入流。把程序中的数据写入磁盘、网络中,用到的是输出流。简单记:输入流(读数据)、输出流(写数据)IO流在Java中有很多种,不同的流来干不同的事情。