自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (4)
  • 收藏
  • 关注

原创 10、张龙netty学习 Java IO

Java IO流类流的概念Java程序通过流来完成输入/输出。流是生产或消费信息的抽象。流通过Java的输入输出系统与物理设备链接。尽管与它们链接的物理设备不尽相同,所有的流行为具有同样的方式。这样,相同的输入/输出类和方法适用于所有类型的外部设备。这意味着一个输入流能抽象多种不同类型的输入,从磁盘文件,键盘或者网络套接字。同样一个输出流可以输出到控制台、磁盘文件或者相连的网络。流是处理...

2019-09-15 17:06:30 309

原创 9、张龙netty学习Grpc

gRPCgRPC官网 why gRPC?gRPC is a modern open source high performance RPC framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable suppor...

2019-09-15 17:03:31 488

原创 8、张龙netty学习 Thrift

ThriftThrift最初是由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++,Java,Python,PHP,Ruby,Erlang,Perl,C#,javascript,Node.js等。Thrift是一个典型的CS结构,客户端和服务端可以使用不同的语言开发,既然客户端和服务端能使用不同的语言开发,那么一定要有一种中间语言来关联客户端和服务...

2019-09-15 16:51:08 312

原创 7、张龙netty学习 protobuf oneof

protobuf oneofMyDataInfo.protosyntax = "proto2";package com.fjh.netty.protobuf.oneof;option optimize_for = SPEED;option java_package = "com.fjh.netty.protobuf.oneof";option java_outer_classname...

2019-09-15 16:49:38 3116 1

原创 6、张龙netty学习 protobuf

