自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java 并发 100 问:从面试到生产(三)

文章摘要 本文围绕Java线程安全问题展开,首先提出判断线程安全的三个必要条件:共享可变状态、原子性、可见性和有序性。通过分析Java内存模型(JMM)特性,总结了排查线程安全隐患的清单。接着对比传统线程与JDK 21虚拟线程的差异,指出虚拟线程通过用户态调度和轻量级栈解决了OS线程资源开销大、上下文切换代价高等问题,适合高并发I/O场景,如Web服务、微服务调用等,但不适合CPU密集型任务。最后列举了虚拟线程的适用场景(如高并发短请求、消息队列消费等)和不适用的场景(如CPU密集型计算)。

2026-06-14 15:12:34 355

原创 万物皆可对账:一种被低估的系统化思维模型

Never Trust, Always Verify” (永不轻信,永远验证)。1.承认不完美:任何网络不可靠、任何节点会宕机、任何代码有Bug。对账是基于“系统一定会出错”的假设来设计的。2.追求最终一致:我们放弃强一致的执念,接受过程中的不一致,但通过持续的对账与自愈,保证最终结果的正确。3.业务闭环的锚点:没有对账,系统的运行就没有尽头。对账是划分“责任边界”的利器——对账平了,上一段流程才算真正结束,责任才算交接完毕。

2026-06-11 00:11:16 416

原创 Java 并发 100 问:从面试到生产(二)

Java并发编程中,Lock相比synchronized的主要优势包括:支持可中断锁获取、非阻塞尝试锁、公平锁机制、多条件变量绑定、读写锁分离以及锁状态监控。而基本类型包装类和String因不可变性本身线程安全,但引用可变时仍需同步。活锁是线程持续重试却无法推进的现象,可通过引入随机性和限制重试次数解决。使用wait/notify时必须用while循环而非if以避免虚假唤醒。Log4j的AsyncLogger采用生产者-消费者模型,通过RingBuffer实现异步日志记录,适合高吞吐量场景但可能牺牲部分日志

2026-06-01 23:13:15 334

原创 Java 并发 100 问:从面试到生产(一)

既保证了数据的一致性(自己读到的一定是自己刚写的),又提高了并发度(读的时候允许别人也来读)。不可以,CallerRunsPolicy会让提交任务的线程来执行任务,有可能会造成Tomcat 的Worker 线程被全部耗尽并阻塞。属性,但实际上它包含了两部分信息:隐式的弱引用 Key(在父类里)和显式的强引用 Value(在自己里)。如果连自己读自己的数据都要阻塞,那就违背了锁的初衷(锁是用来防止别人干扰,而不是用来把自己锁死)。在源码中严格规定:如果当前线程持有读锁,再去尝试获取写锁,必定会阻塞(失败)。

2026-05-26 23:21:53 368

原创 一些同样适用于人生的计算机原理

学了软件工程导论和计算机网络,都是理论性很强的内容,有时未免感到乏味,可是仔细看看,书中介绍的不仅是计算机的相关理论,也在讲着人生呢。  1.错误发现与改正得越晚,所需付出的代价也越高。         --出自软件工程的七条基本原理之坚持阶段性评审  2.得到最广泛应用的不是法律上的国际标准OSI,而是非国家标准TCP/IP。这样TCP/IP就常被称为事实上的国际标准。从这种意义

2017-04-06 15:53:11 391

原创 网络编程初探--使用UDP协议的简易聊天室

