自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 性能测试

什么是软件性能和性能测试软件性能 定义:软件的性能是一种软件的非功能特性,它关注的不是软件是否能够完成特定的功能,而是在于完成功能时展现的及时性。由以上定义可知性能关注的是软件的非功能特性,所以一般来说性能测试接入的时机是在功能测试完成之后。由及时性可知性能也是一种指标,可以使用时间或者其他指标来衡量,通常我们会使用某些工具或者手段来检测软件的某些指标是否达到要求,这就是性能测试。性能测试定义:指通过过自动化的测试工具模拟多种正常,峰值以及异常负载条件来对系统的各项指标进行测试。不同人眼中的软件性

2021-03-01 22:21:57 185 5

原创 Jmeter性能测试学习笔记

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:

2021-03-01 20:46:47 204 1

原创 原子累加器 LongAdde

累加器性能比较private static <T> void demo(Supplier<T> adderSupplier, Consumer<T> action) { T adder = adderSupplier.get(); long start = System.nanoTime(); List<Thread> ts = new ArrayList<>(); // 4 个线程,每人累加 50 万 for (int i = 0;

2020-05-21 18:53:00 233 1

原创 JUC包下的原子类的实现方法

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

2020-05-21 18:37:49 224

原创 synchronized的底层原理以及锁膨胀对应的JMM模型

首先先说一下对象头的概念对象头普通对象kclass Word 通俗的话来说就是指这个对象属于哪一个类。数组对象64 位虚拟机 Mark WordMonitor下面说一下Monitor原理Monitor 被翻译为监视器或管程每个 Java 对象都可以关联一个 Monitor 对象,如果使用 synchronized 给对象上锁(重量级)之后,该对象头的Mark Word 中就被设置指向 Monitor 对象的指针刚开始 Monitor 中 Owner 为 null当 Thread

2020-05-21 18:14:07 176

原创 深入理解并发编程的JMM内存模型

JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等。JMM 体现在以下几个方面原子性 - 保证指令不会受到线程上下文切换的影响可见性 - 保证指令不会受 cpu 缓存的影响有序性 - 保证指令不会受 cpu 指令并行优化的影响(从JMM层面可以更深刻理解线程安全的特性)一.可见性退不出的循环先来看一个现象,main 线程对 run 变量的修改对于 t 线程不可见,导致了 t 线程无法停止:stat

2020-05-21 17:23:37 118

原创 线程的状态在操作系统层面和JAVA API层面的区别

理解线程之间的状态转换是并发编程的基本功,基础是重中之重,是学到了就不会随着技术迭代而改变的重要基本功。五种状态这是从 操作系统 层面来描述的【初始状态】仅是在语言层面创建了线程对象,还未与操作系统线程关联【可运行状态】(就绪状态)指该线程已经被创建(与操作系统线程关联),可以由 CPU 调度执行【运行状态】指获取了 CPU 时间片运行中的状态当 CPU 时间片用完,会从【运行状态】转换至【可运行状态】,会导致线程的上下文切换【阻塞状态】如果调用了阻塞 API,如 BIO 读写文件,这时该

2020-05-21 16:19:40 290

原创 计算机网络学习笔记(一概述)

网络的两个重要基本特点连通性:上网用户之间交换信息(数据,音频)就像用户的计算机可以直接彼此联通一样共享:资源共享 (包含 信息共享 软件共享 硬件共享)互联网组成边缘部分:由所有链接连接在因特网上的主机组成,用户直接使用的,用来通信的,以及资源共享。核心部分:由大量网络和连接这些网络的路由器组成,这部分是为边缘部分提供服务的(提供连通性和交换)主机和路由器作用不同主机为用户进行信...

2020-05-03 21:29:02 260

原创 TCP/IP协议复习

我们先来说说UDPUDP的特点UDP传输的过程类似于寄信.无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;面向数据报: 不能够灵活的控制读写数据的次数和数量UDP的缓冲区UDP没有真正意义上的 发送缓冲区. 调用sendto会直接交给内核, 由内...

2020-04-02 09:04:41 103

原创 ConcurrentHashMap实现原理

我结合上一篇的HashMap再来复习一下ConcurrentHashMapConcurrentHashMap和HashMap相比较最大的不同是线程安全至于为什么线程安全在JDK1.7和Jdk1.8是不一样的我们来看看1.7版本1.它的底层数据结构还是数组加上链表 ,HashEntry为链表的结点2.它主要采用了segment分段锁技术,在多线程并发操作的时候。对同一个segment进行同...

2020-03-31 21:48:24 135

原创 HashMap底层实现原理

HashMap是我们常用的数据结构,是一种有由数组和链表组成的数据结构数组里每个地方都保存了Key-Val这样的实例,JAVA7叫Entry,JAVA8叫Node但是它的本身就是Null,所以在put进行时,会根据key的hash去计算一个indext值(也就是插入位置)hash具体是怎样计算的呢源代码里是这样实现的hash=(hash>>16)^hashindex=(ar...

2020-03-31 12:08:19 180

原创 网络复习之网络传输基本流程

基本的网络背景最开始计算机之间都是相互独立的,后来为了共享形成信息传递,所以才有了基本的网络。通过交换机和路由器形成局域网和广域网。(区别在于公网IP和私网IP的转换,从图中可以看出就是相对的概念)例如我们天朝特色的“广域网”其实也可以看作是大的局域网。网络协议的基本概念计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同...

2020-03-27 19:30:13 264

原创 JAVA设计模式之 建造者模式

建造者模式的本质:分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责),从而可以构造出复杂的对象。这个模式适用于:某个对象的构造过程复杂的情况下使用。由于实现了构造和装配的解耦,不同的构造器,相同的配置,也可以造出不同的对象相同的构造器,不同的装配顺序也可以造出不同的对象。也就是实现了构建算法,装配算法的解耦,实现了更好的复用。代码如下public cl...

2019-12-20 16:06:38 72

原创 JAVA设计模式之 工厂模式

工厂模式实现了创建者和调用者的分离详细分类简单工厂模式工厂方法模式抽象工厂模式核心本质:实例化对象 用工厂方法代替new操作将选择实现类。创建对象统一管理和控制。从而将调用者跟我们的实现类接耦简单工厂模式:1.简单工厂模式也叫静态工厂模式,就是工厂类一般使用静态方法。通过接收参数的不同来返回不同的对象实例2.对于增加新产品无能为力,不修改代码的话,是无法扩展的。代码如下...

2019-12-20 10:07:17 59

原创 JAVA设计模式之 单列模式

单例模式核心作用: 保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。这是饿汉式public class SingletonDemo1 { //类初始化的时候,立即加载这个对象(无延时加载的优势)!由于加载类时,天然的是线程安全的! private static SingletonDemo1 instance= new SingletonDemo1();//类初始...

2019-12-19 22:16:14 59

原创 网络初学(三)

2019-12-16 20:15:29 102

原创 网络初学(二)

2019-12-16 20:12:54 60 1

原创 网络初学笔记(一)

在老师上课板书的基础上加了一些自己的理解。

2019-12-16 20:10:52 108 1

原创 Leetcode原题 合并两个有序链表 (JAVA解决)

示例 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 = ...

2019-10-01 22:16:17 160 1

原创 牛客网原题 输入一个链表,输出该链表中倒数第k个结点。(JAVA解决)

题目描述输入一个链表,输出该链表中倒数第k个结点。思路:还是利用快慢指针来解决让快指针先走k个节点然后再让快指针和慢指针一起走。当快指针走到最后一个的时候。停止,返回慢指针,此时慢指针指向的就是倒数第K个节点```javapublic class Solution { public ListNode FindKthToTail(ListNode head,int k) {...

2019-10-01 22:11:05 167 1

原创 Leetcode原题 给定一个带有头结点 head 的非空单链表,返回链表的中间结点。(JAVA解决)

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.v...

2019-10-01 22:04:37 600 1

原创 Leetcode原题 反转链表(JAVA解答)

反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL1.定义指针 利用头插法 注意要保存当前指针的下一个节点,便于遍历class Solution { public ListNode reverseList(ListNode head) { L...

2019-10-01 21:57:26 169

原创 Leetcode原题 删除链表中等于给定值 val 的所有节点(JAVA解题)

删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-linked-list-elements解题...

2019-10-01 21:48:34 217

原创 JAVA面向对象之:封装与隐藏

1.我们为什么要引入封装性我们程序设计追求**“高内聚,低耦合”。**高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;低耦合 :仅对外暴露少量的方法用于使用。2.把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。3.封装性思想具体的代码体现:private double radius;public void setRadius(double radius){ t...

2019-09-27 13:34:29 94

原创 .获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。

.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;void Even_digit(int n){ int i; printf(&quot;偶数位是&quot;); //从最高位置开始 31 到 0一共 32位置 // 一共要移动31次 移动32次就为0 了 默认了 第一位也就是0为奇数位

2018-12-02 21:41:29 94

原创 .写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1 程序原型: int count_one_bits(unsigned int value) { // 返

写一个函数返回参数二进制中 1 的个数比如: 15 0000 1111 4 个 1程序原型:int count_one_bits(unsigned int value){// 返回 1的位数}写一个函数返回参数二进制中 1 的个数比如: 15 的二进制表示为 0000 1111 4 个 1程序原型:int count_one_bits(unsigned int value){...

2018-12-02 20:08:46 262

空空如也

空空如也

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

TA关注的人

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