自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (3)
  • 收藏
  • 关注

原创 动态编译,自定义类加载器加载成功Demo

/1. 获取 `JavaCompiler` 实例 JavaCompiler compiler = ToolProvider . getSystemJavaCompiler();//信息收集器 DiagnosticCollector < JavaFileObject > collector = new DiagnosticCollector < >();

2023-07-13 11:52:16 203

原创 动态编译(基于内存)DEMO

给出基于内存的java动态编译demo代码

2023-07-11 16:55:19 255 2

原创 RDD调用机制、数据流在RDD中的流通

第一个调用iterator的地方现在知道compute方法的入口方法时iterator方法,即整个调用链是从iterator方法开始的,既然rdd的处理调用是一个向上迭代的过程,那么第一个调用iterator的地方在哪里呢?RDD算子最终会被转化为shuffle map task和result task,并发送到executor执行。而这个地方就在ShuffleMapTask的runTask方法中:进入write方法会在传入的rdd基础上调用RDD的iterator方法。进入该方法:

2022-11-16 21:30:02 1000 1

原创 记录一次java到oracle时间类型的bug

因为Oracle中的Date类型对应的是java.sql下的Date,所以尝试方法1/2失败。同时由于我的字符串是精确到时分秒的,而java.sql.Date只能精确到天,所以尝试方法3转换失败。我的字符串类型:“yyyy-MM-dd HH:mm:ss”,如 “2021-12-12 12:21:21”即:java.sql.Timestamp.valueOf(“2021-12-12 12:21:21”)本来是想把java的字符串转换到oracle中的Date类型的,但是尝试了几种方式都是报错。

2022-09-11 11:48:54 526

原创 在Centos上远程连接Oracle数据库

在连接oracle数据库时,如果本机安装了oracle数据库,那么会自带安装有sqlplus,我们可以使用sqlplus直接连接即可,但是如果oracle安装在另外一台服务器上,而我们当前主机没有安装oracle,那么是需要工具去连接的。其中HOST、PORT、SERVICE_NAME必须填写,其他的都可以不填,SERVICE_NAME是实例名称,HOST是ORACLE所在服务器地址,PORT是数据库的端口号。(实际上不使用sqldeveloper这步可以不要)

2022-09-08 17:23:21 3155

原创 解决Kettle在Maven仓库中找不到的办法

解决maven中仓库找不到kettle

2022-08-17 13:09:01 3110 3

原创 解决centos上卸载Python2导致yum不能用

卸载python2导致yum不可用

2022-07-23 10:52:17 1071

原创 加入HBase组件后Hive报错问题:MethodNotFoundException

运行HBase组件后,Hive各种报错找不到方法。是jar包冲突导致的。由于在hadoop-env.sh中通过引入hbase下的所有jar包的方式引入的:这种方式配置会引入hbase的lib目录下所有jar包,此时hive会因为jar包冲突而崩溃(hive会加载hadoop的jar包,而hadoop又加载hbase里hadoop的jar包,造成了冲突)。删除hbase下的hadoop的jar包。或者不要用这种方式,通过软链接的方式引入hbase的jar包即可。hbase下的冲突jar包:...

2022-06-13 17:33:47 368

原创 MapReduce默认切片规则源码

在job提交过程中,在submitter.submitJobInternal的方法中,从以下代码进行切片并把切片数作为maps数量进入writeSpites方法,会调用writeNewSplits方法。在writeNewSplits方法中会调用input。input.getSplits方法进行切片并返回逻辑切片的列表,而createSplitFiles将会在临时工作目录创建切片元数据信息文件。而input则是通过反射创建一个InputFormat对象,默认是TextInputFormat。继续进

2022-05-11 21:45:59 195

原创 Spark中的两种shuffle过程原理

Spark两种Shuffle在spark1.1以前只有hashshuffle,1.1版本引入了sortshuffle,1.2版本以后默认方式改为sort方式,2.0版本以后移除了hashshuffle。HashShuffle执行原理:Map阶段的shuffle是为了下一个stage的task拉取数据作的。每个Map阶段task把要输出的数据按key进行hash根据hash得到的值,生成和下一个stage的task数量相同的磁盘文件并写入。在将数据写入磁盘之前,会先将数据写入内存缓冲中,

