自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络编程 套接字

就如同身份证一般,身份证上有着你的个人信息,是属于你的物品,即使弄丢了他还是属于你,而不是身份证长在你身上才是你的,离开了就不是了。DatagramSocket(int port):创建一个UDP的数据报套接字的Socket,绑定到本机的指定端口(一般用于服务端,区分同一个主机上不同的应用程序)将路由器/交换机转发的数据看出跑动的汽车,路由器/交换机看成一个一个的十字路口,当路由器/交换机需转发的数据量超过数据转发数据量的上限,就会出现。getPort():从接收的数据报中,获取发送端主机的端口号;

2025-04-14 00:47:03 529

原创 网络原理

2:数据链路层会按照以太网协议将收集到的数据进行解析,把其中以太网的报头和报尾取出,再往上传递给网络层。用于通信双方发送接收数据格式的约定,是网络通讯的关键,就如同我们的语言一般,都说普通话,能让对方听得懂,亦或者外国说的英语,这就相当两套通信协议。路由器收到主机发送的数据时,会通过物理层、数据链路层、网络层解析,重新生成一个网络数据包,构造出以太网数据帧,进行二进制转换转发出去。4:IP协议继续调用数据连路层的api,把ip数据包交给数据连路层,在数据连路层,以太网协议会继续在网络层的数据包上加工。

2025-04-10 22:08:16 591

原创 文件IO 2

上一篇大致讲了文件读写操作的基本操作,下面是实践时间。

2025-04-01 23:17:04 183

原创 文件IO 1(接上多线程14)

接上上一篇利用代码创建文件,这里则是利用代码删除文件 ://删除文件//在进程退出时候删除可以自行去运行一下,我们可以打开存放当前文件目录,观察变化,这里就不放图了,直接说结果:file1和file2同时被创建,但过了1秒后,file1被删除,再过了10秒,进程结束之后,file2才被删除。

2025-03-31 23:44:50 548

原创 多线程14(哈希表与文件操作IO)

将一个大任务分成多个子任务,使用多线程执行子任务,从而提高效率。那么如何衡量这些子任务都完成了呢?这就要用到CountDownLatch1:指定指定的参数,描述拆分的任务数量2:每个线程都执行完毕后,都执行一次CountDownLatch,当执行次数等于指定的参数时候,确认执行完毕。

2025-03-22 20:17:26 870

原创 多线程12(CAS带PV操作开头)

cas全程叫compare and swap,字面意思是比较交换。标准库中提供了 java.util.concurrent.atomic 包,⾥⾯的类都是基于这种⽅式来实现的. 典型的就是AtomicInteger类.其中的getAndIncrement相当于i++操作.将内存中的原数据看作V,寄存器1的值看作A,寄存器2的值看作B,那么她的运行逻辑是:步骤1.A与V比较。步骤2.若相等,B写入V。步骤3.返回值。

2025-03-09 22:39:13 952

原创 多线程11(锁策略)

单独的读是始终线程安全的,但一旦设计到写方面就极大概率会出现线程安全问题,如果在读和写之间加上普通锁,那就意味着冲突会非常严重,极大拖慢线程效率。在JVM内部,会统计每个锁竞争的激烈程度,如果锁竞争激烈,那么synchronized就会按照挂起等待锁逻辑执行;锁之间的关系:无锁(synchronized)->偏向锁(两个及以上的线程)->轻量级锁(线程竞争过于激烈)->重量级锁。:预测在接下来的锁竞争非常激烈,针对这样的情况做一些额外的工作。:加锁的时候,预测接下来的锁竞争不激烈,不需要额外的工作。

2025-03-06 21:32:11 263

原创 多线程10(计时器)

在线程池中,最重要的目的就是往线程池里添加任务的操作(submit操作,任务是runnable)在运行完毕后,线程池里的线程还没有结束(前台线程),导致运行完提供的任务后线程还在阻塞,没有弹出停止。我们可以将前台线程设置为后台线程(t.setDaemon(true);)来结束他的影响。在使用线程池的时候,我们则可以通过shutdown();来关闭。shutdown() 方法是让在线程池中执行完正在执行的任务和队列中等待的任务后才彻底关闭,若后续还有任务试图加入队列,会执行拒绝策略。

2025-03-03 21:58:24 257

原创 多线程9

在put实现里面,队列满了就用this.wait阻塞,队列没满就用this.notify唤醒take线程的wait。take线程也同理,在空阻塞和不空唤醒put线程方法也是一样的。注意,wait线程不一定会被notify线程给唤醒,还有可能会被interrupt线程这种给错误唤醒的情况。在这前提下,throws InterruptedException的方法将异常外抛,不会出现错误,而我们用if配try catch方法,就会导致size是空或者满的时候阻塞被唤醒,接着往下走出现错误。

2025-02-26 21:22:17 665

原创 多线程8

阻塞队列有以下特性1.提供线程安全2.阻塞特性队列为空,出队列阻塞到队列被添加元素,队列为满,入队列阻塞到队列元素被取走。阻塞队列主要用于构建阻塞队列就是生产者消费者的链接场所。生产者将元素放入阻塞队列,消费者将元素从阻塞队列里拿出。

2025-02-24 22:56:46 299

原创 多线程7

例如,在t1线程已经经过了if判断和加锁解锁出来,线程切换到了t2,t2在进行判断的时候就发现instance不是null,没有在空间构造对象直接跳过来到内存空间的首地址赋值给引用变量。于是就会得到一个未初始化的变量。上面懒汉模式在多线程运行中,t1和t2先后运行,在两个线程在运行到if判断的时候都是空,t1先实例化了,但是由于t2已经通过的if判断,所以会覆盖原有的再实例化一次,开销也成倍增加。上述多线程运行的时候一个线程对在进行读操作,一个线程在进行写操作,由于内存优化,很容易出现内存可见性问题。

