自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java RMI

今天是周日,昨天是挺忙碌的一天,上午去了一趟姥姥家,一年多没去了,最然都在北京,却还是不能经常见面。和舅舅聊了聊最近的生活和工作,他一直鼓励我努力。下午去找潇哥玩了,也是很久不见了,半年是有了。去他家坐了坐,有了女朋友的潇哥确实是精致了一些,晚上吃了顿露天烧烤,聊了聊这半年怎么被社会毒打的。。今天坐在电脑前,不知道干点啥,b站首页停了半天不知道刷个什么视频。突然想...

2020-07-05 00:30:44 259

原创 NLP

在新公司待了半个月了,好久总结以下了,刚进公司前几天,感觉漂泊不定,刚总部上两天班,就给安排到客户现场,到客户现场还没熟悉环境,又让回公司了。不过后面一直在公司总部,感觉算是稳定下来了。最近在做的东西,需要用到百度AI相关的服务。我理解的需求就是用户录音,我们将录音文件转文字,填充到页面表格里。这里第一步问题不大,百度有现成的语音转文字接口,也就是语音格式和长度待...

2020-06-29 00:30:17 231

原创 Java动态代理

静态代理静态代理是我们直接定义在代码里的,也就是手动创建代理类,在调用原有类方法的前后加入逻辑,实现增强。但是这种方式违反了软件设计的开闭原则。开闭原则(开放/封闭原则)在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的...

2020-05-29 00:30:17 258

原创 单播、多播(组播)、广播

单播、多播和广播单播”(Unicast)、“多播”(Multicast)和“广播”(Broadcast)这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思?区别何在?概念单播: 网络节点之间的通信就好像是人们之间的对话一样。如果一个人对另外一个人说话,那么用网络技术的术语来描述就是“单播”,此时信息的接收和传递只在两个节点之间进行。单...

2020-05-22 00:30:21 505

原创 记一次Maven冒险

最近给框架升级,由于总部研发给的新框架是deploy到私有maven库,我们也都是在本地开发,到私有远程maven库网络是不通的,所以我也只能跳到那边把几个jar包下载,然后sftp到一台两边都通的服务器上,再搞到本地。。不就是mvn install嘛,我以为我可以系列,哈哈。。正好今天也查了很多资料,就记录下来,希望能帮到有缘人。。mvn install将项目的...

2020-05-21 00:30:28 166

原创 分布式事务

解决方案:通过mq: 当A成功后,发送消息到mq,B消费消息,即使失败了,也能通过mq重试,知道B也成功,最终数据一致。这里要注意发送消息最好在本地事务提交之后进行。 但是还有问题,如果本地事务成功了,消息发送失败了呢?不能保证本地事务和发送消息两个操作同时都成功,这种方式存在问题!2PC–两阶段提交: 也是通过mq发送消息给B,不过发送都是事务消息,Kafka...

2020-05-21 00:30:24 147

原创 ThreadPool总结

线程池线程池就是一个线程的集合,它帮我们来管理线程。管理线程,避免创建和销毁线程的资源开销。创建一个对象要类加载,销毁一个对象要GC,都是需要占用资源的。提高响应速度,不需要创建线程,直接将任务交给线程池运行。重复利用,线程执行完毕,放回线程池,重复利用。创建线程池public ThreadPoolExecutor(int corePoolSize, i...

2020-05-18 00:30:01 161

原创 Linux文件句柄

什么是文件句柄在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle)。文件句柄,也叫文件描述符。文件描述符(File Descriptor) 是内核为了高效管理已被打开的文件所创建的索引,它是一个非负整数(通常是小整数),用于指代被打开的文件。所有...

2020-05-12 00:30:16 2732

原创 Nginx

前两天客户那边说检测出我们的nginx有漏洞,让我们搞一下,其实就是nginx出新版本了,老版本有个重大bug,跟着我们也应该升级。但是一来二去不知道为啥落我头上了,我是开发啊。。不过也无所谓,正好趁着这个机会好好了解一下。什么是NginxNginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,高并发能力强,在互联网项目中广泛应用。除了...