2022-04-24 11:12:35 1285

原创 mysql忘记密码、修改密码&&记录一次mysql启动错误

报错代码:Access denied for user 'root'@'localhost' (using password: YES)出现这个错误是由于密码错误导致。用网上的教程设置跳过密码验证的方式然后重设密码来实现,但是会有问题:1、首先设置跳过MySQL密码验证:vim /etc/my.cnf在[mysqld]下面加入:skip-grant-tables,保存退出。注意:在更改后需要重启mysql服务:systemctl restart mysqld2、登录mysql:直接输

2022-04-22 14:36:03 785

原创 查看broker节点信息

kafka查看broker节点信息可以进入zookeeper客户端中查看:运行zkCli.sh进入客户端。输入ls 可以看到相关的节点。 输入 ls /broker/ids 可以看到broker数

2021-12-15 16:04:09 3722 1

原创 jps命令不能使用

yum install -y java-1.8.0-openjdk-devel 即可

2021-12-14 21:33:49 2439

原创 zookeeper集群启动失败

尝试:1、 防火墙没有打开对应端口:2181/3888/2888等2、云服务器安全组没有配置相应的端口:2888、38883、zoo.cfg配置文件添加:quorumListenOnAllIPs=true4、查看server.n 和/data/mid文件里的是否一致5、把本机的server.n = ip:2888:3888中的ip改成0.0.0.0...

2021-12-14 21:15:06 2713

原创 Linux常用指令

source /etc/profile 使配置文件生效echo $ZOOKEEPER_HOME 输出配置的环境变量netstat -ano | grep 2181 查看2181端口的进程

2021-12-14 19:48:06 689

原创 启动zookeeper时发现没有成功

使用zkServer.sh start 启动后显示启动成果,但是通过zkServer.sh status发现服务器未启动。通过网上查找经验发现是8080端口被占用导致的,修改zookeeper的zoo.cfg配置文件修改端口即可:admin.serverPort=8081

2021-12-14 15:52:39 1008

原创 Synchronized原理

跳转链接

2021-11-30 14:52:33 94

原创 ThreadLocal原理

地址跳转

2021-11-29 21:01:30 103

原创 ThreadPoolExecutor 参数详解

跳转链接

2021-11-29 19:37:59 199

原创 Thread通过run()方法和start()方法启动的差别

