- 博客(53)
- 收藏
- 关注
原创 基于netty实现简易版rpc服务-代码实现
这样就实现了简单的rpc服务,通过公共部分的接口、注册中心、编解码器、服务端的服务映射,客户端就能进行远程过程调用了。
2024-10-19 22:09:54 416
原创 基于netty实现简易版rpc服务-理论分析
通过netty实现rpc服务,需要定义rpc协议,用来客户端和服务端数据交互,服务端通过监听端口,客户端tcp连接服务端,然后发送和接收数据,这个数据交互的过程,需要把数据序按照rpc协议的格式进行编解码,客户端通过动态代码封装网络请求,产生接口的代理对象。
2024-10-19 20:36:45 486
原创 spring循环依赖通过三级缓存解决过程分析-其二
使用三级缓存,前提就是spring觉得大部分程序,都应该是没有循环依赖,或者说循环依赖很少。基于这个理念,理想情况就是大部分的bean都是直接完成整个生命周期,在初始化中检查是否创建代理对象,然后把bean存入一级缓存,为了完成这个理想,加入了二级、三级缓存,尤其是三级缓存,延迟bean的代理创建时机,只有当发生循环依赖的时候不得已提前创建bean的代理放入二级缓存,最好的情况就是二级缓存永远都是空的,创建一个bean加入一级缓存然后就移除对应三级缓存中的lambda。
2024-10-10 13:36:27 836
原创 spring循环依赖通过三级缓存解决过程分析-其一
我用的sprin-boot 2.7版本,这个版本(没查是哪个版本开始的)默认情况下是不会解决循环依赖,而是启动程序会报错,如果需要spring帮我们解决循环依赖,需要加上一个配置spring.main.allow-circular-references=true。
2024-10-10 11:29:43 585
原创 spring程序员前置知识-ApplicationContext执行过程分析-其二
实例化 初始化 BeanpostProcessor BeanFactorypostProcessor bean工厂后置处理器 bean后置处理器 主要就是两种方式:BeanFactoryPostProcessor和BeanPostProcessor》》》》》》其中BeanFactoryPostProcessor可以向spring容器中添加一些bean定义信息。经常会说springboot自动配置,如何能做到自动配置,就是通过BeanFactoryPostProcessor的功能实现的。》》》》》》
2024-09-26 20:58:40 659
原创 spring程序员前置知识-ApplicationContext执行过程分析-其一
实例化 初始化 BeanpostProcessor BeanFactorypostProcessor bean工厂后置处理器 bean后置处理器 BeanDefinition 大概分析了前面几个过程,梳理一下这几个过程大概就是:》》》》》加入spring内部BeanFactoryPostProcessor和BeanPostProcessor对应的BeanDefinition到beanDefinitionMap中》》》》》
2024-09-26 20:07:23 904
原创 dubbo微服务开发-服务间调用上下文参数传递
2.定义服务接口2.1 服务提供方实现代码2.2 服务消费方调用代码3.注意事项setAttachment 设置的 KV 对,在完成下面一次远程调用会被清空,即多次远程调用要多次设置。这个跟Threadlocal里面set有点类似,不同的是,tl中在每次请求完成以后需要手动remove保存的数据,避免内存泄漏。在dubbo自动清空传递的上下文参数,不需要程序员操心了。下面是dubbo中服务间上下文参数传递的设计:有时候我们微服务之间需要调用的时候用户信息(token),这些用户信息往往就是
2024-09-22 16:24:38 893
原创 java-cas原子操作
正所谓,java虐我千百遍,我待java如初恋。cas时compareAndSwap的缩写(也有说compareAndSet)。cas操作时系统提供的原子命令,java在原子整数、AQS锁内部都使用了cas提高并发效率。像常用的i++操作;看起来一行代码,实际上是三个原子操作:1.读取i;2.执行i+1;3.把i+1的值赋给i。cas就是把这个三个操作合并成一个原子操作,这样在并发时也不会出现问题。java中cas操作需要使用到Unsafe类的compareAndSwapXxx()方法,需要四个参数,第一
2024-09-07 20:31:52 249
原创 mysql可重复读事务隔离级别下幻读问题
1.在可重复读级别下,事务1在第一次执行select时产生一个快照读,这个快照读可以读到当前已经提交的所有事务,具体可以查看MVCC版本控制链的规则。然后事务2插入一条数据,事务1执行读还是用第一次生成的快照读,看不到事务2新插入的数据,所以没有产生幻读问题。2.如果select的时候使用当前读,也就是执行,事务1会加锁,事务2提交不了会阻塞,自然不会出现幻读问题。
2024-08-14 18:40:38 226
原创 ThreadPoolExecutor线程池异常处理分析
结论:用execute执行任务,在任务抛出异常以后,线程会异常结束,线程池创建新的线程来执行后续任务。用submit执行任务,在任务抛出异常以后,线程池会复用任务抛异常的线程来执行后续任务。**## 所以建议实现run或者call方法的时候,确保里面的业务代码被正确try-catch了,因为线程外部拿不到抛出异常的任务。## 好了,ThreadPoolExecutor异常处理分析完了,下面是基于源码分析异常的处理逻辑。## 使用execute。
2024-08-03 22:28:07 456
原创 spring-boot开发一堆问题
1 spring-boot + shiro 自定义过滤器 不按filterChain的规则执行 版本:spring-boot 1.5.15.RELEASE + shiro 1.4.0 当自定义filter以后,把自定义的filter配置到shiro的filterChain以后,发生了超出预期的效果,本来shiro中filterChain的的原则是从上往下匹配,当有一个规则...
2018-09-01 15:58:00 216
原创 RPC原理简单介绍
在说rpc之前,先简单说一下java的动态代理。jdk提供了基于接口的动态代理,只需要调用Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h),需要传入三个参数,第一个是类加载器,第二个被代理的接口,第三个是InvocationHandler,最关键就在于I...
2018-08-27 19:40:10 445
原创 spring4.x注解开发
之前spring是用xml配置,现在可以零xml使用,完全代码的方式来使用的spring的功能。实际上,注解并不重要,xml配置也不重要,重要的是使用spring的ioc和aop提供的功能。现在提供了注解的方式来使用spring的核心功能,那简直不要太舒服了。 1.先建项目导入spring相关依赖<dependency> <groupId>ch....
2018-07-23 11:34:09 293
原创 dubbo集成spring-boot
dubbo需要一个注册中心,用的是zookeeper。集成spring-boot是为了方便使用注解开发。 1. 安装zoopkker hadoop01:2181, hadoop02:2181, hadodp03:2181 2. 编写dubbo公共接口 HelloServicepackage com.dubbo.ser...
2018-07-06 17:04:13 197
原创 windows安装tensorflow-gpu开发环境
新版的tensorflow已经支持windows了,不过python版本不能用2.x, 要用3.x,好像最新的tensorflow支持3.5和3.6这两个python版本,其他3.x的python版本没有测试过。当然电脑要有nvidia的显卡才行,我的电脑比较差,带的是gtx 950,跑起来例子比cpu还是快不少。下面是具体的安装步骤: 1. 安装最新...
2018-01-28 18:20:27 194
原创 word2vec之skip-gram模型
在word2vec里面是使用一个简单的两层神经网络来训练的,一个隐层和一个softmax层。里面就有两组权值要训练,但是最后使用的时候只要只要第一组权值,也就是隐层的权值。 输入是一个one-hot的向量,隐层的权值matrix实际上就是每个词的向量,每一行代表一个词的向量,这样,一个ont-hot乘这个权值矩阵的时候,就相当于取了matrix的一行。 输出是...
2018-01-15 14:35:26 176
原创 python库numpy知识记录
numpy 1. zeros 用来创建元素全为0的数组,数组的维度根据参数来。 Examples:>>> np.zeros(5)array([ 0., 0., 0., 0., 0.])>>> np.zeros((5,), dtype=np.int)array([0, 0, 0, 0, 0])...
2017-11-12 14:18:14 137
原创 数据库关于密码存储
以前自己写网站玩的时候,真是一点都不考虑安全性,虽然也象征性的md5了一下,然后登陆了也是拿出这个md5值和输入的密码进行md5以后比较,这个方法没什么大问题,除了说md5可能会有冲突之类的情况。但是呢,当时有一个最严重的问题,就是把密码明文也存储了,虽然这个明文对于用户来说永远也使用不到,用户登陆也是和md5以后的密码比较。我也很清楚不应该存储明文的,但是想着存了也无所谓,也不浪费什...
2017-09-30 17:20:05 3607 1
原创 mongodb树形结构
在mongodb中有多种方式来存储属性结构的数据。 1 通过子文档关联父文档{ "_id": 1, "name": "子节点", "parents": ["父节点1","父节点2"]} 2 通过父节点关联子节点{ "_id": 1, "name": "父节点",
2017-09-28 18:08:31 4842
原创 neo4j基本操作
neo4j是目前最流行的图数据库,整体表现还是不错的。公司有些业务会把部分数据导入到neo4j,方便做一些关系/路径查询,记录一下简单的一些操作。1 install>> tar xvf neo4j-xxx.tar.gz>> bin/neo4j console2 cypher insert data >> CREATE(n:Pers...
2017-09-22 18:13:41 697 1
原创 java多线程写文件
// 题目: 多线程写文件/**有四个线程1、2、3、4。线程1的功能就是输出A,线程2的功能就是输出B,以此类推.........现在有四个文件file1,file2,file3, file4。初始都为空。现要让四个文件呈如下格式:file1:A B C D A B....file2:B C D A B C....file3:C D A B C D.......
2017-08-05 22:41:31 525
原创 java中equals和hashCode方法浅解
网上一搜equals和hashCode全是详解,深入剖析,巴拉巴拉。都写的非常详细,能学到很多东西。写这个就为了表达一下自己的理解,以及需要理解的程度。 刚学java,都是说字符串不能用==比较相等,要用equals,其实就是说对于引用类型的比较不能直接用==比较是否相等,因为比较的是对对象的地址,而我们期望的往往是对象内的属性值相等。 当我们自定义的类使用equal...
2017-06-22 22:00:23 125
原创 java异常处理
在java的io、网络等方面的api中经常会遇到异常,当然也可能遇到error,但是真遇到error的话,那就太好了,你中奖了,等着程序死掉就行了,或者弹出一个警告,来提醒你中奖了。异常主要两类,一类是检查型异常(checked exception),还有一类是运行时异常(runtime exception),所有的异常都是这两类异常。 其实关于异常处理,有很多的讨论,有人认...
2017-06-21 20:09:22 111
原创 java枚举enum详解
枚举类型还是有必要的,以前没有的时候,都是通过定义静态常量,主要就是为了防止硬编码。 枚举类型要注意,可以写构造方法,但是构造方法必须要用private修饰,其实想想就知道为什么要private了,既然都用枚举了,当然不能让你随便new一个对象出来了,不然还要枚举做什么。 下面是示例代码:public enum WordType { V("v") {...
2017-06-20 20:51:58 194
原创 Java8新的时间处理包
在jdk8中新出了一个时间处理包,试用了一下,日期的加减很方便,以前要用什么joda(我没用过,只听过),好了,废话不多说,看个简单的例子。LocalDate curDate = LocalDate.now();LocalDate preDate = curDate.plus(-1, ChronoUnit.DAYS);LocalDate nextDate = curDate....
2017-06-17 10:21:34 379
原创 gremlin基本认识
在此之前,需要先知道图是什么,不求精通,至少要知道顶点和边是什么,这里就简单的复习一下,讲的会比较通俗,如果要深入理解还是去复习一下数据结构里面的图。图是由顶点和边构成了,其中顶点和顶点之前的关系称为边,如果一个顶点到另一个顶点的边带有箭头,也就是方向,称为有向图;如果没有箭头,就是没有方向,称为无向图。 其实gremlin中关于图的结构基本和数据结构中图类似,不过,顶点可以...
2017-05-25 22:35:06 1000
原创 mongodb索引相关
在mongodb中有几种常见的索引,如Single Field Indexes/Compound Indexes/Multikey Indexes,另外还有什么Geospatial Indexes/Text Indexes/Hashed Index。 在工作中主要还是用到Single Field Indexes/Compound Indexes,Single Field In...
2017-05-12 20:14:48 131
原创 spark集群安装-Standalone
spark集群一共有三种工作方式,分别是:Standalone Deploy Mode: simplest way to deploy Spark on a private clusterApache MesosHadoop YARN当然第一种安装最简单,当然要先来简单的。 1. 准备工作三台centos:spark01/spark02/spark03安装jdk ...
2017-02-27 13:58:45 102
原创 Java方法重载和覆盖
方法重载是指一个方法与另一个方法名字一样,但是参数列表不一样,这样它们中一个就是另一方法的重载。关于参数列表不一样,大致分为有两种情况:1. 参数个数一样,但是参数对应位置有不一样的类型 2. 参数个数不一样。总的来说就是重载必定是参数发生变化,要么参数类型变,要么参数个数变。 方法覆盖是指子类覆盖父类的方法,也叫重写、覆写等。覆盖必须满足以下几个条件:1. 方法不能抛出比父...
2016-12-22 19:10:37 144
原创 java泛型集合
java中List集合声明的时候需要传入一个类型,表示集合中的元素类型。如果集合声明为父类,则不能把子类的集合实例赋值给父类集合的引用,但是可以在父类集合中添加子类对象,如果要实现子类集合实例赋值给父类集合引用,需要在父类中使用集合的向下限定,即泛型声明<? extends Parent>,下面看看例子。public class Demo { public st...
2016-12-21 22:49:08 155
原创 mongodb基础知识-内嵌数组总结
前面详细说明了数组的操作,总结起来差不多就两种情况,一个条件中不带$elemMatch,一种是条件中带$elemMatch。常用的查询应该是带$elemMatch,这样是要求数组中有元素满足所有条件。 1. 不带$elemMatch,结构大概是: {字段: 值} {字段: {$gt: 值}} 对应基本数据类型的数组 {字段.字段: 值} {字段.字段: {...
2016-12-13 21:41:46 385
原创 mongodb基础知识-内嵌数组相关
前面看到mongodb文档的字段的值可以嵌套一个文档,当然字段的值也可以嵌套一个数组。不过嵌套数组就比嵌套文档稍微复杂一些,因为数组既可以是基本数据类型的数组,也可以是文档类型的数组。为了逻辑的顺畅,先从嵌套基本数据类型的数组开始,然后过度到嵌套文档的数组。 ###########################################################...
2016-12-13 19:38:06 360
原创 mongodb基础知识-内嵌文档相关
在mongodb中字段的值,可以是基本数据类型,也可是是文档类型。这样的话,如果要在内嵌文档中查询,可能需要对内嵌文档的字段建立索引。下面列出一些内嵌文档上的常用操作。 1. 内嵌文档单个字段建立索引// 假设单个文档结构如下{ "_id": ObjectId("570c04a4ad233577f97dc459"), "score": 1034, "...
2016-12-13 18:39:31 682
原创 mongodb基础知识-返回部分字段
在sql中,我们一般都不提倡select * from xx这种形式,因为这样会返回所有数据,增加服务器负担,一般都需要限定返回哪些字段。在mongodb查询中,我们有时候也需要限制返回哪些字段,这就需要在find语句里面加上projection这个参数. 在mongodb中find的语法是find(query, projection),由于mongodb查询语句使用js,...
2016-12-11 18:11:17 1267
原创 使用java操作cassandra
cassandra的java驱动有很多,这里使用datastax的驱动。在maven的pom.xml中加入依赖:<dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId>...
2016-12-09 21:54:47 489
原创 mongodb基础知识-修改字段名称
最近两天,由于mongo驱动版本的问题,导致系统不兼容,填了几天坑,终于填完了,但是并没有熊根本上解决问题。后面决定要进行一次大重构,增加一个dao层,后台的mvc架构,以前觉得dao和service的很多工作重复,经过这个以后,才发现dao层确实很有必要,不过service和dao层的数据交换格式千万不要用mongo驱动自带的,mongo2.x以前用的是DBobject, 3.x以后...
2016-12-04 20:12:31 846
原创 java中List集合排序
在java里面,有时候我们可能需要对list集合中的对象的某个属性进行排序。这个问题就很简单了,Collections这个工具类提供了排序的方法,有两个重载方法,一个是只接受一个List集合,另一个是接受一个list和一个 Comparator接口。我这里以第二种为例讲解,后面在简单说明一下第一种,注意默认的顺序是升序排列。 在java api中可以看到 Comparator...
2016-11-17 17:48:29 299
原创 cassandra集群部署
在国内cassandra感觉用的人不多,资料也比较少,一查全是hbase和mongodb等no sql的资料,比起国外,cassandra确实要活跃的多。说起来,cassandra集群部署非常简单,虽然比起elastic search和redis稍微麻烦一点点,但是比起hbase和mongodb 的集群部署,真是简单多了。 首先准备机器,我这里准备三台,192.168.1.1...
2016-11-17 17:18:02 423
原创 rdf究竟是什么鬼
最近在给公司做一个工具,实现rdf到知识图谱的导入。以前听过rdf,也稍微看过一点,不过看w3c那个文档实在是晦涩难懂,没有兴趣看下去,就没太在意,哪知道,最近老大要我开始接手这活了。 大概花了一周时间,看了以前数据结构的图,rdf、owl、语义网、知识图谱等概念,然后大概了解这些是做什么的。但是还是不是很清楚,上周开始写rdf解析,写的过程中发现看那些概念确实没什么用,可能...
2016-10-30 23:28:28 1441
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人