UDP是一种无连接的传输层协议,提供快速不可靠的服务。一、发送端 * 创建UDP发送端 * 步骤: * 1.建立UDP的Socket服务 * 2.将要发送的数据封装到数据包中 * 3.通过UDP的socket服务将数据包发送出去 * 4.关闭socket服务 1 public class UDPSendDemo2 { 2 3 public static void main(St

2017-04-06 15:53:04 371

原创 IO练习--按字节截取字符串

* 在Java中字符串“abcd”和字符串“ab你好”都是4个字符, * 但是字节数不同,因为GBK中一个汉字占两个字节 * 定义一个方法用来按字节数截取字符串。 * 如:对于“ab你好”,取3个字节,“你”的字节只取了一半,无法正确显示,所以就把那个字节舍去 * 若取4个字节就是“ab你”,取5个字节还是“ab你” 1 public class Test { 2 3 publi

2017-04-06 15:52:59 326

原创 IO包中的其他类总结

一、PrintStream和PrintWriterPrintStream 为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。在需要写入字符而不是写入字节的情况下,应该使用 PrintWriter 类。 1 /** 2 * PrintStream 3 * 1.提供了打印方法,可以对多种类型值进行

2017-04-06 15:52:54 376

原创 IO综合练习--文件切割和文件合并

有时候一个视频文件或系统文件太大了,上传和下载可能会受到限制,这时可以用文件切割器把文件按大小切分为文件碎片,等到要使用这个文件了,再把文件碎片合并成原来的文件即可。下面的代码实现了文件切割和文件合并功能。一、切割文件* 切割文件,按大小切割 * 把被切割的文件名和切割成的文件碎片数以键值对的形式写在配置文件中, * 这要用到Properties集合 * 以便文件合并时可以读取并使用这些信息

2017-04-06 15:52:49 290

原创 Properties集合小应用--限制用户对软件的使用次数

我们可以注意到一些付费软件可以试用一定的次数,超过限制次数后,就必须到官网购买正版才能继续使用。这里就简单地模拟一下这种效果的实现。 * 需求:记录程序的启动次数,当启动次数超过3次后,要求使用者注册信息,不能再使用。 *思路: *1.需要一个计数器,每当程序启动后,计数器就在原来的基础上自增。 * *2.计数器是一个变量,程序一旦关闭,这个变量就不存在了,所以需要把计数器做持久化的 *存储

2017-04-06 15:52:43 615

原创 结合File类浅析递归的使用

递归算法就是方法自身直接或者间接地调用到了自身,它是一种写起来很简单,但理解起来不那么简单的算法。 一个功能在被重复地调用,并且运算的结果和上一次的调用有关, 这种时候,可以使用递归。 * 注意: * 1.递归一定要明确递归结束的条件,否则会栈溢出 * 2.注意解决问题的递归次数,如果次数过多,也会发生栈溢出。比较经典的例子有斐波那契数列、汉诺塔等,这里我们谈谈递归在File类中的使用。 

2017-04-06 15:52:38 272

原创 Java其他API介绍

有一些类虽然不像集合、多线程、网络编程中的类那样属于Java中的核心类,但是它们在开发过程中给我们带来很多便利,这里就对它们做下简要的介绍和演示。一、System类System类中的构造方法是私有的,System类中的属性和方法都是静态的。常用方法: long currentTimeMills():返回以毫秒值为单位的当前时间。System 类包含一些有用的类字段和方法。下面的演示就获取了

2017-04-06 15:52:33 282

原创 装饰设计模式简析

装饰设计模式使用场景:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有功能,并提供加强功能,那么自定义的该类称为装饰类。装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰对象的功能,提供更强的功能。装饰类因为增强已有对象,具备的功能和已有的是相同类型的,只不过要更强。所以装饰类和被装饰类通常是属于同一个体系之中的。装饰设计模式与继承装饰模式比继承要灵活,避免了继承体系的

2017-04-06 15:52:26 232

原创 Map集合统计字母次数

Map集合练习:"asfefxAAcf34vrfdfse2-2asd--wdd"获取该字符串中,每一个字母出现的次数要求打印的结果是:a(2)c(1)...;思路:对结果分析发现,结果中字母和出现次数之间构成映射关系,而且很多,很多就需要存储。能存储映射关系的有数组和Map集合。关系中有一方顺序固定么?没有,所以选有Map集合。又发现可以作为唯一标识的一方有自然顺序,即字母表的顺序;所以选有Tre

2017-04-06 15:52:21 587

原创 String类常用方法练习

String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。String类是最常用的类之一,下面就通过几个练习,熟悉String类中的提供

2017-04-06 15:52:13 628

原创 生产者消费者问题

生产者和消费者问题是java多线程中的等待唤醒机制的经典案例。下面通过几个例子,循序渐进得了解这个问题。1.单生产者和单消费者 1 class Res 2 { 3 private String name; 4 private int count=0; 5 private boolean flag=false;//用来标志资源是否为空 6

2017-04-06 15:52:07 272

原创 集合3--毕向东java基础教程视频学习笔记

Day 15 集合框架01 TreeSet02 TreeSet存储自定义对象03 二叉树04 实现Comparator方式排序05 TreeSet练习06 泛型概述07 泛型使用08 泛型类09 泛型方法10 静态方法泛型11 泛型接口12 泛型限定13 泛型限定2 01 TreeSet|--Set   |--HashSet   |--TreeSet 可以对集合中的元素进行排序

2017-04-06 15:52:01 424

原创 集合2--毕向东java基础教程视频学习笔记

Day1408 LinkedList09 LinkedList练习10 ArrayList练习11 ArrayList练习212 HashSet13 HashSet存储自定义对象14 HashSet判断和删除的依据   08 LinkedListLinkedList特有的方法:addFirst() addLast()getFirst() getLast()获取元素,但不

2017-04-06 15:51:56 348

原创 整型信号量和PV操作(计算机操作系统)

在整型信号量机制中,信号量被定义为一个整形变量。除初始化外,仅能通过两个标准的原子操作Wait(S)和Signal(S)来访问。其通常分别被称为P、V操作。描述如下:P操作:S=S-1;如果S小于0,则进程进入等待状态,否则继续执行。V操作:S=S+1;如果S>=0,则唤醒等待队列中的一个等待进程。信号量有其自身的物理含义:当S>0时,其值表示要管理的某类资源的数量;当S 

2017-04-06 15:51:51 3538

原创 软件工程基础知识1

NATO会议上首次提出了“软件工程”这个名词,希望用工程化的原则和方法来克服软件危机。此后,人们开展了软件开发模型、开发方法、工具与环境的研究,提出了瀑布模型、演化模型、螺旋模型和喷泉模型等开发模型,出现了面向数据流方法、面向数据结构方法、面向对象等开发方法,以及一批CASE(Computer Aided Software Engineering,计算机辅助的软件工程)工具和环境。 一.软

2017-04-06 15:51:45 552

原创 存储管理方法总结

计算机操作系统的理论性知识存储管理方法 是否支持多道程序设计能否减少碎片是否支持虚拟存储段页式√√√非请求分页√√×请求分页√√√可重定位√√×固定分区√××单一连续分配×√×      

2017-04-06 15:51:40 647

原创 C#和ASP.NET之事件

事件是一种用于类和类之间传递消息或触发新的行为的编程方式。通过提供事件的句柄,能够把控件和可执行的代码联系在一起,如用户单击Button控件触发Click事件后就执行相应的事件处理代码。  事件的声明通过委托来实现。先定义委托,再用委托定义事件,触发事件的过程实质是调用委托。事件声明语法格式如下:public delegate void EventHandler(object send

2017-04-06 15:51:35 519

原创 XML语言基础3--Schema

1.什么是SchemaXML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。XML Schema规定XML文档实例的结构和每个元素/属性的数据类型。 2.为什么需要Schema弥补DTD的局限性Schema的新特性一致性:XML Schema 基于XML基本语法规则定义其文档结构;继承了XML的自描述性和可扩展性。

2017-04-06 15:51:26 324

原创 计算机网络学习总结1

1.信道的带宽和信号的带宽信道的带宽:指信道所能传输的频率范围。对数字信道,常以每秒钟能传输的二进制位数来表示带宽。 信号的带宽:某个信号具有的频带宽度。根据傅里叶级数,任意信号(周期信号)均可分解为多个不同幅值、频率、相位的正弦波的组合。信号带宽就是指这些信号的最高频率减去最低频率(许多时候就是最高频率)的值。 2.低通滤波和带通滤波低通滤波:规则为低频信号能正常

2017-04-06 15:51:14 684

原创 XML语言基础2 DTD

XML DTD文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档结构。DTD可被声明于XML文档中,也可以作为一个外部的引用。 内部的DOCTYPE声明假如DTD被包含在您的XML源文件中,它应当通过下面的语法被包含在一个DOCTYPE中。带有DTD的XML文档实例。 1 xml version="1.0"?> 2 DOC

2017-04-06 15:51:09 204

原创 Web基础知识

这学期学了Web技术这门课,但对这门课是做什么的、有什么用处并不了解,教材是Asp.net实用网站开发,对我这样的初学者大概是深了一点,所以决定对Web技术的背景知识做下整理。  1.Web工作原理Web全称为World Wide Web(WWW)。简单地说,Web是因特网提供的一种服务,通过它可以访问分布于因特网主机上的信息资源,Web是存储在全世界因特网计算机中、数量巨大的链接文档的集

2017-04-06 15:51:00 575

原创 XML语言基础1

这学期选修了XML技术这门课,没有发课本,于是参考了W3school教程,整理一下上课的内容。1.XML简介XML是一种标记语言,很类似HTML,它不是对HTML的替代,而是对HTML的补充。在大多数web应用程序中,XML用于传输数据,而HTNL用于格式化并显示数据。 XML语言和HTML语言的比较     名称 作用

2017-04-06 15:50:52 315

原创 软考题目之头结点、头指针和首元节点

遇到一个让人迷惑的题目。以下关于线性表采用链式存储时删除节点运算的描述,正确的是()A.带头结点的线性链表删除结点时,不需要更改头指针。B.带头结点的线性链表删除第一个结点时,需要更改头指针。C.不带头结点的线性链表删除结点时,需要更改头指针。D.不带头结点的线性链表删除第一个结点时,不需要更改头指针。首先,明确几个概念。首元结点:指链表中存储第一个数据元素a1的结点。

2017-04-06 15:50:46 926

原创 集合1--毕向东java基础教程视频学习笔记

Day14 集合框架01 体系概述02 共性方法03 迭代器04 List集合共性方法05 ListIterator06 List集合具体对象特点07 Vector中的枚举 01 体系概述集合类为什么出现集合类?面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就需要对对象进行存储。集合就是存储对象最常用的一种方式。数组和集合类同是容器,有何不同?数组虽然也可

2017-04-06 15:50:40 1364

原创 多线程2--毕向东基础视频教程学习笔记

Day12多线程:1.线程间通信-示例代码2.线程间通信-解决安全问题3.线程间通信-等待唤醒机制4.线程间通信-代码优化5.线程间通信-生产者消费者  1.线程间通信-示例代码线程间通信:其实就是多个线程在操作同一个资源,但操作的动作不同。示例代码: 1 class Res 2 2 { 3 3 String name

2017-04-06 15:50:35 732

原创 网络编程4--毕向东java基础教程视频学习笔记

Day2406 自定义浏览器-Tomcat服务端07 自定义图形界面浏览器-Tomcat服务端08 URL-URLConnection09 小知识点10 域名解析 06 自定义浏览器-Tomcat服务端客户端:自定义服务端:Tomcat 1 import java.net.*; 2 import java.io.*; 3 class MyIE 4 {

2017-04-06 15:50:30 684

原创 网络编程3--毕向东java基础教程视频学习笔记

Day2401 TCP上传图片02 客户端并发上传图片03 客户端并发登录04 浏览器客户端-自定义服务端05 浏览器客户端-Tomcat服务端 01 TCP上传图片 1 import java.net.*; 2 import java.io.*; 3 class PicClient 4 { 5 public static void main(S

2017-04-06 15:50:25 656

原创 网络编程2--毕向东java基础教程视频学习笔记

Day 2308 Udp接收端09 Udp键盘录入数据方式10 Udp聊天11 TCP传输12 TCP传输213 TCP练习14 TCP复制文件 08 Udp接收端需求:定义一个应用程序,用于接收udp协议传输的数据并处理。思路:1.定义UdpSocket服务。2.定义一个数据报包,因为要存储接收到的字节数据,而数据报包对象中有更多的功能可以提取字节数据中不同的数据信息。3.通

2017-04-06 15:50:19 839

原创 IO流05--毕向东JAVA基础教程视频学习笔记

Day2010 创建java文件列表11 Properties简述12 Properties存取13 Properties存取配置文件14 Properties练习15 PrintWriter16 合并流17 切割文件 10 创建java文件列表练习:将一个指定目录下的java文件的绝对路径,存储到一个文本文件中,建立一个java文件列表的文件。思路:1.对指定的目录进行递归2

2017-04-06 15:50:14 681

原创 IO流04--毕向东JAVA基础教程视频学习笔记

Day2001 File概述02 File对象功能-创建和删除03 File对象功能-判断04 File对象功能-获取05 File对象功能-文件列表106 File对象功能-文件列表207 列出目录下所有内容-递归08 列出目录下所有内容-带层次09 删除带内容的目录 01 File概述File类用来将文件或者文件夹封装成对象方便对文件与文件夹进行操作File对象可以作为参数传递

2017-04-06 15:50:07 609

原创 IO流03--毕向东JAVA基础教程视频学习笔记

提要16 读取转换流17 写入转换流18 流操作规律-119 流操作规律-220 改变标准输入输出设备21 异常的日志信息22 系统信息 16 读取转换流字符流体系中的InputStreamReader,是字节流通向字符流的桥梁:它使用指定的charset读取字节并将其解码为字符。它使用的字符集可以由名称指定或显示给定,否则将接受平台默认的字符集。 1 /* 2 通

2017-04-06 15:50:01 651

原创 IO流02--毕向东JAVA基础教程视频学习笔记

提要08 自定义装饰类09 LineNumberReader10 MyLineNumberReader11 字节流File读写操作12 拷贝图片13 字节流的缓冲区14 自定义字节流的缓冲区-read和write的特点15 读取键盘录入  08 自定义装饰类 1 /*自定义装饰设计类*/ 2 import java.io.*; 3 class MyBufferedR

2017-04-06 15:49:55 1138

原创 IO流01--毕向东JAVA基础教程视频学习笔记

提要01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通过缓冲区复制文本文件)04 IO流(readLine的原理)05 IO流(MyBufferedReader)06 IO流(装饰设计模式)07 IO流(装饰和继承的区别)01 IO流(BufferedWriter)字符流的缓冲区缓冲区的出现提高了对数据的读写效率。对应类Buffered

2017-04-06 15:49:49 470

原创 网络编程1--毕向东java基础教程视频学习笔记

目录:01 网络编程概述102 网络编程概述203网络编程 网络模型04网络编程 IP地址05网络编程 TCP和UDP06网络编程 Socket07网络编程 UDP发送端  01 网络编程概述11.找到对方IP。2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,给这些网络应用程序都用数字进行标识。为了方便称呼这个数字,把它称为端口,是逻辑端口。3.

2017-04-06 15:49:42 402

原创 初学多线程练习3--移动的文本

Flash中的逐帧动画可以实现文本移动显示的效果,java程序也可以实现类似效果哦。1.Ticker类继承Canvas,实现Runnable接口。用Canvas中的paint方法控制字符串的移动位置。2.TickerFrame 类继承Frame,实现ActionListener窗口,添加两个按钮来控制文本的移动和停止。核心部分:字符串快要离开显示区域是,需要复位减少的x坐标值。由于

2017-04-06 15:49:37 229

空空如也

空空如也

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

TA关注的人

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