自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 go语言上手-HTTP 文件服务器

Go语言语法简单易懂,学习曲线平缓,不需要像 C/C++ 语言动辄需要两到三年的学习期。Go语言被称为“互联网时代的C语言”。互联网的短、频、快特性在Go语言中体现得淋漓尽致。一个熟练的开发者只需要短短的一周时间就可以从学习阶段转到开发阶段,并完成一个高并发的服务器开发。Go语言是 Google 公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。所以它是一门类型安全的语言,加上通过构建到本地代码,程序的执行速度也非常快。Go语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机

2021-08-23 10:34:37 596

原创 go语言标准库

在Go语言的安装文件里包含了一些可以直接使用的包,即标准库。Go语言的标准库(通常被称为语言自带的电池),提供了清晰的构建模块和公共接口,包含 I/O 操作、文本处理、图像、密码学、网络和分布式应用程序等,并支持许多标准化的文件格式和编解码协议。在 Windows 下,标准库的位置在Go语言根目录下的子目录 pkg\windows_amd64 中;在 Linux 下,标准库在Go语言根目录下的子目录 pkg\linux_amd64 中(如果是安装的是 32 位,则在 linux_386 目录中)。一般情况

2021-08-23 10:21:23 538

原创 go语言简介

Go语言简介Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布。Go 是非常年轻的一门语言,它的主要目标是“兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性”。Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持。Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程。Go语言的推出,旨在不损失应用程序性能的情况下降低代码的复杂性,具有“部署简单、并发

2021-08-23 09:56:20 260

原创 GO语言学习笔记

最近开始学习学习go语言,自己每年还是要学点新的东西,否则真的会赶不上时代的。先从《Go语言编程》这本书开始学习GO语言。学好go语言后看看有什么地方可以用到的,之后再寻找下一个需要学习的新东西。和JAVA不一样的地方会用红色标出;自己的一些感想也会用蓝色进行高亮。主要还是记录一些自己觉得眼前一亮的东西,或者需要进行剖析的。前言go语言对编程思想做了一次梳理,融合众家之长,但时刻警惕特性复杂化,极力维持语言特性的简洁,力求小而精。([1])go语言不支持函数重载,不支持操作符重载。go语言反对继

2021-08-20 16:31:33 195

原创 单列模式

1.双重检查锁DCLpackage com.wangyu.test;public class DclSingleton { //volatile 内存可见性 防止指令乱序 private volatile static DclSingleton singleton = null; //私有的构造方法 private DclSingleton(){ } //提供公共访问接口 private static DclSingleton getInsta

2020-11-17 22:30:12 73

原创 优化版冒泡排序

public class Test { public static void main(String[] args) {// 冒泡排序优化版,通过标志位,解决时间复杂度的问题 int[] array = {9,3,5,8,7,3,9,5,3,7,4,1,2}; boolean flag = true; int n = array.length; while(flag){ flag = false;

2020-11-17 21:45:36 88

原创 REDIS缓存雪崩、缓存穿透、缓存击穿

缓存雪崩同一时刻有大量key失效,导致大量请求到数据库解决方案1:key失效时间加上随机值,或者更高级的算法分散失效时间。解决方案2:没有数据时也cache下,过期时间可设置短点,不把过多请求打到db去缓存穿透当查询Redis中没有的数据时,该查询会下沉到数据库层,同时数据库层也没有该数据,当这种情况大量出现或被恶意攻击时,接口的访问全部透过Redis访问数据库,而数据库也没有这些数据,我们称这种现象为缓存穿透解决方案1:请求用户做鉴权校验,参数校验,非法直接返回。解决方案2:使用布隆过滤器

2020-09-15 22:46:59 91

原创 Java中CAS原理详解

Java中CAS原理详解在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。独占锁是一种悲观锁,synchroni

2020-09-14 23:53:56 198

原创 JAVA采用枚举实现单例

采用类加载机制保证public class EnumSingletonDemo { private EnumSingletonDemo(){ } //延迟加载 private enum EnumHolder{ INSTANCE; private EnumSingletonDemo instance; private EnumHolder(){ instance=new EnumSingletonDem

2020-09-13 11:17:47 60

原创 JAVA NIO是什么

NIO为非阻塞的IO,再其出现之前,Java是通过socket来实现基本的网络 通信功能的。 socket本身时阻塞的,如果客户端没有对服务器端发起链接请求,那么accept就i会阻塞。如果连接成功,当数据还在准备阶段,对read的操作同样会阻塞。 当处理多个连接时,就需要采用多线程的方式,由于没个线程都拥有自己的栈空间,而且由于阻塞会导致大量线程进行上下文切换,使得程序运行非常地下,因此j2se1.4中引入了NIO来解决这个问题。 NIO通过selector、channel和buffer老师先非阻.

2020-09-12 23:44:47 327

原创 JAVA基础知识注意点

面向对象有哪些特征抽象封装继承多态多态的实现机制方法的重载重载是指再 统一个类中,方法名相同参数不同的多个方法,是属于编译时多态方法的覆盖子类可以覆盖父类的方法,因此同样的方法再父类和子类中有着不同的表现形式,是属于运行时多态抽象类和接口的异同相同点1)都不能被实例化2)接口的实现类或抽象方法的子类都只有实现类接口或抽象类的方法才能被实例化不同点1)接口只有定义,其方法不能再接口中实现;而抽象类可以有定义与实现2)接口需要有到实现implements关键字,抽象类只

