![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
视频教程
文章平均质量分 67
Limingmingaa
这个作者很懒,什么都没留下…
展开
-
《Java基础知识》Java ArrayList源码分析4
指定位置添加元素:看看ArrayList 是如何删除的:. 尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1qL411u7eE?spm_id_from=333.337.search-card.all.click&vd_source=3117718bf474f48fd81d26049c0c97ac......原创 2022-06-30 17:48:33 · 151 阅读 · 0 评论 -
Java练习题15
【程序21】题目:求1+2!+3!+…+20!的和【程序22】题目:利用递归方法求5!。/** * 【程序21】 * 题目:求1+2!+3!+…+20!的和 * 【程序22】 * 题目:利用递归方法求5!。 */public class Subject21And22 { public static void main(String[] args) { long sum = factorialSum(20); System..原创 2022-05-23 18:17:00 · 128 阅读 · 0 评论 -
Java练习题14
【程序19】题目:打印出如下图案(菱形)/** * 【程序19】 * 题目:打印出如下图案(菱形) */public class Subject19 { public static void main(String[] args) { diamond(6); } /** * 打印菱形 */ public static void diamond(int a){ for (int i = a; i.原创 2022-05-23 18:14:21 · 138 阅读 · 0 评论 -
Java练习题3
【程序3】题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。/*** * 【程序3】 * 题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 */public class Subject3 { public static voi.原创 2022-05-16 16:48:27 · 115 阅读 · 0 评论 -
java泛型接口
泛型接口测试代码 1 interface TestInterface<T> { 2 void test(T item); 3 } 4 5 class TestInterfaceImp1 implements TestInterface<String> { 6 7 @Override 8 public void test(String item) { 9 System.out.println(item);原创 2022-05-13 18:21:55 · 1030 阅读 · 0 评论 -
装箱和拆箱
装箱和拆箱Java提供了原始类型对应的引用类型,在1.5之后的版本还提供了自动装箱和自动拆箱,结合最新版本的泛型,几乎可以忽略这块。 1 import java.util.*; 2 3 public final class Program { 4 public static void main(String[] args) { 5 ArrayList list = new ArrayList(); 6 7 list.原创 2022-05-13 18:20:41 · 126 阅读 · 0 评论 -
Java面试精选【2】
6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?对于short s1 = 1; s1 = s1 + 1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。对于short s1 = 1; s1 += 1;由于 +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。7、char型变量中能不能存贮一个中文汉字?为什么?原创 2022-04-26 17:31:38 · 54 阅读 · 0 评论 -
Java面试精选【1】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱。只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了。对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中的内容都搞懂了,在笔试的时候就可以游刃有余,通过面试只有半步之遥了,笔试只能反映你的JAVA技能。不管你是面试各个级别的JAVA工程师、架构师、还是项目经理,这个系列文章都是你最宝贵的资源,里面包括整个JAVA体系的知识,总会有你需要的内容原创 2022-04-26 17:23:58 · 67 阅读 · 0 评论 -
零基础java自学流程-Java语言高级558
OSI模型分层OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层TCP/IP协议TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP。TCP称为传输控制协议,IP称为互联网络协议。网络分层除了OSI模型分层,还有TCP/IP模型分层,将网络划分为四层,应用层、传输层、网际层、网原创 2022-03-28 18:04:03 · 190 阅读 · 0 评论 -
零基础java自学流程-Java语言高级548
1.3.1、缓冲区(Buffer)本质是可以读写数据的内存块,Channel读取或者写入的数据必须通过Buffer:java.nio.Buffer抽象类的属性:// Invariants: mark <= position <= limit <= capacityprivate int mark = -1;private int position = 0;private int limit;private int capacity;1.3.2、通道(Ch原创 2022-03-22 18:21:21 · 57 阅读 · 0 评论 -
零基础java自学流程-Java语言高级547
1.2.2、问题服务端对于每个请求都要建立独立的线程。 并发数大时,要创建大量的线程,系统资源占用大。 连接建立之后,如果当前线程暂时没有数据可读,则线程就阻塞再Read上,造成线程资源浪费。1.3、NIO同步非阻塞模型,服务器端用一个线程处理多个连接,客户端发送的连接请求会注册到多路复用器上,多路复用器轮询到连接有IO请求就进行处理:NIO的非阻塞模式,使得一个线程从某通道发送请求或者读取数据时,如果目前没有可用的数据,不会使线程阻塞,在数据可读之前,该线程可以做其他的事情。NI原创 2022-03-22 18:19:38 · 59 阅读 · 0 评论 -
零基础java自学流程-Java语言高级546
在Java中提供了三种IO模型:BIO、NIO、AIO,模型的选择决定了程序通信的性能。1.1、使用场景BIO BIO适用于连接数比较小的应用,这种IO模型对服务器资源要求比较高。 NIO NIO适用于连接数目多、连接时间短的应用,比如聊天、弹幕、服务器间通讯等应用。 AIO AIO适用于连接数目多、连接时间长的应用,比如相册服务器。1.2、BIO同步并阻塞模型,服务器会为每一个连接建立一个线程,如果连接过多,且线程不做任何事情,会极大的浪费资源,示意图如下:1.2.1、机制原创 2022-03-22 18:17:38 · 59 阅读 · 0 评论 -
零基础java自学流程-Java语言高级545
用epoll实现的IO多路复用epoll是Linux下的IO多路复用的实现。这里单开一章是因为它非常有代表性,并且Linux也是目前最广泛被作为服务器的操作系统。细致的了解epoll对整个IO多路复用的工作原理非常有帮助。与select和poll不同,要使用epoll是需要先创建一下的。int epfd = epoll_create(10);epoll_create在内核层创建了一个数据表,记录要注册的fd。接口会返回一个“epoll的文件描述符”指向这个表。注意,接口参数是一个表达要监原创 2022-03-21 17:45:03 · 71 阅读 · 0 评论 -
零基础java自学流程-Java语言高级544
pollpoll与select类似于。它大概长这样:int poll(struct pollfd *fds, nfds_t nfds, int timeout);poll的代码例子和select差不多,因此也就不赘述了。有意思的是poll这个单词的意思是“轮询”,所以很多中文资料都会提到对IO进行“轮询”。上面说的select和下文说的epoll本质上都是轮询。poll优化了select的一些问题。比如不再有3个数组,而是1个polldfd结构的数组了,并且也不需要每次重设了。数原创 2022-03-21 17:43:32 · 94 阅读 · 0 评论 -
零基础java自学流程-Java语言高级543
selectselect长这样:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);它接受3个文件描述符的数组,分别监听读取(readfds),写入(writefds)和异常(expectfds)事件。那么一个 IO多路复用的代码大概是这样:struct timeval tv = {.tv_sec = 1, .tv_usec = 0};原创 2022-03-21 17:42:34 · 72 阅读 · 0 评论 -
零基础java自学流程-Java语言高级542
IO多路复用IO多路复用(IO Multiplexing) 是这么一种机制:程序注册一组socket文件描述符给操作系统,表示“我要监视这些fd是否有IO事件发生,有了就告诉程序处理”。IO多路复用是要和NIO一起使用的。尽管在操作系统级别,NIO和IO多路复用是两个相对独立的事情。NIO仅仅是指IO API总是能立刻返回,不会被Blocking;而IO多路复用仅仅是操作系统提供的一种便利的通知机制。操作系统并不会强制这俩必须得一起用——你可以用NIO,但不用IO多路复用,就像上一节中的代码;也可以原创 2022-03-18 18:09:10 · 458 阅读 · 0 评论 -
零基础java自学流程-Java语言高级541
NIONIO是指将IO模式设为“Non-Blocking”模式。在Linux下,一般是这样:void setnonblocking(int fd) { int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK);}再强调一下,以上操作只对socket对应的文件描述符有意义;对磁盘文件的文件描述符做此设置总会成功,但是会直接被忽略。这时,BIO和NIO的区别是什么呢?在BIO模原创 2022-03-18 18:08:31 · 137 阅读 · 0 评论 -
零基础java自学流程-Java语言高级540
BIO有了Block的定义,就可以讨论BIO和NIO了。BIO是Blocking IO的意思。在类似于网络中进行read,write,connect一类的系统调用时会被卡住。举个例子,当用read去读取网络的数据时,是无法预知对方是否已经发送数据的。因此在收到数据之前,能做的只有等待,直到对方把数据发过来,或者等到网络超时。对于单线程的网络服务,这样做就会有卡死的问题。因为当等待时,整个线程会被挂起,无法执行,也无法做其他的工作。顺便说一句,这种Block是不会影响同时运行的其他程序(..原创 2022-03-18 18:07:35 · 146 阅读 · 0 评论 -
零基础java自学流程-Java语言高级539
NIO实现简单的聊天群//服务器端public class GroupChatSever { private final static int PORT = 6666;//监听端口 private Selector selector;//选择器 private ServerSocketChannel serverSocketChannel; public GroupChatSever(){ try{ selector原创 2022-03-17 18:04:47 · 75 阅读 · 0 评论 -
零基础java自学流程-Java语言高级536
通道(Channel)在NIO程序中服务器端和客户端之间的数据读写不是通过流,而是通过通道来读写的。通道类似于流,都是用来读写数据的,但它们之间也是有区别的: 通道是双向的,即可以读也可以写,而流是单向的,只能读或写 通道可以实现异步读写数据 通道可以从缓冲区读数据,也可以把数据写入缓冲区 java中channel的相关类在java.nio.channel包下。Channel是一个接口,其常用的实现类有: FileChannel:用于文件的数据读写,其真正的实现类原创 2022-03-16 18:01:48 · 730 阅读 · 0 评论 -
零基础java自学流程-Java语言高级535
NIO从JDK1.4开始,java提供了一系列改进输入/输出的新特性,统称为NIO,全称n为new I/O,是同步非阻塞的,所以也有人称为non-blocking I/O。NIO的相关类都放在java.nio包或其子包下,并对原先java.io包中许多类进行了改写。NIO的三大核心缓冲区(Buffer)NIO是面向缓冲区, 或者说是面向块编程的。在NIO的IO传输中,数据会先读入到缓冲区,当需要时再从缓冲区写出,这样减少了直接读写磁盘的次数,提高了IO传输的效率。缓冲区(buffer原创 2022-03-16 18:00:33 · 210 阅读 · 0 评论 -
零基础java自学流程-Java语言高级534
BIOBIO(Blocking I/O),同步阻塞,实现模式为一个连接一个线程,即当有客户端连接时,服务器端需为其单独分配一个线程,如果该连接不做任何操作就会造成不必要的线程开销。BIO是传统的Java io编程,其相关的类和接口在java.io 包下。BIO适用于连接数目较小且固定的架构,对服务器资源的要求较高,是JDK1.4以前的唯一选择,但程序简单易理解。BIO编程流程 服务器端启动一个SeverSocket 客户端启动Socket对服务器端发起通信,默认情况下服务器端原创 2022-03-16 17:59:14 · 1092 阅读 · 0 评论 -
零基础java自学流程-Java语言高级533
Java的NIO代码this.selector.select(); 在这里会阻塞,无论是客户端连接还是客户端发送数据还是客户端关闭,这里都会触发。虽然这里是单线程,但是底层处理用到了线程池。import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.*;import java.util.Iterator;/**原创 2022-03-14 17:28:54 · 72 阅读 · 0 评论 -
零基础java自学流程-Java语言高级532
BIO、NIO、AIOBIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO(NIO.2):异步非阻塞IO,在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成...原创 2022-03-14 17:27:24 · 80 阅读 · 0 评论 -
零基础java自学流程-Java语言高级531
同步/异步、阻塞/非阻塞概念同步异步同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)同步:在发出一个调用时,在没有得到结果之前,该调用就不返回。一旦调用返回,就得到返回值了。调用者主动等待这个调用的结果。异步:调用在发出之后就直接返回了,没有立刻得到返回结果。在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。I/O通常来说,IO操作包括:对硬盘的读写、对socket.原创 2022-03-14 17:26:15 · 2001 阅读 · 0 评论 -
零基础java自学流程-Java语言高级530
import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;impo.原创 2022-03-11 18:04:58 · 71 阅读 · 0 评论 -
零基础java自学流程-Java语言高级529
Jdk1.5创造了一个假的nio 用一个HanderExecutorPool来限定了线程数量,但只是解决了服务器端不会因为并发太多而死掉,但解决不了并发大而响应越来越慢的,到时你也会怀疑你是不是真的用了一个假的nio!!!!!!!为了解决这个问题,就要用三板斧来解决!别急,要解决一个诸葛亮,你必先要造三个臭皮匠,先引入3个NIO相关概念先!1> Buffer 缓冲区难用的buffer是一个抽象的对象,下面还有ByteBuffer,IntBuffer,LongBuffer等子类,相比老的...原创 2022-03-11 18:04:16 · 65 阅读 · 0 评论 -
零基础java自学流程-Java语言高级528
上面这个代码很简单转换成图型说明就是web浏览器发一个请求过来,web服务器就要new 一个线程来处理这个请求,这是传统的请求处理模型,这也就引来一个很大的问题,当请求越多,服务器端的启用线程也要越多,我们都知道linux(window)的文件句柄数有是限的,默认是1024,当然可以修改,上限好像是65536 ,(一个柄也相当于一个socket也相当于一个thread,linux查看文件句柄Unlimit -a)其实在实际当中只要并发到1000上下响应请求就会很慢了,所以这种模型是有问题的,这种也就是同步.原创 2022-03-11 18:03:18 · 339 阅读 · 0 评论 -
零基础java自学流程-Java语言高级527
基础代码:一个简单的socket实现tcp/ip的样例,后面的BIO/NIO/AIO都是基本上于这个例子进行变化client端:import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class Client { final static S..原创 2022-03-10 17:33:02 · 103 阅读 · 0 评论 -
零基础java自学流程-Java语言高级526
基本知识 2.1 TCP/IP网络协议 网上很多有关这个协议的解释,自行google,下面是简单的理解记忆: tcp/ip的3次握手, 简单来说就是第一次我连接你给你一个标识SYN,你给我返回SYN并给一个新的ACK标记我,然后我再把ACK给你, 这样证明我们之前传东西是可靠,的然后就正式传数据了图片来自网上 tcp/ip的4次挥手断开,相当于,你给我一个ACK我给你一个FIN,然后再次彼此交换确认,OK就可以结束通信了图片来自网上java的socket就是对tcp/ip...原创 2022-03-10 17:27:13 · 113 阅读 · 0 评论 -
零基础java自学流程-Java语言高级525
Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。AIO方式使用于连接数目多且连接比较长(重操...转载 2022-03-10 17:24:18 · 338 阅读 · 0 评论 -
零基础java自学流程-Java语言高级524
12、IO流使用规律总结:(1)明确要操作的数据是数据源还是数据目的(要读还是要写) 源:InputStream Reader 目的:OutputStream Writer(2)明确要操作的设备上的数据是字节还是文本 源: 字节:InputStream 文本:Reader 目的: 字节:OutputStream 文本:Writer(3)明确数据...原创 2022-03-09 18:07:33 · 73 阅读 · 0 评论 -
零基础java自学流程-Java语言高级523
类似地,FileFilter 也是一个接口,采用匿名内部类的方式实现接口,使用File[] listFiles(FileFilter filter)获取目录下所有文件夹:import java.io.File;import java.io.FileFilter;public class FileDemo { public static void main(String[] args) { File file = new File("C:\\Test");原创 2022-03-09 18:06:47 · 52 阅读 · 0 评论 -
零基础java自学流程-Java语言高级522
但是我们看到第8行代码只是传入了过滤器,那么accept方法是如何被调用的呢?查看String[] list(FilenameFilter) 的源码:/*list(FilenameFilter)源码解析*/public String[] list(FilenameFilter filter) { String names[] = list();//调用list()方法获取所有名称 if ((names == null) || (filter == null)) {原创 2022-03-09 18:05:22 · 96 阅读 · 0 评论 -
零基础java自学流程-Java语言高级521
查看FilenameFilter源码,发现其实是一个接口:public interface FilenameFilter { /** * Tests if a specified file should be included in a file list. * * @param dir the directory in which the file was found. * @param name the name of the fi原创 2022-03-08 18:17:04 · 50 阅读 · 0 评论 -
零基础java自学流程-Java语言高级520
案例:打印指定文件(夹)及其所有子目录import java.io.File;/** *打印目录 */public class FileDemo1 { public static void main(String[] args){ File f=new File("E:\\BaiduNetdiskDownload"); printTree( f,0); } public static void printTree(File f,int原创 2022-03-08 18:15:04 · 46 阅读 · 0 评论 -
零基础java自学流程-Java语言高级519
11、File类:File: 文件和目录路径名的抽象表示形式,File类的实例是不可改变的(1)File类常用功能File: 文件和目录路径名的抽象表示形式,File类的实例是不可改变的 * File类的构造方法: * File(String pathname) 将指定的路径名转换成一个File对象 * File(String parent,String child) 根据指定的父路径和文件路径创建对象 * Fi原创 2022-03-08 18:13:14 · 77 阅读 · 0 评论 -
零基础java自学流程-Java语言高级518
10、RandomAccessFileimport java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;/** * 注意:随机读写。数据需要规律。用RandomAccessFile类需要明确要操作的数据的位置。 * */public class RandomAccessFileDemo { public static void main(String原创 2022-03-07 18:01:05 · 108 阅读 · 0 评论 -
零基础java自学流程-Java语言高级517
9、用于操作数组和字符串的流对象ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriterStringReader StringWriter关闭这些流都是无效的,因为这些都未调用系统资源,不需要抛IO异常。import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;/** * 源和目的都是内存的..原创 2022-03-07 17:59:55 · 42 阅读 · 0 评论 -
零基础java自学流程-Java语言高级516
8、SequenceInputStream表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。案例:媒体文件切割与合并1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 .原创 2022-03-07 17:58:55 · 105 阅读 · 0 评论