protobuf这个是一个netty实现的server和client通过protobuf传输的程序, 其中ProtobufServerInitialiszer和protobufClientInitializer这两个类里面 addLast的handler里面pipeline.addLast(new ProtobufDecoder(DataInfo.Student.getDefaultInstan...

2019-09-08 18:06:59 256

原创 5、张龙netty学习 netty实现websocket

netty实现websocket服务端public class WebSocketServer { public static void main(String[] args) throws Exception{ EventLoopGroup boosGroup = new NioEventLoopGroup(); EventLoopGroup work...

2019-09-08 17:53:55 187

原创 4、张龙netty学习 netty心跳检测

netty心跳检测服务端public class HeartBeatServer { public static void main(String[] args)throws Exception { EventLoopGroup boosGroup = new NioEventLoopGroup(); EventLoopGroup workGroup ...

2019-09-08 17:50:39 148

原创 3、张龙netty学习 netty实现简单的聊天

netty实现简单的聊天服务端:public class MyChatServer { public static void main(String[] args)throws Exception { EventLoopGroup boosGroup = new NioEventLoopGroup(); EventLoopGroup workGroup ...

2019-09-08 17:38:23 162

原创 2、张龙netty学习 netty服务端和客户端简单实现

netty服务端和客户端简单实现服务端:public class MyServer { public static void main(String[] args)throws Exception { EventLoopGroup boosGroup = new NioEventLoopGroup(); EventLoopGroup workGroup ...

2019-09-08 17:34:51 179

原创 1、张龙netty学习 第一个netty服务端

张龙netty学习 第一个netty服务端public class TestServer { public static void main(String[] args) throws Exception{ EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workGrou...

2019-09-08 17:30:07 836

原创 7、final域

final域final域重排序规则对于final域,编译器和处理器要遵守两个重排序规则:1、在构造函数对final域的写入,与随后把这个构造的对象的引用赋值给一个引用变量,这两个操作不能重排序。2、初次读final域的对象的引用,与随后初次读final域,这两个操作不能重排序。public class FinalExample { int i; ...

2019-09-08 17:24:56 244

原创 6、concurrent包的实现

concurrent包的实现由于Java的CAS同时具有volatile读和volatile写的内存语义,因此Java线程之间的通信现在有了下面4种方式。1)A线程写volatile变量,随后B线程读这个volatile变量。2)A线程写volatile变量,随后B线程用CAS更新这个volatile变量。3)A线程用CAS更新一个volatile变量,随后B线程用CAS更新这个volat...

2019-09-08 17:24:13 93

原创 5、锁内存语义的实现

锁内存语义的实现在ReentrantLock中,调用lock()方法获取锁;调用unlock()方法释放锁。ReentrantLock的实现依赖于Java同步器框架AbstractQueuedSynchronizer(本文简称之为AQS)。AQS使用一个整型的volatile变量(命名为state)来维护同步状态,这个volatile变量是ReentrantLock内存语义实现的关键。Ree...

2019-09-08 17:23:28 149

原创 4、Java内存模型的基础

Java内存模型的基础1、并发编程模型的两个问题在并发编程中,需要了解并会处理这两个关键问题:1.1、线程之间如何通信?通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。a) 在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。(重点)b) 在消息传递的并发模型里,线程之间没有公共状态,线程之间必...

2019-09-08 17:22:37 115

原创 gradle Could not find method leftShift() for arguments解决

gradle第一个程序执行报一下错误:Could not find method leftShift() for arguments [build_5w3reysg1lib6z3z1lr5r2egn$_run_closure1@21159601] on task 查看gradle的版本,我用的是5.5 用 doLast代替 << 这个符号就可以了。...

2019-09-05 15:18:57 2205 1

原创 3_synchronized的实现原理与应用

synchronized的实现原理与应用当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。Java中的每一个对象都可以作为锁。具体表现为以下3种形式。·对于普通同步方法,锁是当前实例对象。·对于静态同步方法,锁是当前类的Class对象。·对于同步方法块,锁是Synchonized括号里配置的对象。从JVM规范中可以看到Synchonized在JVM里的实现...

2019-09-02 20:04:14 131

原创 2_volatile

volatile可见性可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。volatile它在多处理器开发中保证了共享变量的“可见性”。如果volatile变量修饰符使用恰当的话,它比synchronized的使用和执行成本更低,因为它不会引起线程上下文的切换和调度。volatile的定义Java语言规范第3版中对volatile的定义如下:Java编程语言...

2019-09-02 20:01:29 91

原创 并发编程基础知识

并发编程基础知识Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令上下文切换CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所...

2019-09-02 20:00:26 106

原创 经验积累

经验积累如果某个接口有用到缓存,最好在接口请求的时候加一个是否走缓存的字段,这个字段可以不用对外暴露,它的作用是如果线上改了数据库等需要更新缓存,或者改了逻辑需要验证的时候就可以加上这个字段请求一下。不用等到缓存到期,有些缓存的时间比较长非常不好验证。后端开发一个对外提供的http接口的时候,我们应该站在一个调用者的角度去思考接口的返回是否方便调用者调用,举个例子,查询user 的列...

2019-09-02 09:27:33 149

原创 Stream短路

Stream短路Stream操作容易出现错误的地方流的操作类似于sql,是描述性的select name from student where age > 20 and address = “beijing” order by age desc;students.stream().filter(student -> student.getAge > 20).filter(...

2019-09-02 09:23:41 433

原创 Stream分组和分区

Stream分组和分区分区是分组的一种Student student1 = new Student("zhangsan",80,20);Student student2 = new Student("lisi",90,30);Student student3 = new Student("wangwu",90,40);Student student4 = new Student("zha...

2019-08-27 17:58:13 671

原创 线程上下文类加载器

线程上下文类加载器名词解释SPI:Service Provider Interface 服务提供者接口当前类加载器(Current ClassLoader)每个类都会使用自己的类加载器(加载自身的类加载器)来去加载所依赖的类,如果ClassA引用了ClassB,NameClassA的类加载器就会加载ClassB(前提是ClassB没有被加载)线程上下文类加载器(Context Clas...

2019-08-27 17:56:00 1628

原创 java8方法引用

java8方法引用方法的引用就是java8中增加的一种语法糖方法引用的形式方法引用的标准形式是:类名::方法名。有以下四种形式的方法引用:引用静态方法 ContainingClass::staticMethodName引用某个对象的实例方法 containingObject::instanceMethodName引用某个类型的任意对象的实例方法 Containing...

2019-08-22 09:39:29 118

原创 Function和BiFunction详解

Function和BiFunction详解Functionjdk源码Function的定义://类型T入参,类型R是返回值的类型@FunctionalInterfacepublic interface Function<T, R> { /** 接受一个参数,返回一个结果 */ R apply(T t); /** ...

2019-08-22 09:38:14 19319 2

原创 函数式接口

函数式接口函数式接口在jdk8中什么是函数式接口:1、被@FunctionalInterface注解修饰的。2、接口里边只有一个非default的方法。满足以上2个条件的即为函数式接口,ps:即使一个接口没有被@FunctionalInterface修饰,但是满足2,那么这样的接口也会是函数式接口。函数式接口,对于Java来说就是接口内只有一个公开方法的接口,因为使用lanbda表达式...

2019-08-22 09:37:29 113

原创 mysql explain各个参数含义

mysql explain各个参数含义expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra1、idid相同时,执行顺序由上至下如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越...

2019-08-20 20:18:55 439

原创 关于个人的成长

关于个人的成长个人成长包含的因素很多思维方式的升级技术水平的跃升工作效率的提高家庭生活的幸福正确处理好各种人际关系健康的体魄等等正确处理朋友之间的关系,尤其朋友之前的金钱关系(我被狠狠的坑了)欢迎补充。。。。。。...

2019-08-20 20:06:37 111

原创 favicon.ico

favicon.icofavicon.ico文件是浏览器收藏网址时显示的图标,当客户端使用浏览器页面时,浏览器会自己主动发起请求获取页面的favicion.ico文件。这样就会引起一些问题。解决办法。前端页面添加以下代码不让浏览器主动请求。 <link rel="icon" href="/userLogin/css/favicon.ico" type="image/x-ico...

2019-08-20 20:01:20 1711

原创 java8 Stream详解和使用

java8 Stream详解和使用什么是Stream看Stream的javadoc说明** * A sequence of elements supporting sequential and parallel aggregate * operations. The following example illustrates an aggregate operation using ...

2019-08-20 14:22:14 469

原创 JAVA JVM助记符

ldc:将int/float/String类型的常量值从常量池中推送至栈顶(栈顶的值是即将要用的)bipush:将单字节(-128 ~ 127)的常量值从常量池中推至栈顶sipush:将一个短整型(-32768 ~ 32767)的常量值从常量池中推至栈顶iconst_1:将int型的常量值1从常量池中推至栈顶(jvm专门为0/1/2/3/4/5这5个数字开的助记符),iconst_m1则表示...

2019-08-19 15:59:24 196

原创 4.jvm类加载器命名空间实战剖析与透彻理解

类加载器命名空间实战剖析与透彻理解命名空间每个类加载器都有自己的命名空间,命名空间是由该加载器及所有的父加载器加载的类组成在同一个命名空间中,不会出现类的完整名字(包括类的包名)相同的两个类在不同的命名空间中,有可能出现类的完整名字(包括类的包名)相同的两个类关于命名空间的重要说明1、子加载器所加载的类能够访问到父加载器所加载的类2、父加载器所加载的类无法访问到子类加载器所加载的...

2019-08-19 15:55:55 284

原创 3.jvm类的卸载

jvm类的卸载当某个类被加载,连接和初始化后,它的生命周期就开始了。当代表这个类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,这个类在方法区内的数据也会被卸载,从而结束这个类的生命周期。一个类何时结束生命周期,取决于代表它的Class对象何时结束生命周期。由Java虚拟机自带的类加载器所加载的类,在虚拟机的生命周期中,始终不会被卸载。Java虚拟机自带的类加载器...

2019-08-19 15:53:51 263

原创 2.java类加载器

类加载器类加载器并不需要等待某个类在“首次主动使用”的时候才区加载它。因为:jvm规范容许类加载器在预料某个类将要被使用的时候就预先加载它,如果在预先加载的时候遇到了.class文件确实或者存在错误,类加载器必须在程序首次主动使用该类的时候才报错。如果这个类一直没有被程序使用那么就不会报错。类加载器负责加载所有的类,其为所有被载入内存中的类生成一个java.lang.Class实例对象。一...

2019-08-19 15:52:13 109

原创 Spring boot项目引入mongo多数据源配置

Spring boot项目引入mongo多数据源配置首先Spring boot引入mongo单数据源很好做,引入 spring-boot-starter-data-mongodb然后配置文件增加spring.data.mongodb.uri=xxx配置就行了。在调用的时候注入mongoTemplate这类就可以调用了。那么我们思考可以得出多数据源就是生成多个mongoTemple类,然后我们在...

2019-08-19 15:49:23 3022 4

原创 1.jvm 类加载机制(class loading)

类加载机制(class loading)在java代码中,类的加载、连接与初始化的过程都是在程序的运行期间完成的在程序运行期间完成类的加载、连接和初始化为Java代码提供了更大的灵活性,增加了更多的可能性。比如Java的动态代理,在类加载之后才会生成动态代理类。加载 :查找并加载类的二进制数据(存放在方法区 jdk1.8之后叫元空间matespace)​ 类加载指的是将类的.cla...

2019-08-19 09:23:42 373

原创 Java8–Optional使用范例

目录1.尽量避免使用get()方法2.尽量避免使用isPresent()方法3.不要作为类的实例属性 Optional是容器4.不要作为方法参数5.正确使用举例1、ifPresent()判断替换if2、用orElse替换 if...else...3、用orElseThrow替换 throw new Exception4、方法的返回值最好也能用Optional包装...

2019-08-19 08:54:57 629

微服务短信设计.pdf

短信微服务的设计与实现,介绍如何用spring boot实现一个通用的短信服务

2019-05-10

mongodb性能调优执行计划分析

适用于对mongodb有一定的使用经验,并且希望更深了解的人群,对mongodb的索引,执行计划有详细的介绍

2019-05-10

java实现编辑器

java模仿windows编辑器做的编辑器!

2013-05-17

动态网页设计c#做的个人主页

asp。net动态网页制作,个人主页。写日志,修改资料

2011-09-06

空空如也

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

TA关注的人

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