结论Thread.run方法会直接调用传入的Runnable对象的run方法,也就是说此时的Thread相当于一个静态代理,从而并没有通过创建一个线程的方式去执行run方法,方法的执行还是在原来的线程。通过Thread.start()方法去执行时,会调用本地方法start0()去创建一个线程,此时采用动态代理的方式去调用传入的Runnable的run方法,即通过创建一个线程的方式去执行任务。源码Thread的run方法: /** * If this thread was cons

2021-11-24 11:38:26 188

转载 AQS的实现分析

一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch…。二、框架它维护了一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。这里vol

2021-11-23 18:12:02 139

转载 SynchronousQueue

今天看了无锁且没有容量没有队列的这个变态的锁:SynchronousQueue。他的特性就是没有容器,也没有锁:存数据线程在到达队列时,若发现没有取数据的线程,就在那里一直等待,一直等待有取数据的线程过来唤醒,取走数据,才会释放。反之亦然。整个实现都是通过CAS实现。他的源码真的是非常的不好阅读,主要本人涉及到栈、链表的结构的操作不是很熟悉,对照着其他大牛的分析,一步步走Debug来研读,大致摸清了思路。下面来分析一下源码SynchronousQueue的创建先来看下构造器// 默认创建非公

2021-11-22 20:08:40 113

原创 System.currentTimeMillis()和System.nanoTime()区别

查看该函数的API,可以知道这个时间的单位是毫秒(相当于当时的时间戳,可以转换成对应的日期的)。而有些程序的执行时间很短,用这个函数计算时间的误差会很大。如就上面这段程序而言,循环次数为100000(10万)时,用时1毫秒,为10000(1万)时,用时0毫秒,更小的肯定也是0。对这类程序而言,这个精确度还远远不够!API说明:long java.lang.System.currentTimeMillis()Returns the current time in milliseconds. Note

2021-11-18 16:06:04 155

转载 JVM的堆和非堆即调整

堆(Heap)和非堆(Non-heap)内存按照官方的说法:“Java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在Java虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heapmemory)”。可以看出JVM主要管理两种类型的内存:堆和非堆。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内存(如JIT编译后的代码缓存)、每个类结构(如运行时常数池、字段和方法数据)以及方

2021-11-12 14:59:36 250

转载 Server-Sent Events 教程

服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE)。本文介绍它的用法。一、SSE 的本质严格地说,HTTP 协议无法做到服务器主动推送信息。但是,有一种变通方法,就是服务器向客户端声明,接下来要发送的是流信息(streaming)。也就是说,发送的不是一次性的数据包,而是一个数据流,会连续不断地发送过来。这时,客户端不会关闭连接,会一直等着服务器发过来的新的数据流,视频播放就是这样的例子。本质上,这种通信就是以流信息的方式,完成一

2021-11-11 15:01:55 552

原创 WebSocket

https://www.ruanyifeng.com/blog/2017/05/websocket.html

2021-11-11 14:48:54 1606

转载 CORS解决跨域问题

跨域问题什么是跨域跨域是指跨域名的访问,以下情况都属于跨域:跨域原因说明示例域名不同www.jd.com 与 www.taobao.com域名相同,端口不同www.jd.com:8080 与 www.jd.com:8081二级域名不同item.jd.com 与 miaosha.jd.com如果域名和端口都相同,但是请求路径不同,不属于跨域,如:www.jd.com/itemwww.jd.com/goods为什么有跨域问题?跨域不一定会有跨域问题。

2021-11-11 14:17:44 4309

转载 @RequiredArgsConstructor(onConstructor = @__(@Autowired)) Intellij IDEA如何去掉@Autowired 注入警告的方法

在Service层注入Mybatis的Mapper我们通常会使用@Autowired 自动注入@Autowiredprivate ProductMapper productMapper;但是这样Intellij IDEA会显示红色告警,提示不能自动注入。当我们在Controller层注入Service时我们也经常直接在Filed上使用@Autowired 注解,这时候不显示红色警告,但是也显示Field injection is not recommended 的建议原因第一种情况是因为

2021-11-10 14:42:13 835

转载 HTTP响应头处理。网页嵌套问题、http缓存设置

HTTP响应头处理HTTP响应头中的许多属性都可以用来提高Web安全。我们来看一下Spring Security中提供显示支持的一些HTTP响应头Spring Security默认情况下 显式支持的HTTP相应头主要有以下几种:Cache-Control: no-cache, no-store, max-age=0, must-revalidatePragma: no-cacheExpires: 0X-Content-Type-Options: nosniffStrict-Transport-

2021-11-10 14:27:55 976

转载 JWT中Token的生成

1、什么是Cookie?cookie指的就是浏览器里面能永久存储数据的一种数据存储功能。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。Cookie有什么功能特点呢?在同一个页面中设置 Cookie,实际上是按从后往前的顺序进行的。如果要先删除一个

2021-11-10 13:56:18 718

转载 转发一个security的案例

添加链接描述

2021-11-10 11:31:27 48

转载 cookie、session、token区别与联系

sessionsession的中文翻译是“会话”,当用户打开某个web应用时,便与web服务器产生一次session。服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。cookiecookie是保存在本地终端的数据。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存

2021-11-10 10:04:43 678

原创 HashMap、HashSet源码分析

HashSet源码分析1、基本结论1.1、底层实现1.2、基本机制2、源码分析2.1、插入元素2.2 resize()源码分析1、基本结论1.1、底层实现HashSet是由HashMap实现的,而HashMap是一个个键值对的集合,因此HashSet中的值作为HashMap的key,而自动new一个Object对象最为HashMap的value,这个Object的引用是静态常量的引用类型,所以整个内存仅存在一个Object,意味着所有的Set对应于HashMap中的value都是这个Object。因此

2021-11-08 21:58:13 293

转载 volatile关键字的作用

https://www.cnblogs.com/daxin/p/3364014.html

2021-11-04 22:03:38 87

转载 基于session的认证和基于Token认证的区别

一、session的状态保持及弊端二、token认证机制一、session的状态保持及弊端当用户第一次通过浏览器使用用户名和密码访问服务器时,服务器会验证用户数据,验证成功后在服务器端写入session数据,向客户端浏览器返回sessionid,浏览器将sessionid保存在cookie中,当用户再次访问服务器时,会携带sessionid,服务器会拿着sessionid从服务器获取session数据,然后进行用户信息查询,查询到,就会将查询到的用户信息返回,从而实现状态保持。弊端:1、服务器压

2021-10-26 14:05:56 492

原创 Math类的取整方法

Math类中提供了三个与取整有关的方法:ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应,例如:ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.6)的结果为-11;floor的英文是地板,该方法就表示向下取整,Math.floor(11.6)的结果是11,Math.floor(-11.4)的结果-12;最难掌握的是round方法,他表示“四舍五入”,算法为Math.floor(x+0.5),即将原来

2021-10-12 15:55:55 709

原创 ArrayList 扩容源码分析

ArrayList1、ArratList无参构造器形式初始容量是0,加入第一个数据时容量设置为10,随后每次到达容量都会按当前容量的1.5倍扩容。2、arraylist指定容量的构造方式创建则初始容量是指定的容量,而后面每次到达容量上限都会按1.5倍扩容。源码:在ArrayList中,使用一个Object类型的数组实现对元素进行保存。首先编写测试代码: List<Integer> list = new ArrayList<>(); for (int i

2021-09-30 20:50:38 119

原创 关于String在内存的表示和intern方法

内存String 字符串的存储位置在JAVA7之后存储在堆空间中的字符串常量池中。而此前是存储在永久区之中。(java8之后jvm中的方法区的实现时元空间,而此前是永久区)不同创建方式在内存的位置String str = "this is str"; 这种方式通过字面量的方式创建一个字符串,此时会直接在堆的常量池中创建此字符串(如果之前已经创建过了,由于字符串的不变性,会使用之前的那个)。String str2 = new String(“this is str”); 这种方式会在堆空间中创建一个

2021-09-29 16:44:52 134

原创 代理模式,静态代理与动态代理区别、各自实现,以及动态代理的源码分析

一、什么是代理代理就是我们指定一个工具类,这个类作为服务申明(一个接口)和服务具体实现(继承这个接口并实现方法)的第三者,它也实现这个服务接口,同时需要把这个服务具体实现放入其中,但是实现该服务的方法时,通过调用这个服务具体实现的方法,同时在该方法前后提供额外的增强服务来提高服务的力度,从而实现方法的增强。二、静态代理概念:所谓静态代理就是上述的代理的实现由我们自己手动实现,在新增服务的时候需要在这个代理中心手动增加代理服务的实现者并在后面实例化代理调用它,下面是一个例子:需求:现在需要两个服务

2021-09-23 13:27:10 250

原创 Lambda表达式的相关知识(概念、简化和用法)

概念lambda表达式是java8的新特性之一,本质上来说是一个匿名函数,可以简化接口的实现从而简化代码。使用限定:只有函数式接口才能使用lambda表达式简化实现。函数式接口:接口中只有一个需要实现的方法的接口就是函数式接口(不包括default修饰的默认的方法,static修饰的静态方法,以及从object继承的toString等方法。)可以使用@FunctionalInterface注解检验是否是函数式接口在写lambda表达式的时候只用关注参数列表和方法体:(参数)->{方法体

2021-09-22 19:44:39 320

狂神笔记,b站狂神说课程笔记大全

b站狂神说课程笔记大全,每个部分都有

2021-09-19

信息安全课程设计.zip

网络信息安全的课程设计,在线聊天软件。用javaApplet(java小程序)编写,采用全双工通讯,集合有几种加密算法和解密算法,也有数字签名,包含报告书。用eclipse直接跑

2020-03-05

安卓课程设计含有报告书.zip

自己做的学生管理系统课程设计,含有完整项目和报告书。有数据库、登录、学生的相关操作(加入删除修改等)、图标分析学生成绩等,AndroidStudio写的,可直接androidstudio跑。

2019-12-19

空空如也

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

TA关注的人

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