2020-09-11 23:41:00 67

原创 JAVA程序的初始化顺序

JAVA程序的初始化遵循原则:静态对象(变量)优先于非静态对象(变量)初始化,其中静态对象(变量)只初始化一次,而非静态对象(变量)可以初始化多次。父类优先于子类初始化。按照成员变量定义的顺序初始化及时变量定义在各个方法定义之中,他们依然在任何方法(包括构造函数)被调用之前初始化。Java程序初始化可以再许多不同的代码块中来完成,他们的执行顺序如下:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类

2020-09-10 23:49:14 95

原创 Java的内存模型

Java内存模型1、线程与JVM2、java内存区域与java内存模型的区别3、硬件内存架构与java内存模型4、java内存模型对并发特征的保证1基本概念:程序:代码,完成某一件任务,代码序列(静态的概念)进程:程序在某些数据上的一次运行(动态的概念)线程:一个进程可能包含一个或多个线程(占有资源的独立单元)2 JVM与线程JVM什么时候启动?类被调用 JVM线程—》其他的线程(main)线程在JVM中3 JVM内存区域方法区:类信息、常量、static 、JIT (

2020-09-09 23:23:44 158

原创 JAVA设计模式优化性能

代码的结构对应用的整体性能,有着重要的影响。结构优秀的代码,可以避免很多潜在的性能问题,在代码的扩展性上也有巨大的作用;结构清晰、层次分明的代码,也有助于帮你找到系统的瓶颈点,进行专项优化。设计模式就是对常用开发技巧进行的总结,它使得程序员之间交流问题,有了更专业、便捷的方式。事实上,大多数设计模式并不能增加程序的性能,它只是代码的一种组织方式。本课时,我们将一一举例讲解和性能相关的几个设计模式,包括代理模式、单例模式、享元模式、原型模式等。如何找到动态代理慢逻辑的原因?Spring 广泛使用了代理

2020-09-08 22:17:01 428

原创 JAVA池化对象的应用场景

总体来说,当遇到下面的场景时,就可以考虑用池化来增加系统性能:对象的创建或者销毁,需要耗费较多的系统资源;对象的创建或者销毁,耗时长,需要频繁的操作和较长时间的等待;对象创建后,通过一些状态重置,可被反复利用。HikariCP为什么快?他是用fastlist代替arraylist,通过初始化的默认值,减少越界检查的操作;优化并精简了字节码,通过使用javaassist,减少了动态代理的性能损耗,比如使用invokestatic指令代替invokevirtual指令;实现无锁的concur

2020-09-07 23:18:55 319

原创 使用缓存组件的场景

缓存优化的一般思路缓存主要针对的时读操作,当你的功能遇到下面的场景是,就可以用缓存组件实现性能优化:存在缓存热点,缓存的数据能够被频繁使用;读操作明显比写操作多;下游功能存在着比较悬殊的性能差异,下游服务能力有限;加入缓存以后,不会影响程序的正确性,或者引入不可预料的复杂性。缓存与缓冲缓冲,数据一般只是用一次,等待缓冲区满了就执行flush操作;缓存,数据被加载后,可以多次使用,数据将会共享多次。缓存命中率缓存最重要的指标就是命中率,有以下几个因素会影响命中率。缓存容量

2020-09-06 21:19:20 288

原创 JAVA缓冲区让代码加速

缓冲的本质缓冲(buffer)通过对数据进行暂存,然后批量进行传输或者操作,多采用顺序的方式,来缓解不同设备之间次数频繁但速度缓慢的随机读写。从宏观上讲,jvm的堆就是一个大的缓冲区,代码不停在堆空间中产生对象,而垃圾回收器进程则在背后默默地进行垃圾回收。缓冲区的好处缓冲双方能各自保持自己的操作节奏,操作处理顺序也不会被打乱,可以one by one顺序进行。以批量的方式处理,减少网络交互和频繁的I/O操作,从而减少性能损耗。优化用户体验,比如常见的音频/视频缓冲加载,通过提前缓冲数据,达到流

2020-09-06 08:58:12 255

原创 常用的性能分析工具

nmon 获取系统性能数据jvisualvm获取J

2020-09-05 23:18:06 497

原创 lsb_release命令不存在的解决方法

查看系统的发行版本信息,发现不存在这个命令[root@localhost tomcat]# lsb_release -abash: lsb_release: command not found...安装yum -y install redhat-lsb测试[root@localhost tomcat]# lsb_release -aLSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:des

2020-09-05 22:15:16 2505

空空如也

空空如也

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

TA关注的人

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