<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[printfscanfmng的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/printfscanfmng</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; printfscanfmng]]></copyright><item><title><![CDATA[性能测试]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/114271752</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/114271752</guid><author>printfscanfmng</author><pubDate>Mon, 01 Mar 2021 22:21:57 +0800</pubDate><description><![CDATA[什么是软件性能和性能测试
软件性能 定义：软件的性能是一种软件的非功能特性，它关注的不是软件是否能够完成特定的功能，而是在于完成功能时展现的及时性。
由以上定义可知性能关注的是软件的非功能特性，所以一般来说性能测试接入的时机是在功能测试完成之后。
由及时性可知性能也是一种指标，可以使用时间或者其他指标来衡量，通常我们会使用某些工具或者手段来检测软件的某些指标是否达到要求，这就是性能测试。
性能测试定义：指通过过自动化的测试工具模拟多种正常，峰值以及异常负载条件来对系统的各项指标进行测试。
不同人眼中的软件性]]></description><category></category></item><item><title><![CDATA[Jmeter性能测试学习笔记]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/114269394</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/114269394</guid><author>printfscanfmng</author><pubDate>Mon, 01 Mar 2021 20:46:47 +0800</pubDate><description><![CDATA[Jmeter简介：JMeter就是Apche开发的一款测试工具。
（可以说是纯Java开发)
Jmeter可以做什么：
1. 接口测试（主要）
2. 性能测试
3. 压力测试（主要）
4. 数据库测试
5. java程序测试
Jmeter的优点:
1.开源免费
2.支持多协议
3.轻量级
4.功能强大
Jmeter的缺点:
使用jmeter无法验证JS程序，也无法验证页面UI，必须要和Selenium配合完成Web2.0应用的测试。
Jmeter的配置和安装：
需要java环境
官网地址：   https:]]></description><category></category></item><item><title><![CDATA[原子累加器 LongAdde]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/106265249</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/106265249</guid><author>printfscanfmng</author><pubDate>Thu, 21 May 2020 18:53:00 +0800</pubDate><description><![CDATA[累加器性能比较
private static &lt;T&gt; void demo(Supplier&lt;T&gt; adderSupplier, Consumer&lt;T&gt; action) {
 T adder = adderSupplier.get();
 long start = System.nanoTime();
 List&lt;Thread&gt; ts = new ArrayList&lt;&gt;();
 // 4 个线程，每人累加 50 万
 for (int i = 0; ]]></description><category></category></item><item><title><![CDATA[JUC包下的原子类的实现方法]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/106265065</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/106265065</guid><author>printfscanfmng</author><pubDate>Thu, 21 May 2020 18:37:49 +0800</pubDate><description><![CDATA[class AccountSafe implements Account {
 private AtomicInteger balance;
 public AccountSafe(Integer balance) {
 this.balance = new AtomicInteger(balance);
  }
 @Override
 public Integer getBalance() {
 return balance.get();
 }
 @Override
 public void withdr]]></description><category></category></item><item><title><![CDATA[synchronized的底层原理以及锁膨胀对应的JMM模型]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/106262705</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/106262705</guid><author>printfscanfmng</author><pubDate>Thu, 21 May 2020 18:14:07 +0800</pubDate><description><![CDATA[首先先说一下对象头的概念
对象头
普通对象
kclass Word 通俗的话来说就是指这个对象属于哪一个类。

数组对象

64 位虚拟机 Mark Word

Monitor
下面说一下Monitor原理
Monitor 被翻译为监视器或管程
每个 Java 对象都可以关联一个 Monitor 对象，如果使用 synchronized 给对象上锁（重量级）之后，该对象头的Mark Word 中就被设置指向 Monitor 对象的指针

刚开始 Monitor 中 Owner 为 null
当 Thread]]></description><category></category></item><item><title><![CDATA[深入理解并发编程的JMM内存模型]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/106260635</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/106260635</guid><author>printfscanfmng</author><pubDate>Thu, 21 May 2020 17:23:37 +0800</pubDate><description><![CDATA[JMM 即 Java Memory Model，它定义了主存、工作内存抽象概念，底层对应着 CPU 寄存器、缓存、硬件内存、
CPU 指令优化等。
JMM 体现在以下几个方面
原子性 - 保证指令不会受到线程上下文切换的影响
可见性 - 保证指令不会受 cpu 缓存的影响
有序性 - 保证指令不会受 cpu 指令并行优化的影响
(从JMM层面可以更深刻理解线程安全的特性）
一.可见性
退不出的循环
先来看一个现象，main 线程对 run 变量的修改对于 t 线程不可见，导致了 t 线程无法停止：
stat]]></description><category></category></item><item><title><![CDATA[线程的状态在操作系统层面和JAVA API层面的区别]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/106259535</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/106259535</guid><author>printfscanfmng</author><pubDate>Thu, 21 May 2020 16:19:40 +0800</pubDate><description><![CDATA[理解线程之间的状态转换是并发编程的基本功，基础是重中之重，是学到了就不会随着技术迭代而改变的重要基本功。
五种状态
这是从 操作系统 层面来描述的

【初始状态】仅是在语言层面创建了线程对象，还未与操作系统线程关联
【可运行状态】（就绪状态）指该线程已经被创建（与操作系统线程关联），可以由 CPU 调度执行
【运行状态】指获取了 CPU 时间片运行中的状态
当 CPU 时间片用完，会从【运行状态】转换至【可运行状态】，会导致线程的上下文切换
【阻塞状态】
如果调用了阻塞 API，如 BIO 读写文件，这时该]]></description><category></category></item><item><title><![CDATA[计算机网络学习笔记（一概述)]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/105907582</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/105907582</guid><author>printfscanfmng</author><pubDate>Sun, 03 May 2020 21:29:02 +0800</pubDate><description><![CDATA[网络的两个重要基本特点
连通性：上网用户之间交换信息（数据，音频）就像用户的计算机可以直接彼此联通一样
共享：资源共享 (包含 信息共享 软件共享 硬件共享）
互联网组成
边缘部分：由所有链接连接在因特网上的主机组成，用户直接使用的，用来通信的，以及资源共享。
核心部分：由大量网络和连接这些网络的路由器组成，这部分是为边缘部分提供服务的
(提供连通性和交换）
主机和路由器作用不同
主机为用户进行信...]]></description><category></category></item><item><title><![CDATA[TCP/IP协议复习]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/105261521</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/105261521</guid><author>printfscanfmng</author><pubDate>Thu, 02 Apr 2020 09:04:41 +0800</pubDate><description><![CDATA[我们先来说说UDP
UDP的特点
UDP传输的过程类似于寄信.
无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;
不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;
面向数据报: 不能够灵活的控制读写数据的次数和数量
UDP的缓冲区
UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内...]]></description><category></category></item><item><title><![CDATA[ConcurrentHashMap实现原理]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/105231544</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/105231544</guid><author>printfscanfmng</author><pubDate>Tue, 31 Mar 2020 21:48:24 +0800</pubDate><description><![CDATA[我结合上一篇的HashMap再来复习一下ConcurrentHashMap
ConcurrentHashMap和HashMap相比较最大的不同是线程安全
至于为什么线程安全在JDK1.7和Jdk1.8是不一样的
我们来看看1.7版本
1.它的底层数据结构还是数组加上链表 ，HashEntry为链表的结点
2.它主要采用了segment分段锁技术，在多线程并发操作的时候。对同一个segment进行同...]]></description><category></category></item><item><title><![CDATA[HashMap底层实现原理]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/105216810</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/105216810</guid><author>printfscanfmng</author><pubDate>Tue, 31 Mar 2020 12:08:19 +0800</pubDate><description><![CDATA[HashMap是我们常用的数据结构，是一种有由数组和链表组成的数据结构
数组里每个地方都保存了Key-Val这样的实例，JAVA7叫Entry,JAVA8叫Node
但是它的本身就是Null，所以在put进行时，会根据key的hash去计算一个indext值（也就是插入位置）
hash具体是怎样计算的呢
源代码里是这样实现的
hash=(hash&gt;&gt;16)^hash
index=(ar...]]></description><category></category></item><item><title><![CDATA[网络复习之网络传输基本流程]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/105147709</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/105147709</guid><author>printfscanfmng</author><pubDate>Fri, 27 Mar 2020 19:30:13 +0800</pubDate><description><![CDATA[基本的网络背景
最开始计算机之间都是相互独立的，后来为了共享形成信息传递，所以才有了基本的网络。通过交换机和路由器形成局域网和广域网。（区别在于公网IP和私网IP的转换，从图中可以看出就是相对的概念）例如我们天朝特色的“广域网”其实也可以看作是大的局域网。

网络协议的基本概念
计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同...]]></description><category></category></item><item><title><![CDATA[JAVA设计模式之 建造者模式]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/103627940</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/103627940</guid><author>printfscanfmng</author><pubDate>Fri, 20 Dec 2019 16:06:38 +0800</pubDate><description><![CDATA[建造者模式的本质：
分离了对象子组件的单独构造（由Builder来负责）和装配（由Director负责），
从而可以构造出复杂的对象。这个模式适用于：某个对象的构造过程复杂的情况下使用。
由于实现了构造和装配的解耦，不同的构造器，相同的配置，也可以造出不同的对象
相同的构造器，不同的装配顺序也可以造出不同的对象。也就是实现了构建算法，装配算法的解耦，实现了更好的复用。
代码如下
public cl...]]></description><category></category></item><item><title><![CDATA[JAVA设计模式之  工厂模式]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/103624703</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/103624703</guid><author>printfscanfmng</author><pubDate>Fri, 20 Dec 2019 10:07:17 +0800</pubDate><description><![CDATA[工厂模式
实现了创建者和调用者的分离
详细分类
简单工厂模式
工厂方法模式
抽象工厂模式
核心本质：
实例化对象 用工厂方法代替new操作
将选择实现类。创建对象统一管理和控制。从而将调用者跟我们的实现类接耦
简单工厂模式：
1.简单工厂模式也叫静态工厂模式，就是工厂类一般使用静态方法。通过接收参数的不同
来返回不同的对象实例
2.对于增加新产品无能为力，不修改代码的话，是无法扩展的。
代码如下
...]]></description><category></category></item><item><title><![CDATA[JAVA设计模式之 单列模式]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/103622928</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/103622928</guid><author>printfscanfmng</author><pubDate>Thu, 19 Dec 2019 22:16:14 +0800</pubDate><description><![CDATA[单例模式
核心作用： 保证一个类只有一个实例，并且提供一个访问该实例的全局访问点。
这是饿汉式
public class SingletonDemo1 {
    //类初始化的时候，立即加载这个对象（无延时加载的优势）！由于加载类时，天然的是线程安全的！
    private static  SingletonDemo1 instance= new SingletonDemo1();//类初始...]]></description><category></category></item><item><title><![CDATA[网络初学（三）]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/103569261</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/103569261</guid><author>printfscanfmng</author><pubDate>Mon, 16 Dec 2019 20:15:29 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[网络初学（二）]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/103569216</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/103569216</guid><author>printfscanfmng</author><pubDate>Mon, 16 Dec 2019 20:12:54 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[网络初学笔记（一）]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/103569111</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/103569111</guid><author>printfscanfmng</author><pubDate>Mon, 16 Dec 2019 20:10:52 +0800</pubDate><description><![CDATA[在老师上课板书的基础上加了一些自己的理解。

]]></description><category></category></item><item><title><![CDATA[Leetcode原题 合并两个有序链表 （JAVA解决）]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/101869215</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/101869215</guid><author>printfscanfmng</author><pubDate>Tue, 01 Oct 2019 22:16:17 +0800</pubDate><description><![CDATA[示例 1：
输入：[1,2,3,4,5]
输出：此列表中的结点 3 (序列化形式：[3,4,5])
返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
注意，我们返回了一个 ListNode 类型的对象 ans，这样：
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = ...]]></description><category></category></item><item><title><![CDATA[牛客网原题 输入一个链表，输出该链表中倒数第k个结点。（JAVA解决）]]></title><link>https://blog.youkuaiyun.com/printfscanfmng/article/details/101868960</link><guid>https://blog.youkuaiyun.com/printfscanfmng/article/details/101868960</guid><author>printfscanfmng</author><pubDate>Tue, 01 Oct 2019 22:11:05 +0800</pubDate><description><![CDATA[题目描述
输入一个链表，输出该链表中倒数第k个结点。
思路：还是利用快慢指针来解决
让快指针先走k个节点
然后再让快指针和慢指针一起走。当快指针走到最后一个的时候。
停止，返回慢指针，此时慢指针指向的就是倒数第K个节点

```java
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
...]]></description><category></category></item></channel></rss>