自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq:489366879

程序员

  • 博客(285)
  • 收藏
  • 关注

原创 java -池化技术

java性能优化,通常要考虑GC, 线程上下文切换,网络IO操作的影响;池化技术可在一定场景下很好的规避这些问题,如对象(内存)池,线程池,连接池等; 本文讲几个典型案例;一. 规避GC--对象池 apache common-pool对象池,对象复用,完整的状态管理;二. 规避线程上下文切换损失---线程池1 线程池主要类型:newCachedThreadPool如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程; newFixedThreadPo...

2021-06-22 10:42:39 542

原创 Redis-应用场景

一:缓存——热数据热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是所有类似工具都有的,而且相比于memcached还提供了丰富的数据类型可以使用,另外,内存中的数据也提供了AOF和RDB等持久化机制可以选择,要冷、热的还是忽冷忽热的都可选。结合具体应用需要注意一下:很多人用spring的AOP来构建redis缓存的自动生产和清除,过程可能如下: Select 数据库前查询redis,有的话使用redis数据,放弃sel

2021-06-16 14:52:25 92

原创 Java - ThreadLocal

多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。  ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一乐ThreadLocal变量,那么访问这个变量的每

2021-06-16 11:41:46 109

原创 Java-自旋锁

自旋锁(spinlock):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环。获取锁的线程一直处于活跃状态,但是并没有执行任何有效的任务,使用这种锁会造成busy-waiting。Java如何实现自旋锁?下面是个简单的例子:...

2021-06-15 18:58:34 124

原创 Java-CompareAndSet(CAS)

先要说一下,AtomicInteger类compareAndSet通过原子操作实现了CAS操作,最底层基于汇编语言实现。简单说一下原子操作的概念,“原子”代表最小的单位,所以原子操作可以看做最小的执行单位,该操作在执行完毕前不会被任何其他任务或事件打断。CAS是Compare And Set的一个简称,如下理解:1,已知当前内存里面的值current和预期要修改成的值new传入2,内存中AtomicInteger对象地址对应的真实值(因为有可能别修改)real与current对比,...

2021-06-15 17:09:48 1346 1

原创 Java-Thread.Sleep(0)作用

Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。竞争的结果也许是当前线程仍然获得CPU控制权,也许会换成别的线程获得CPU控制权。这也是我们在大循环里面经常会写一句Thread.Sleep(0) ,因为这样就给了其他线程比如Paint线程获得CPU控制权的权力,这样界面就不会假死在那里。...

2021-06-11 13:44:53 379

原创 Linux IO模式详解

一 概念说明在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O

2021-06-09 15:15:24 103

原创 Java-异步 I/O (AIO)

AIONIO2.0引入了新的异步通道概念,并提供了异步文件通道和异步套接字通道的实现。异步通道提供两种方式获取操作结果.通过java.util.concurrent.Future类來表示异步操作的结果;在执行异步操作的时候传入一个java.nio.channels。CompletionHandler接口的实现类作为操作完成的回调。NIO2.0的异步套接字通道是真正的异步非阻塞I/O,它对应UNIX网络编程中的事件驱动I/O (AIO),它不需要通过多路复用器(Selector)对注册的通道进..

2021-06-09 14:34:31 406

原创 Java - I/O 多路复用(NIO)

NIONIO,有人解释为new I/O,有人解释为Non-block I/O(我更倾向后者)。正是由于Java传统BIO的拙劣表现,才使得Java支持非阻塞I/O的呼声日渐高涨,最终,JDK1.4版本提供了新的NIO类库,Java终于也可以支持非阻塞I/O 了。NIO主要的类和接口如下:进行异步I/O操作的缓冲区ByteBuffer等; 进行异步I/O操作的管道Pipe; 进行各种I/O操作(异步或者同步)的Channel,包括ServerSocketChannel和SocketChanne

2021-06-09 13:32:46 668 5

原创 Java - 伪异步I/O编程

伪异步I/O编程为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化,后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系,其中M可以远远大于N,通过线程池可以灵活的调配线程资源, 设置线程的最大值, 防止由于海量并发接入导致线程耗尽。...