2020-05-12 00:30:03 159

原创 数据库设计范式

范式(Normal Form),也就是规范化的形式。三大范式第一范式1NF: 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性,而不是集合。比如地址可以分成省、市、区等等。第二范式2NF: 满足1NF的基础上,要求:表中的所有列,都必需依赖于主键,而不能有任何一列与主键没有关系(一个表只描述一件事情)。第二范式消除表的无关数据。第...

2020-05-09 00:30:59 128

原创 一次服务器告警的处理

一次服务器告警的处理今天客户在群里一阵@我,说是收到服务器告警短信了。Usage disk is more than 90% on volume /home...磁盘空间告急啊。分析这台机器上部署了应用和MySQL,日志文件和数据库文件应该是存储的大头,所以立即锁定目标。为了不泄漏公司机密,以下数据都是我本地的,有内味就行了我迅速连上公司vpn,ssh到目标...

2020-04-30 00:30:41 1126

原创 各种索引?

各种索引?总有面试官问,来说说索引种类?索引种类?根据什么分类的???“您说的是单列索引和组合索引?”“回去等消息吧。。”摸不透他在想什么。。您倒是说个分类依据嘛。。索引是什么?索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本。MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引...

2020-04-29 00:30:21 178

原创 springboot devtools

devtools是什么debug代码的时候,发现是个小bug,都不值得劳资手动重启应用怎么办?springboot提供了一个spring-boot-devtools的工具,让我们在上述场景中提升效率。它可以监控classpath下的资源,一旦classpath下有变动,就会触发应用重启。如何使用devtools在项目中添加spring-boot-devtool...

2020-04-28 00:30:52 337

原创 java.lang.IllegalMonitorStateException

