自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (6)
  • 收藏
  • 关注

原创 Java 求两个向量余弦相似度计算代码

【代码】Java 求两个向量余弦相似度计算代码。

2023-11-06 10:31:32 227

原创 jvm sandbox实现字节码增强

1.安装jvm-sandbox2.引入依赖<parent> <groupId>com.alibaba.jvm.sandbox</groupId> <artifactId>sandbox-module-starter</artifactId> <version>1.2.0</version></parent>3.编写脚本@MetaInfServices( Module.class

2020-06-27 09:36:34 900

原创 BTrace实现字节码增强

下载BTrace,配置BTrace环境编写BTrace脚本@BTracepublic class BTraceTest { @OnMethod( clazz = "com.bj58.btrace.Base", method = "run", location = @Location( Kind.ENTRY) ) public static void start() { println(.

2020-06-27 09:36:19 246

原创 自己实现字节码增强

使用技术:Javassist , Instrument,JVMTI , javaagent,Attach APIJVMTI:JVM TI(JVM TOOL INTERFACE,JVM 工具接口)是 JVM 提供的一套对 JVM 进行操作的工具接口。通过 JVMTI,可以实现对 JVM 的多种操作,它通过接口注册 各种事件勾子,在 JVM 事件触发时,同时触发预定义的勾子,以实现对各个 JVM 事件的响应,事件包括类文件加载、异常产生与捕获、线程启动和结束、进入和退 出临界区、成员变量修改、GC 开始和结束

2020-06-27 09:36:01 472

原创 jvm-sandbox分享

引子相信大家都遇到过这种场景,线上出故障了,但是关键代码里面忘记打日志了,导致无法复现和准确定位问题。这时候可能需要重写加上日志,部署到服务器,但这第一耗时间,第二可能破坏现场,比如可能是线程池的问题呢?所以如果可以不重启服务器,就可以给代码加上日志,是多么棒的一件事呀。那能不能实现,of course。简述实现当然市面上有很多工具可以实现热部署,我们先来看一下,如果我们自己实现,思路是什么。我们知道Java对象的行为(函数,方法)是存储在方法区的,从下图可以看到,方法区的数据是由类加载器把编译好的.

2020-06-26 20:40:49 1486

原创 valatile原理

volatile定义官方定义:java语言规范第三版中对volatile的定义如下:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排它锁单独获得这个变量。java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明或volatile,java线程内存模型确保所有线程看到这个变量值是一致的。个人定义:volatile的解释通常...

2020-04-25 16:28:54 282

原创 海量数据处理

1、A,B两个文件各存放50亿条URL,每条URL占用64字节,内存限制4G,找出A,B文件共同的URL答:1G文件的大致字节数:2^30 约等于 1的9次方(2的10次方约等于100)所以50亿条URL大概为5*64=320G 所以将大文件分为1000个小文件,怎么分,每个URL进行hashcode再对1000取余。这个A文件就被分为(a0,…a999)了,同样的对B进行这样操作,B文件就...

2020-04-18 14:43:17 170

原创 MySQL事务和锁

1.MySQL事务四大特性原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性(Consistency): 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;持久性(Durability...

2020-04-15 14:25:28 90

原创 发布订阅模式和观察者模式区别

一 观察者模式观察者模式定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。观察者模式属于行为型模式,行为型模式关注的是对象之间的通讯,观察者模式就是观察者和被观察者之间的通讯。二 发布订阅模式三 观察者模式与发布订阅模式区别四 观察者模式与发布订阅模式优缺点...

2020-04-06 16:00:48 616

原创 Docker 入门

一 常用命令输入docker可以查看Docker的命令用法,输入docker COMMAND --help查看指定命令详细用法。镜像常用操作查找镜像:docker search 关键词#搜索docker hub网站镜像的详细信息下载镜像:docker pull 镜像名:TAG#Tag表示版本,有些镜像的版本显示latest,为最新版本查看镜像:docker image...

2020-03-22 20:19:45 123

原创 SpringBoot JPA 注解使用手册

一 @OneToMany,@ManyToOne注释的使用@Entitypublic class Employee { @Id @Column(name="EMP_ID") private long id; ... @OneToMany(mappedBy="owner") private List<Phone> phones; ...}@Entit...

2020-03-10 22:27:10 296

原创 MySQL之索引分享

索引本质官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构本质:索引是数据结构Innodb B-Tree 索引B+树成因:我们知道,每一种数据结构的出现都是为了解决特定的问题,那么B+树的出现是为了解决什么问题,那就是:每次查找数据时把磁盘IO次数控制在一个很小的数量级,最好是常数数量级。在理解B+树结构之前,先提一下计算机的局部性原理:当计算机访问一个地址的数...

2020-03-01 19:54:25 252

原创 SimpleDateFormat的时区问题

Date data = new Date(); //2019-12-17 11:49:35 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); Stri...

2019-12-17 11:56:37 9975

原创 手动实现线程池

通过手写线程池,理解了以下问题:1.当任务堆满阻塞队列后,线程池会new新的线程来处理新的任务,直到线程数量达到最大值。这些新new出来的线程什么时候销毁呢?答:new出新线程后,这些线程同核心线程一样,处理阻塞队列里面的任务,阻塞队列里面任务处理完了后,新new出来的线程在等待设置的时间后,进行销毁,核心线程继续存活。2.比核心线程池数多的线程如何实现等待设置的时间后就销毁呢?答案是:...

2019-11-25 20:56:08 295

原创 数据库的一些知识点记录

为什么大公司不推荐用连表查询而使用单表查询第一:单机数据库计算资源很贵,数据库同时要服务写和读,都需要消耗CPU,为了能让数据库的吞吐变得更高,而业务又不在乎那几百微妙到毫秒级的延时差距,业务会把更多计算放到service层做,毕竟计算资源很好水平扩展,数据库很难啊,所以大多数业务会把纯计算操作放到service层做,而将数据库当成一种带事务能力的kv系统来使用,这是一种重业务,轻DB的架构思...

2019-11-14 11:26:50 203

原创 Innodb中的事务隔离级别和锁的关系

https://tech.meituan.com/2014/08/20/innodb-lock.html

2019-11-14 10:42:51 94

原创 Spring Restful风格

一、什么是Restful风格REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,而 HTTP 是一种包含了 REST 架构属性的协议,为了便于理解,我们把它的首字母拆分成不同的几个部分:表述性(REpresentational): REST 资源实际上可以用各种形式来进行表述,包括 XML、JSON 甚至 H...

2019-11-10 17:44:17 247

原创 Mac下 nginx安装使用

一、安装Nginx使用brew命令简单方便:常用指令如下:brew 搜索软件brew search nginxbrew 安装软件brew install nginxbrew 卸载软件brew uninstall nginxbrew 升级sudo brew update查看安装信息(经常用到, 比如查看安装目录等)sudo brew info nginx查看已经安装的软件b...

2019-11-08 14:29:01 252

原创 单一职责原则

一、什么是职责在《敏捷软件开发:原则、模式与实践》中,把职责定义为变化的原因:如何你能想到多于一个动机去改变一个类,那么这个类就具有多于一个的职责。就一个类而言,应该仅有一个引起它变化的原因。...

2019-11-01 18:13:54 567

原创 算法基础-数组

收获点滴:1.数组的查询效率比链表高?答:哪怕排好序的数组,利用二分法查询时间复杂度也是 O(logn)。所以,正确的表述应该是,数组支持随机访问,根据下标随机访问的时间复杂度为 O(1)。2.数组插入和删除的效率低?答:对于实际上,在某些特殊场景下,我们并不一定非得追求数组中数据的连续性。如果我们将多次删除操作集中在一起执行,删除的效率是不是会提高很多呢?,如果数组只是存储数据的容器,存...

2019-10-23 17:51:35 93

原创 shell自动化程序之-MySQL自动登录

一、背景最近在学shell脚步,突然想练下手,想着每次登录MySQL,需要输入mysql -u root -p password 这个命令,那么能不能使这个过程自动化呢,于是动手写了下。先上结果吧:看,只需要输入mysqlgo这个命令,即可自动登入MySQL。二、shell编写#!/usr/bin/expect -fset password youPasswordspawn mys...

2019-10-16 17:47:15 1884

原创 个人电脑连接远程服务器点滴

ssh配置远程登录别名:cd ~/.ssh 在config文件中:添加这句话#remote server configHost pit #别名HostName 123.207.170.77User rootIdentitiesOnly yes #默认举例:ssh pit 然后输入密码就行了提示:默认远程服务器不开通密码登录,需要在远程服务器上的.ssh/authorized...

2019-10-16 14:13:10 206

原创 新电脑Java环境配置

MySQL配置:mac:https://juejin.im/post/5cc2a52ce51d456e7079f27f#heading-0centos:http://www.05bk.com/517.htmlJRE配置:centos:http://www.05bk.com/391.html

2019-10-12 15:48:03 218

原创 网络

1.TCP与UDP的区别TCP 是面向连接的,UDP 是面向无连接的(在互通之前,面向连接的协议会先建立连接,如 TCP 有三次握手,而 UDP 不会)UDP程序结构较简单TCP 是面向字节流的,UDP 是基于数据报的TCP 保证数据正确性,UDP 可能丢包TCP 保证数据顺序,UDP 不保证UDP:TCP:UDP例子:对实时性要求很高,比如直播,游戏,对数据丢失不敏感2.T...

2019-09-18 16:17:49 65

原创 敏捷软件开发 问题&感想

看到第5张重构的时候,最终版的代码写的是真好。优点:代码具有高可读性,基本就是让代码说话了,可以节省后面人阅读改代码的时间缺点:但是我感觉是不是有点过度重构了,三行代码也要重新写个方法?本来开发时间有限,而且程序员设计好的类名和方法名的时候感觉是挺费时的一件事。我们是要开始写代码的时候就严格按照这种规范,还是可以先实现功能,然后后面进行重构呢,如果时间紧急又该如何?在萌芽培训中我找到了答案:...

2019-09-16 16:11:33 183

原创 基础笔记

Float 和 Double 不会有缓存,其他包装类都有缓存。Integer 是唯一一个可以修改缓存范围的包装类,在 VM optons 加入参数:-XX:AutoBoxCacheMax=666 即修改缓存最大值为 666 。Set<Short> set = new HashSet<>();for (short i = 0; i < 5; i++) { ...

2019-09-10 11:09:31 110

原创 常用排序算法备忘录

快速排序public class QuickSort { public static void main(String[] args) { int[] array = {3, 5, 1, 4, 6, 2, 8,7};//3, 5, 1, 4, 6, 2, 8 StringBuilder sb = new StringBuilder(); n...

2019-09-10 11:01:59 110

原创 算法常用工具类

public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } public static ListNode mockHeadNode() { ListNode listNode = new ...

2019-09-08 22:24:24 1370

原创 快捷工具

mvn dependency:tree -Dverbose > tree

2019-08-31 15:06:07 190

原创 ThreadLocal

引言ThreadLocal的官方API解释为:“该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。”大...

2019-08-27 20:01:58 93

原创 MySQL之B树和B+树

首先抛个问题,MySQL的索引为何用树而不是其他数据结构如hash,hash的读和写都是O(1),而树的话查询和插入都是O(log(n))?答:因为索引设计成树,是和SQL需求相关的,如果单独只查询某条数据,自然是hash算法快,但是我们平常用的查询往往不是只查询单条数据,而是order by,group by,< >这种排序查询,遇到这种情况,hash就会退化成O(n),而树因为它...

2019-08-15 18:14:12 11685

原创 Kafka学习笔记

一、kafka基本认识:kafka是一个分布式MQ中间件,由多个broker组成,每个broker是一个节点;你创建一个topic,这个topic可以划分为多个partition,每个partition可以存在于不同的broker上,每个partition就放一部分数据。每个topic的数据,是分散放在多个机器上的,每个机器就放一部分数据。二、引入MQ的优缺点优点:解耦、异步和削峰解...

2019-07-28 17:14:18 131

原创 Simplify Path

Given an absolute path for a file (Unix-style), simplify it.For example, path = “/home/”, => “/home” path = “/a/./b/../../c/”, => “/c”思路:将路径根据“/”进行分割,得到去掉“/”的数组,然后将数组的内容放入栈中,当遇到“..”时,就把栈中的一个元素pop出来,当

2017-09-18 09:11:47 581

原创 最大和子序列

给定一个数组,里面的数有正有负,如何得到该数组中,最大和的子序列呢? 得到最大和子序列,那么就先求最大和嘛,在求最大和的过程中记录一下起始下标和终点下标就好了。 下面列出代码:public void maximumSubsequence (int arr[]) { int max = arr[0]; int sum = 0; int s = 0,s

2017-09-17 17:44:20 660

转载 HashMap源码分析

一、HashMap概述二、HashMap的数据结构三、HashMap源码分析     1、关键属性     2、构造方法     3、存储数据     4、调整大小     5、数据读取                      6、HashMap的性能参数                      7、Fail-Fast机制 一、Has

2017-08-30 23:15:22 3082

原创 Single Number

Single Number I Given an array of integers, every element appears twice except for one. Find that single one.思路:只要将所有数组中的数组进行异或即可,因为相同两个数异或结果为0 代码如下:public int singleNumber(int[] nums) { in

2017-08-30 12:42:38 3456

原创 从10万个数中找10个最大的数

对于这种题目,最普通的想法是先对这10万个数进行排序,然后再选取数组中前10个数,即为最后的答案,排序算法的时间复杂度不下于O(N lgN)。最好的方法是建立一个最小堆。 算法描述: 我们首先取10万个元素中的前10个元素来建立由10个元素组成的最小堆。这样堆顶元素便是当前已知元素的第10大的数;然后依次读取剩下的99990个元素,若读取的元素比堆顶元素大,则将堆顶元素和当前元素替换,并自堆顶至

2017-08-29 11:20:39 23546 4

翻译 Minor GC、Major GC与Full GC

先简单介绍一下: Minor GC:从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。 Major GC:是清理老年代。 Full GC:是清理整个堆空间—包括年轻代和老年代。 年轻代是大多数新对象创建和销毁的地方,对象从Young generation区域消失的过程我们称之为”minor GC“ 当年轻代满时,会引发“minor GC”。 新

2017-08-28 17:58:39 5843

原创 Excel Sheet Column

Given a column title as appear in an Excel sheet, return its corresponding column number.For example:A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 思路:26进制,将字符串从左往右遍历,每次得到的字母转为数字,然后加上次的的数并乘以对应的基数。

2017-08-28 15:09:07 5707

原创 Java中BIO,NIO,AIO

一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而

2017-08-28 10:21:04 5933

effective Java 第二版 配套源码和Guava学习文档

effective java 第二版配套源码和Guava学习文档,找了好久才找到,相信我,绝对好用

2018-01-25

apache-tomcat-7.0.39.tar.gz

apache-tomcat-7.0.39.tar

2017-03-29

jquery-1.10.2.min.js

jquery-1.10.2.min.js

2017-03-27

实现网络爬虫所需jar包

包含javaweb实现网络爬虫所需要的全部jar包

2017-01-14

实现网络爬虫所需jar包,绝对值得

包含javaweb实现网络爬虫所需要的全部jar包

2017-01-14

javaweb消息推送技术

非常好的案例

2016-08-17

空空如也

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

TA关注的人

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