2025-02-24 10:54:02 289

原创 多线程6(接5)

在“多线程5”末尾提到线程安全我呢提,原因在于每个线程都有一个自己的内存,同时他们又共享一个主内存,当线程要循环读取主内存的变量的时候,线程就会把主内存的变量拷贝到自己的线程内存里面读取,所以后续对主内存进行修改,线程仍然在自己的线程内存里面读取之前拷贝过来的变量,感知不到主内存的变化。

2025-02-20 18:11:30 300

原创 多线程5(接4)

在敲代码的时候如果一不小心写出这样的锁中锁,,第一次加锁的时候,没人争抢可以顺利拿到。第二把锁却因为第一把锁没有释放掉,所以会阻塞等待,进入死等。或者两个线程都在试图抢锁对方的锁而进入死等,如下例子,两个锁都在试图抢夺对方没释放的锁,导致死等。这样的问题叫做死锁是一种非常严重的BUG,为了解决锁套娃这个问题,java中的synchronized引入了可重入锁的概念。所以,在运行第一串代码的时候,没有真正的产生死锁。:当某一个线程加锁成功后,在里面加锁,不会触发阻塞,可以继续往下走。

2025-02-08 14:27:54 404

原创 多线程4(接3)

在线程三中提到了线程安全,在下面代码中,t1和t2中都运行五万次,但是合计起的结果却没有十万次,并且每次运行结果都不一样这就是并发执行导致的线程安全。此时就是对的。这是因为count++这个过程可以详细拆分为三步:第一步是把寄存器也就是count的值存储到cpu里。(load)第二步就是将寄存器的值加一(add)第三步就是把寄存器的值返回(save)在t1和t2两个线程并发执行的时候,这三步不是一次性完成的,而是像下面的运行一样,出现结果被吞掉的事情。1.这个是操作系统决定的,我们解决不了。

2025-01-24 17:47:31 225

原创 多线程3 (书接上回:多线程2)

在这情况下,interrupted尝试去终止线程t。这是因为每次执行循环的时候,线程t绝大多数时间都在sleep中,在主线程调用interrupted,会唤醒sleep,然后sleep抛出异常,转入break语句。如果将break注释掉,就无法终止t线程。原因是调用interrupt会修改isInterrpted的标志位为true,但是sleep被唤醒后会将标志位修改回false。在没有break结束循环的话就会再次判断成功,开始循环。

2025-01-19 16:32:48 340

原创 多线程2

书接上回:多线程1。

2025-01-18 14:10:28 552

原创 多线程1

为了解决进程创建与销毁开销大的问题,我们引入了线程。线程的创建销毁的开销更小,能有效地节省计算机资源。线程和进程都相当于一个要执行的任务,但是二者的关系进程是操作系统分配资源的基本单位,在进程内部的多个线程会共享其内存资源和硬盘资源,第一个线程(和线程一起创建)创建的时候是会申请资源,后续创建线程不会再申请资源;在进程销毁的时候进程才会释放资源.在其中再有创建和销毁线程都不会申请和销毁资源。1.(提高稳定性)线程是CPU上调度执行的基本单位,具体怎样调度执行是由操作系统内部调度器执行。

2025-01-10 11:20:12 532

原创 笔记 String

String是字符串类型,C语言里面没有这个类型。对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址用equals来比较。比较字符串的大小要用s1和s2比,s1比s2要大那么会返回正数,小的话返回负数,相等返回0。与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值。

2024-06-09 22:58:42 629

原创 笔记 抽象类

如果一个类中没有包含足够的信息来描绘一个具体的对象(泛指不具体),这样的类就是抽象类。抽象类的关键字。

2024-06-03 12:57:04 301

原创 继承与多态2

在调用play这个方法的时候, 参数类型为 Animal (父类), 此时在该方法内部并不知道, 也不关注当前的引用指向的是哪个类型(子类)的实例。B 的构造方法中调用了 func 方法, 此时会触发动态绑定,会调用到 D 中的 func 此时 D 对象自身还没有构造,此时 num 处在未初始化的状态。3.访问权限不能比父类中被重写的方法的访问权限更低。注意:尽量不要在构造器中调用方法(如果这个方法被子类重写,就会触发动态绑定,但是此时子类对象还没构造完成), 可能会出现一些隐藏的但是又极难发现的问题。

2024-06-01 18:40:04 503

原创 继承与多态1

分卷写吧,感觉有点长。

2024-05-30 12:46:12 285

原创 类与对象

自用笔记

2024-05-27 13:28:13 1031

原创 指针自梳理 1

简单记录一下这段时间学习指针的知识点与个人需要注意的地方,后续会把不对的地方改改。

2024-03-24 14:28:53 448 1

原创 C语言分支循环语句

关于if语句的梳理

2023-12-03 20:29:15 437 1

原创 个人介绍与学习目标

至于要怎么学习嘛……网上学习C语言的视频那么多,总能找到适合自己的老师,对吧。再适当发挥发挥传统优良品德死皮赖脸不懂就问,也能找到能回答我问题的前辈(*'▽'*)♪。时间对我来说还算比较充裕,目前也是无业游民一个?每天拿出三小时学习还是够的,也许会根据情况适当延长学习时间。学习C语言,我想到的是给自己编个小游戏分享出来,希望能被大家喜欢;假如,能学C语言到如火纯青的地步,我也会考虑要不要去大厂混混,比如腾讯´•ﻌ•`本人喜欢玩,热爱所拥有的一切。前段时间开始对C语言感兴趣,现在准备专攻C语言。

2023-11-20 21:52:07 113 1

空空如也

空空如也

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

TA关注的人

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