java.lang.IllegalMonitorStateException从JDK源码开始看:/** * Thrown to indicate that a thread has attempted to wait on an * object's monitor or to notify other threads waiting on an object...

2020-04-27 00:30:11 247

原创 银行家算法

银行家算法银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。来源在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求...

2020-04-25 00:30:09 209

原创 死锁

什么是死锁死锁的本质,举个例子如果此时有一个线程 A ,按照先获持有锁 a 再获取锁 b的顺序获得锁,同时另外一个线程 B,按照先获取锁 b 再获取锁 a 的顺序获取锁。它们都像申请对方的资源却不得,所以会相互等待,进入死锁状态。条件产生死锁必须具备以下四个条件:互斥条件:该资源同一时刻只能由一个线程占用。请求与保持条件:一个进程因为请求资源而阻塞时,不...

2020-04-25 00:30:07 143

原创 SPI

什么是SPISPI(Service Provider Interface),是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用,比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL和PostgreSQL都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。Ja...

2020-04-24 00:30:15 145

原创 SQL优化整理

本文整理自CSDN对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select i...

2020-04-22 00:30:12 143

原创 synchronized锁升级

本文整理自知乎可见性使用synchronized的代码块或方法中使用变量,会发生以下:获取同步锁清空自己的工作内存的变量副本从主存获取最新的值,并加载到工作内存中对变量进行操作。所以使用synchronized会从主存中取最新的值,从而保证可见性。原子性最常见的例子,启动多个线程将一个静态变量执行++操作,最终结果并不是所有线程++次数之和。使用...

2020-04-21 00:30:05 162

原创 JVM结构

JVM结构图解析四大部分Class Loader(类加载器) 就是将Class文件加载到内存,再说的详细一点就是,把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。Run Data Area(运行时数据区) 就是我们常说的JVM管理的内存了,也是我们这里主要讨论的部分。运行数据区是整个...

2020-04-20 00:30:00 263

原创 Java是值传递的!

上周五边喝茶边吃瓜子在家办公,写一个接口,调用方请求过来之后,我需要在请求报文一个节点下加入两个字段,然后继续调用底层接口。随手就写下了下面的代码:Map params = inputObject.getParams();Map reqInfoMap = params.get("reqInfo");reqInfoMap.put("xxx", "XXX");r...

2020-04-19 00:30:11 172

原创 Java Monitor

什么是MonitorMonitor可以理解为一种同步工具,也可理解为一种同步机制,常常被描述为一个Java对象,也叫管程。管程(Monitor)是一种和信号量(Sophomore)等价的同步机制。它在Java并发编程中也非常重要,虽然程序员没有直接接触管程,但它确实是synchronized和wait()/notify()等线程同步和线程间协作工具的基石:当我们在...

2020-04-17 00:30:05 416

原创 MySQL事务隔离级别

什么是事务事务是应用程序中一系列操作,所有操作必须全部完成,若有一个操作失败,都会使所有的操作撤销。ACID事务具有四个特性:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做。一致性。事务执行...

2020-04-17 00:30:04 118

原创 CAS

什么是CASCAS是compare and swap的简称,字面意思就是比较并交换,这里的交换其实就是更新的意思,是线程本地缓存和系统内存之间的数据交换。从内存上取值A,和预期值B比较,如果内存值A和预期值B结果相同,那么我们就把新值C更新到内存,如果不想等,就重复上述过程直到操作成功为止。CAS过程以AtomicInteger为例:public final i...

2020-04-16 00:30:35 132

原创 Java对象头

Java对象在JVM中,实例对象在内存中的布局分为三块区域:对象头、实例变量和填充数据。如下:    实例变量: 存放类的属性数据信息,包括父类的属性信息,如果是数组的实例部分还包括数组的长度,这部分内存按4字节对齐。其实就是在java代码中能看到的属性和他们的值。 填充数据: 由于虚拟机要求对象起始地址必须是8字节的整数倍。填充数据不是必须存在的,仅仅是...

2020-04-14 00:30:31 205

原创 序列化与反序列化

什么是序列化当两个进程远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。比如,我们可以通过http协议发送字符串信息,我们也可以在网络上直接发送Java对象。发送方需要把这个Java对象转换为字节序列,才能在网络上传送,接收方则需要把字节序列再恢复为Java对象才能正常读取。序列化: 对象序列化的最主要的用处就是在...

2020-04-12 00:30:27 130

原创 交易消息示例

交易消息示例什么是交易消息可以将其视为两阶段提交消息实现,以确保分布式系统中的最终一致性。事务性消息可确保本地事务的执行和消息的发送能以原子方式执行。使用限制事务消息没有时间表和批处理支持。为了避免对单个消息进行过多的检查并导致半个队列的消息堆积,我们默认将单个消息的检查数量限制为15次,但是用户可以通过更改transactionCheckMax来更改此限制。...

2020-04-10 00:30:45 196

原创 RocketMQ OpenMessaging Example

OpenMessagingOpenMessaging,包括建立行业指南和消息传递,流式传输规范,从而为金融,电子商务,物联网和大数据领域提供通用框架。在分布式异构环境中,设计原则是面向云,简单,灵活且独立于语言。符合这些规范将使跨所有主要平台和操作系统开发异构消息应用程序成为可能。RocketMQ提供了OpenMessaging 0.1.0-alpha的部分实现,...

2020-04-09 00:30:47 197

原创 chromebook再次折腾crouton

chromebook再次折腾crouton学生时代的梦想大学那会儿就梦想有个chromebook,想象着带着这个满满黑科技的笔记本,出入校园,秒杀一众macbook。无奈家境贫寒,而且找不到靠谱的渠道。16年9月刚毕业不久,拿到第一笔工资,我就下单买了这个asus flip c100p chromebook。无数次折腾拿到这个chromebook,小巧精美,略...

2020-04-08 00:30:43 2157

原创 Effectiv Java学习笔记(一)

创建和销毁对象1.考虑使用静态工厂方法代替构造器我们平时创建对象都是new一个,而new会调用类对应的构造器。但是还有一个方法,就是静态工厂方法。public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE;}上面是一个典型的示例。优点:静态工...

2020-04-07 00:30:45 292 2

原创 TCP三次握手&四次挥手

TCP三次握手&四次挥手今天无意间注意到垫显示器的《TCP/IP协议族》,书皮最上面一行字:世界著名计算机教材精选。这是我大学的教材,我的专业是网络工程,大学没能好好学习,惭愧,惭愧。打开随便翻了一下, 发现很多折角,应该是学期末老师划重点的时候折的,唉,回忆袭来。看到这本书,想到的就是之前几次面试的一个高频问题:tcp三次握手和四次挥手。赶紧翻到运输...

2020-04-04 00:30:24 251

原创 用node.js做一个测试api服务

用node.js做一个测试api服务前两天被安排做一体机的项目。这可是个大坑,兄弟们都不想搞。我和他们不一样了,迎难而上,哈哈。这个是嵌入到营业厅一体机或者pad的一个系统,为什么说这是一个大坑呢?没有测试环境,只能生产联调。要是平时,可以在公司搭一个测试环境嘛,可是疫情期间在家办公,诸多不便。还有一个问题是,没有后台系统啊,所有接口都不通,盲写代码?怎么快速搞一...

2020-03-30 00:30:48 217

原创 记一次老代码优化2

记一次老代码优化2又发现了一个问题上次的优化结果:老版本的转换方法用了204ms每次去查数据库因为要多次连接数据库进行查询操作,需要531ms而使用了缓存的方法,第一次我们还没有加载缓存,需要500ms,而第二次直接在缓存中读取,24ms,只用了之前方法的1/10。让我们看一下上次优化的版本:public static String ospInOutP...

2020-03-30 00:30:43 160

原创 localStorage

Window.localStorage只读的localStorage属性允许你访问一个Document源(origin)的对象Storage;存储的数据将保存在浏览器会话中。localStorage 类似 sessionStorage,但其区别在于:存储在 localStorage 的数据可以长期保留;而当页面会话结束——也就是说,当页面被关闭时,存储在 sessi...

2020-03-30 00:30:22 127

原创 定时消息示例

定时消息示例什么是定时消息预定的消息与正常的消息的不同之处在于,它们要等到指定的时间后才能传递。RocketMQ 支持定时消息,但是不支持任意时间精度,仅支持特定的 level,例如定时 5s, 10s, 1m 等。其中,level=0 级表示不延时,level=1 表示 1 级延时,level=2 表示 2 级延时,以此类推。如何配置:在服务器端(rocket...

2020-03-25 00:30:22 276

原创 记一次老代码优化

记一次老代码优化为什么要优化之前经常收到服务器告警信息,CPU占用率过高,当时用jstack分析了线程状态,确认是我们在处理接口返回报文时的大写+_转驼峰时效率太低导致的。同时我们发现很多调用超3s的接口都是因为响应报文太长,报文转换时间太长导致的。这是个亟待解决的问题。老代码分析我看了下老代码,之前的处理逻辑上很简单,但是效率上真的问题有点大。服务方给我们返回...

2020-03-25 00:30:17 196

原创 Thread和Runnable

Thread和Runnable我们都知道Java中创建线程有两种方式,继承Thread类和实现Runnable接口。其实呢,我们看了Thread的源码就能了解到:Thread实现了Runnable,其实也是个Runnable。Thread的构造方法中有一个是:这里传入的是一个Runnable,而继续往下执行,到了最后也是执行的这个target的run()方法。...

2020-03-19 00:30:30 188

原创 Future

2020-03-19 00:30:18 121

原创 jhat

jhat分析Java堆。此命令是实验性的,不受支持。概要jhat [ options ] heap-dump-file选项命令行选项。-stack false | true关闭跟踪对象分配调用堆栈。如果堆转储中没有分配站点信息,则必须将此标志设置为false。默认值为true。-refs false | true关闭对对象引用的跟踪。默认值为true。默...

2020-03-08 00:30:51 184

原创 关于Map遍历的几种方法总结

关于Map遍历的几种方法总结在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方式去遍历。方法一:在for循环中使用Entry实现Map的遍历:/*** 最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */Map <Str...

2020-03-08 00:30:35 196

空空如也

空空如也

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

TA关注的人

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