编程
文章平均质量分 67
Limingmingaa
这个作者很懒,什么都没留下…
展开
-
《Java基础知识》Java ArrayList源码分析 5
关于操作计数器(modCount),再通过案例说明一下 运行结果:从案例中我们可以看到,迭代的过程中是不允许删除或者添加元素的,修改没有问题,要保证长度不变。再来看一个案例 运行结果:我们要注意基本数据类型是不支持泛型化的。所以数组转list需要小心这种情况。 尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili...原创 2022-06-30 18:01:14 · 262 阅读 · 1 评论 -
《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 · 162 阅读 · 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 · 141 阅读 · 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 · 155 阅读 · 0 评论 -
java练习题10
【程序11】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?/** * 【程序11】 * 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? */public class Subject11 { public static void main(String[] args) { FormThreeNum(); } public static void FormThreeNu.原创 2022-05-21 18:16:22 · 133 阅读 · 0 评论 -
java练习题9
【程序10】题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;n次落地经过路线总长度和下次反弹的高度。import java.util.Scanner;/** * 【程序10】 * 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;n次落地经过路线总长度和下次反弹的高度。 */public class Subject10 { public static void main(String[] args) { System..原创 2022-05-18 18:14:44 · 159 阅读 · 0 评论 -
Java练习题8
【程序9】题目:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。import java.util.ArrayList;import java.util.List;/*** * 【程序9】 * 题目:一个数如果恰好等于它的因子之和,这个数就称为”完数”。例如6=1+2+3.编程找出1000以内的所有完数。 */public class Subject9 { public static void main(St.原创 2022-05-18 18:11:59 · 206 阅读 · 0 评论 -
Java练习题7
【程序8】题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。输出结果的形式如:2+22+222=246;import java.math.BigDecimal;import java.util.Scanner;/** * 【程序8】 * 题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相.原创 2022-05-18 18:13:11 · 152 阅读 · 0 评论 -
Java练习题6
【程序7】题目:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。import java.util.Scanner;/** * 【程序7】 * 题目:输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。 */public class Subject7 { public static void main(String[] args) { System.out.println("请输入字符串:" ); Scanner.原创 2022-05-18 18:09:42 · 119 阅读 · 0 评论 -
Java练习题5
【程序5】题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。/** * 【程序5】 * 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 */public class Subject5 { public static void main(String[] args) { System.out.prin.原创 2022-05-18 18:08:36 · 114 阅读 · 0 评论 -
Java练习题4
【程序4】题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。/** * 【程序4】 * 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 */public class Subject4 { public static void main(String[] args) { System.out.print("请输入需要分解因数的整数:"); Scanner scanner=new Scanne.原创 2022-05-18 18:05:55 · 125 阅读 · 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 · 126 阅读 · 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 · 1063 阅读 · 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 · 134 阅读 · 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 · 63 阅读 · 0 评论 -
Java面试精选【1】
这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱。只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了。对于那些正打算找工作JAVA软件开发工作的童鞋们来说,当你看到这份题目的时候,你应该感动很幸运,因为,只要你把题目中的内容都搞懂了,在笔试的时候就可以游刃有余,通过面试只有半步之遥了,笔试只能反映你的JAVA技能。不管你是面试各个级别的JAVA工程师、架构师、还是项目经理,这个系列文章都是你最宝贵的资源,里面包括整个JAVA体系的知识,总会有你需要的内容原创 2022-04-26 17:23:58 · 75 阅读 · 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 · 199 阅读 · 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 · 65 阅读 · 0 评论 -
零基础java自学流程-Java语言高级547
1.2.2、问题服务端对于每个请求都要建立独立的线程。 并发数大时,要创建大量的线程,系统资源占用大。 连接建立之后,如果当前线程暂时没有数据可读,则线程就阻塞再Read上,造成线程资源浪费。1.3、NIO同步非阻塞模型,服务器端用一个线程处理多个连接,客户端发送的连接请求会注册到多路复用器上,多路复用器轮询到连接有IO请求就进行处理:NIO的非阻塞模式,使得一个线程从某通道发送请求或者读取数据时,如果目前没有可用的数据,不会使线程阻塞,在数据可读之前,该线程可以做其他的事情。NI原创 2022-03-22 18:19:38 · 65 阅读 · 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 · 64 阅读 · 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 · 76 阅读 · 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 · 99 阅读 · 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 · 77 阅读 · 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 · 477 阅读 · 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 · 143 阅读 · 0 评论 -
零基础java自学流程-Java语言高级540
BIO有了Block的定义,就可以讨论BIO和NIO了。BIO是Blocking IO的意思。在类似于网络中进行read,write,connect一类的系统调用时会被卡住。举个例子,当用read去读取网络的数据时,是无法预知对方是否已经发送数据的。因此在收到数据之前,能做的只有等待,直到对方把数据发过来,或者等到网络超时。对于单线程的网络服务,这样做就会有卡死的问题。因为当等待时,整个线程会被挂起,无法执行,也无法做其他的工作。顺便说一句,这种Block是不会影响同时运行的其他程序(..原创 2022-03-18 18:07:35 · 152 阅读 · 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 · 82 阅读 · 0 评论 -
零基础java自学流程-Java语言高级538
每个注册到选择器的通道都需定义需进行的操作事件类型,通过查看SelectionKey类的属性可以知道操作事件的类型有4种:public static final int OP_READ = 1 << 0; //读操作public static final int OP_WRITE = 1 << 2; //写操作public static final int OP_CONNECT = 1 << 3; //连接操作public static final int O原创 2022-03-17 18:02:21 · 66 阅读 · 0 评论 -
零基础java自学流程-Java语言高级537
选择器(Selector)在NIO程序中,可以用选择器Selector实现一个选择器处理多个通道,即一个线程处理多个连接。只要把通道注册到Selector上,就可以通过Selector来监测通道,如果通道有事件发生,便获取事件通道然后针对每个事件进行相应的处理。这样,只有在通道(连接)有真正的读/写事件发生时,才会进行读写操作,大大减少了系统开销,并且不必为每个连接创建单独线程,就不用去维护过多的线程。选择器的相关类在java.nio.channels包和其子包下,顶层类是Selector,它是一个原创 2022-03-17 18:00:35 · 66 阅读 · 0 评论 -
零基础java自学流程-Java语言高级536
通道(Channel)在NIO程序中服务器端和客户端之间的数据读写不是通过流,而是通过通道来读写的。通道类似于流,都是用来读写数据的,但它们之间也是有区别的: 通道是双向的,即可以读也可以写,而流是单向的,只能读或写 通道可以实现异步读写数据 通道可以从缓冲区读数据,也可以把数据写入缓冲区 java中channel的相关类在java.nio.channel包下。Channel是一个接口,其常用的实现类有: FileChannel:用于文件的数据读写,其真正的实现类原创 2022-03-16 18:01:48 · 736 阅读 · 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 · 215 阅读 · 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 · 1099 阅读 · 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 · 79 阅读 · 0 评论 -
零基础java自学流程-Java语言高级532
BIO、NIO、AIOBIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO(NIO.2):异步非阻塞IO,在此种模式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成...原创 2022-03-14 17:27:24 · 83 阅读 · 0 评论 -
零基础java自学流程-Java语言高级531
同步/异步、阻塞/非阻塞概念同步异步同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)同步:在发出一个调用时,在没有得到结果之前,该调用就不返回。一旦调用返回,就得到返回值了。调用者主动等待这个调用的结果。异步:调用在发出之后就直接返回了,没有立刻得到返回结果。在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。I/O通常来说,IO操作包括:对硬盘的读写、对socket.原创 2022-03-14 17:26:15 · 2008 阅读 · 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 · 77 阅读 · 0 评论 -
零基础java自学流程-Java语言高级529
Jdk1.5创造了一个假的nio 用一个HanderExecutorPool来限定了线程数量,但只是解决了服务器端不会因为并发太多而死掉,但解决不了并发大而响应越来越慢的,到时你也会怀疑你是不是真的用了一个假的nio!!!!!!!为了解决这个问题,就要用三板斧来解决!别急,要解决一个诸葛亮,你必先要造三个臭皮匠,先引入3个NIO相关概念先!1> Buffer 缓冲区难用的buffer是一个抽象的对象,下面还有ByteBuffer,IntBuffer,LongBuffer等子类,相比老的...原创 2022-03-11 18:04:16 · 70 阅读 · 0 评论 -
零基础java自学流程-Java语言高级528
上面这个代码很简单转换成图型说明就是web浏览器发一个请求过来,web服务器就要new 一个线程来处理这个请求,这是传统的请求处理模型,这也就引来一个很大的问题,当请求越多,服务器端的启用线程也要越多,我们都知道linux(window)的文件句柄数有是限的,默认是1024,当然可以修改,上限好像是65536 ,(一个柄也相当于一个socket也相当于一个thread,linux查看文件句柄Unlimit -a)其实在实际当中只要并发到1000上下响应请求就会很慢了,所以这种模型是有问题的,这种也就是同步.原创 2022-03-11 18:03:18 · 348 阅读 · 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 · 110 阅读 · 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 · 118 阅读 · 0 评论