2021-06-09 10:20:23 145

原创 Java - 同步阻塞模式(BIO)

BIO在JDK1.4之前,基于Java的所有Socket通信都采用同步阻塞模式(BIO),这种一请求一应答的通信模型简化了上层的应用开发,但是在性能和可靠性方面却存在着巨大的瓶颈。当并发量增大,响应时间延迟增大之后,采用Java BIO开发的服务端只有通过硬件的不断扩容来满足高并发和低延迟,它极大的增加了企业的成本,随着集群规模的不断膨胀,系统的可维护性也面临巨大的挑战。...

2021-06-09 10:14:21 240

原创 设计模式 - 代理模式

意图:为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。何时使用:想在访问一个类时做一些控制。如何解决:增加中间层。关键代码:实现与被代理类组合。public interface Image { void di

2021-04-26 19:14:06 54

原创 设计模式 - 单例模式

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。public class SingleObject { //创建 SingleObject 的一个对象 private static SingleObject instance = new SingleObject();

2021-04-26 13:52:13 75

原创 设计模式 - 工厂模式

意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。何时使用:我们明确地计划不同条件下创建不同实例时。如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。关键代码:创建过程在其子类执行。应用实例:1、您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现。 2、Hibernate 换数据库只需换方言和驱动就可以。注意事项:作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂.

2021-04-26 13:40:41 80

原创 Unity Shader 中的 _Time 的单位

名称 类型 说明 _Time float4 t 是自该场景加载开始所经过的时间,4个分量分别是 (t/20, t, t*2, t*3) _SinTime float4 t 是时间的正弦值,4个分量分别是 (t/8, t/4, t/2, t) _CosTime float4 t 是时间的余弦值,4个分量分别是 (t/8, t/4, t/2, t) unity_DeltaTime float4 dt 是时间增量,4个分量的值分别是(dt

2021-03-10 14:35:28 1319 1

原创 U3d Shader 转 Laya Shader UnityObjectToClipPos 函数源码翻译

//u_MvpMatrix mvp矩阵//a_Position 顶点坐标vec4 UnityObjectToClipPos(){ #ifdef GPU_INSTANCE return a_MvpMatrix * a_Position; #else return u_MvpMatrix * a_Position; #endif}vec3 UnityObjectToWorldNormal(vec...

2021-03-10 14:20:55 511

原创 Unity - 光照模型

#pragma surface surf Lamber ,这是一个很经典的 内置 漫反射模型简单解释就是一个点的反射光强是和该点的法线向量和入射光向量和强度和夹角有关系的,其结果就是这两个向量的点积。既然已经知道了光照计算的原理,我们先来看看如何实现一个自己的光照模型吧。自己实现:首先将原来的#pragma行改为这样 #pragma surface surf CustomDiffuse 然后在SubShader块中添加如下代码 inline float4 Light.

2021-03-09 13:49:10 152

原创 Unity Shader -UnpackNormal

UnpackNormal()函数在UnityCG.cginc中,它是对法线纹理的采样结果的一个反映射操作,其对应的法线纹理需要设置为Normal map的格式,才能使用该函数,如下是函数的原型:fixed3 UnpackNormalmapRGorAG(fixed4 packednormal){ // This do the trick packednormal.x *= packednormal.w; fixed3 normal; normal.xy = packed

2021-03-09 13:30:06 990

原创 unity shader - SurfaceOutput结构

表面着色器中有个数据类型 SurfaceOutput 是一个包含描述一个物体表面渲染特性的结构位于Lighting.cginc 文件中SurfaceOutput是预定义的输出结构,我们的surf函数的目标就是根据输入把这个输出结构填上。SurfaceOutput结构体的定义struct SurfaceOutput { half3 Albedo; //像素的颜色 half3 Normal; //像素的法向值 half3 Emission; /...

2021-03-09 13:16:55 821

原创 shader 内置函数: GLSL 到 UNITY 对应关系

#ifndef GlslToHlsl#define GlslToHlsl#define vec2 float2 #define vec3 float3 #define vec4 float4 #define mat2 float2x2 #define mat3 float3x3 #define mat4 float4x4 #define iGlobalTime _Time.y #define mod fmod #define mix lerp #define frac...

2021-03-09 11:11:57 515

原创 SpringBoot JPA 中无法注入 JpaRepository 接口的问题及解决方案

错误: 在Springboot 框架中使用JPA的过程中,怎么来实现数据库操作底层的交互呢?Spring JPA其实已经提供了一套很全面的解决方案,实现对数据库的增、删、查、改只需要继承JPA实现类: org.springframework.data.jpa.repository.query.SimpleJpaRepository或者直接继承JPA提供的接口:org.spr...

2020-02-17 14:15:25 2585

原创 Spring 方法级别数据校验:@Validated + MethodValidationPostProcessor 优雅的完成数据校验动作

效果示例@Validated(Default.class)public interface HelloService { Object hello(@NotNull @Min(10) Integer id, @NotNull String name);}// 实现类如下@Slf4j@Servicepublic class HelloServiceImpl impleme...

2020-02-16 14:11:59 956 1

原创 lombok 注解 @Getter @Setter 详解

1.为什么强大?项目中经常使用bean,entity等类,绝大部分数据类类中都需要get、set、toString、equals和hashCode方法,尽管IDE工具都会帮我们生成。但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok之后,就不需要编写或生成setter或getter等方法...

2020-02-14 16:20:25 814

原创 Node Sass could not find a binding for your current environment 错误解决

1.运行npm rebuild node-sass2 .上面不行运行npm uninstall -s node-sassnpm install -s node-sass3老项目可能有些包的依赖版本发生变化,可以执行 npm audit fix...

2020-01-21 20:20:44 691

原创 linux 下开启oracle服务和开启监听和 开机自动重启

1. 手动重启su - oracle 切换到oracle用户模式下sqlplus /nolog //登录sqlplusSQL> connect /as sysdba //连接oracleSQL> startup //起动数据库SQL> exit //退出sqlplus ,起动监听 cd $ORACLE_HOME/bin //进入oracle安...

2020-01-21 14:36:27 383

原创 Win7系统 端口被占用解决办法

方法/步骤1、点击左下角“开始”,在搜索框中输入“cmd”回车;2、在命令行输入“netstat -ano”回车;netstat -aon |findstr 803、根据查看后的PID来查看是否是哪一个程序占用的tasklist |findstr "1736"4、显示PID1.鼠标右键点击任务栏,点选“启动任务管理器”2.弹出任务管理器窗口3.点击“查看”,...

2020-01-14 15:22:11 264

转载 Spring Boot 项目中的 parent

Spring Boot 项目创建成功后,pom.xml 坐标文件中都有如下一段引用:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2....

2020-01-05 21:28:44 478

原创 vue 插件的封装

一.插件插件通常会为 Vue 添加全局功能。插件的范围没有限制——一般有下面几种:1.添加全局方法或者属性,如:vue-custom-element 2.添加全局资源:指令/过滤器/过渡等,如vue-touch 3.通过全局 mixin 方法添加一些组件选项,如:vue-router 4.添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。 5.一个...

2019-12-25 16:21:20 727

原创 vue 自定义指令 directive

一.自定义指令directive除了核心功能默认内置的指令 (v-model和v-show),Vue 也允许注册自定义指令。注意,在Vue2.0中,代码复用和抽象的主要形式是组件。然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。来个实例,当页面加载时,该input元素将获得焦点:// 注册一个全局自定义指令 `v-focus`Vue....

2019-12-25 16:09:41 155

原创 vue+axios 前端实现的常用拦截

一、路由拦截使用首先在定义路由的时候就需要多添加一个自定义字段requireAuth,用于判断该路由的访问是否需要登录。如果用户已经登录,则顺利进入路由,否则就进入登录页面,路由配置如下:const routes = [ { path: '/', name: '/', component: Index }, { ...

2019-12-25 15:48:18 181

原创 vuex 动态引入 store modules

主要解决的问题每次建一个module需要自己去主index.js里面去注册为了偷懒,也为了避免团队开发时同时对index.js 进行修改引发冲突所以在index.js中 动态的对子目录和模块进行注册我的目录结构是store index modules   common index.js sys log.js base user...

2019-12-25 14:37:59 1480

原创 Vuex基本使用的总结

使用在 Vue 的单页面应用中使用,需要使用Vue.use(Vuex)调用插件。使用非常简单,只需要将其注入到Vue根实例中。import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({ state: { count: 0 },getter: { doneTodos: (state, ...

2019-12-25 14:11:40 100

原创 关于 Vue.use() 详解

问题相信很多人在用Vue使用别人的组件时,会用到 Vue.use() 。例如:Vue.use(VueRouter)、Vue.use(MintUI)。但是用 axios时,就不需要用 Vue.use(axios),就能直接使用。那这是为什么呐?答案因为 axios 没有 install。什么意思呢?接下来我们自定义一个需要 Vue.use() 的组件,也就是有 install 的组件,...

2019-12-23 22:08:51 174

原创 node.js 模块中 exports 和 module.exports 区别

Node应用由模块组成,采用CommonJS模块规范。根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports...

2019-12-15 18:03:30 152

原创 npm的命令参数 --save-dev 和 --save 两者有什么区别

我们在安装npm包的时候经常会遇到 --save-dev 和 --save 这两个命令参数,两个命令都是往package.json文件里写入信息,两者有什么区别呢?1. --save 会把依赖包名称添加到 package.json 的 dependencies 键下,而 --save-dev 会添加到 devDependencies 键下。2.dependencies 是运行时的依赖,而d...

2019-12-15 17:28:14 142

原创 YML简介

在接触springboot的时候遇到了一种特殊的配置文件 .yml,本文对yml作简单介绍,快速入手yml。一、YML是什么YAML (YAML Aint Markup Language)是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言...

2019-12-09 21:20:53 809

转载 nethogs命令详解

说明:有很多适用于Linux系统的开源网络监视工具.比如说,你可以用命令iftop来检查带宽使用情况. netstat用来查看接口统计报告,还有top监控系统当前运行进程.但是如果你想要找一个能够按进程实时统计网络带宽利用率的工具,那么NetHogs值得一看。NetHogs是一个小型的net top工具,不像大多数工具那样拖慢每个协议或者是每个子网的速度而是按照进程进行带宽分组.NetHog...

2019-06-30 19:56:12 1375

转载 浅谈 RPC、RMI、REST 这些很绕的概念

什么是 RPCRPC(Remote Procedure Call) 翻译过来叫远程过程调用,加上 Protocol 之后也有称之为远程过程调用协议,可以由不同的语言实现,根据维基百科的解释 —— RPC 指在分布式环境下,一个计算机程序能调用另一个不同地址空间里的方法(不同地址空间通常指局域网下的另一台计算机),但是编码的形式就像调用一个本地方法一样,程序员不用去关心背后的细节。为什么要有 ...

2019-06-23 00:53:26 124

原创 Linux load average 高的"元凶"

如何找出系统中load高时处于运行队列的进程系统有很高的负载但是CPU使用率却很低,或者负载很低而CPU利用率很高,这两者没有直接关系,如何用脚本统计出来处于运行队列的进程呢?每隔1s统计一次:#!/bin/bashLANG=CPATH=/sbin:/usr/sbin:/bin:/usr/bininterval=1length=86400for i in $(seq 1 $...

2019-06-15 20:51:30 13294

转载 关于Redis中缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等概念的入门及简单解决方案

一、缓存雪崩通俗简单的理解就是:由于原有缓存失效(或者数据未加载到缓存中),新缓存未到期间(缓存正常从Redis中获取,如下图)所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机,造成系统的崩溃。缓存失效的时候如下图:缓存失效时的雪崩效应对底层系统的冲击非常可怕!那有什么办法来解决这个问题呢?基本解决思路如下:第一,...

2019-06-14 23:30:48 109

空空如也

空空如也

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

TA关注的人

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