- 博客(62)
- 资源 (1)
- 收藏
- 关注
原创 Java使用Time实现发送邮件提醒
由于时间可能不是确定的某一天,而是一段的时间内需要执行的业务,就像我们平时的闹钟一样提醒,所以时间节点使用Time存储,只含有时分秒的时间结构。在项目的开发中需要这样的一种业务,需要对客户设置到点提醒。我们可以使用定时任务的方式去实现。时间设置每隔一分钟查询一次。
2023-08-07 09:16:57 386
原创 WebSocket整合直播
由于浏览器不支持对于rtmp协议推拉流,所以需要后台对传输的数据进行处理,将数据转接,为了实现其实时性,使用websocket将数据传输。先使用obs和vlc测试正常的推拉流是否正常。设置1秒时长的延迟,防止服务器因为拉流崩溃。对音视频解析转为二进制流传递给前端。使用JavaCV技术传输音视频。然后在跑本地后台传输视频。
2023-08-01 19:42:22 1163
原创 NIO基础
Java NIO(New IO)是从 Java 1.4 版本开始引入的一个新的 IO API,可以替代标准的 Java IO API。NIO 与原来的 IO 有同样的作用和目的,但是使用方式完全不同,NIO 支持面向缓冲区的、基于通道的 IO 操作。NIO 将以更加高效的方式进行文件的读写操作。若事件未就绪,调用 selector 的 select() 方法会阻塞线程,直到 channel 发生了就绪事件。若需要使用 NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。
2023-07-18 09:17:14 378
原创 关于服务器被黑这件事儿
在我登入好久不用的服务器的时候登不进去,看后台cpu飙到200%,一下给我整蒙了,重启服务器,再次进入用top命令查看进程,发现kdevtmpfsi进程的事儿,我直接用kill -9 命令给它清理出去过了一分钟左右这个东西又重新的飙上去了还是200%,在网上搜索发现这是一个典型的挖矿病毒。查看kdevtmpfsi相关文件并删除find / -name "kdevtmpfsi"查看系统定时任务crontab -l 发现可疑任务。再用crontab -e把可疑定时任务删除。妈妈再也不用担心服务器cpu烧了。
2023-06-11 10:25:58 184
原创 布隆过滤器
当一个元素加入布隆过滤器中的时候,会进行如下操作:使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值)。得到值之后判断位数组中的每个元素是否都为 1,如果值都为 1,那么说明这个值在布隆过滤器中,如果存在一个值不为 1,说明该元素不在布隆过滤器中。相比于我们平时常用的的 List、Map、Set 等数据结构,它占用空间更少并且效率更高,但是缺点是其返回的结果是概率性的,而不是非常准确的。理论情况下添加到集合中的元素越多,误报的可能性就越大。
2023-05-28 09:33:03 88
原创 Mysql日志
undo log和redo log记录物理日志不一样,它是逻辑日志,可以认为当delete一条记录时,undo log中会记录一条对应的insert日志,反之亦然,当update一条记录时,它记录一条对应相反的update日志。该日志文件由俩部分组成日志缓冲(redo log buffer)以及重做日志文件(redo log file),前者是在内存中,后者在磁盘中,当事务提交之后会把所有修改的信息都存到该日志文件中,用于刷新脏页到磁盘,发生错误时,进行数据恢复和使用。undo log日志。
2023-05-20 15:28:47 632
原创 Mysql存储过程
MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作,避免DML与DDL冲突。系统变量是MySQL服务器提,不是用户定义的,属于服务器层面,分为全局变量(GLOBAL)、会话变量(SESSION)。对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用“@变量名”使用就可以。锁粒度最小,发生锁冲突的概率最低,并发度最高。
2023-05-06 15:20:48 749
原创 RocketMq消息
/ System.out.println("消息ID"+sendResult.getMessageQueue().getQueueId());System.out.println("消息ID"+sendResult.getMessageQueue().getQueueId());System.out.println("发送异常:"+throwable.getMessage());对没有Commit/Rollback的事务消息(pending状态的消息),从服务端发起一次回查。
2023-04-26 21:35:28 425
原创 RocketMq集群搭建
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9yhIWPJt-1681547798802)(D:\JavaWeb\Mybatis\MyBatis的笔记\MyBatis\img\image-20230411172320848.png)]
2023-04-15 16:48:17 466
原创 Rabbitmq了解
轮询分发的特点是将消息轮流发送给每个消费者,在实际情况中,多个消费者,难免有的处理得快,有的处理得慢,如果都要等到一个消费者处理完,才把消息发送给下一个消费者,效率就大大降低了。通过消息队列来实现 RPC 功能,客户端发送消息到消费队列,消息内容其实就是服务端执行需要的参数,服务端消费消息内容,执行程序,然后将结果返回给客户端。而公平分发的特点是,只要有消费者处理完,就会把消息发送给目前空闲的消费者,这样就提高消费效率了。一对多模式,一个生产者,多个消费者,一个队列,每个消费者从队列中获取唯一的消息。
2023-04-02 11:24:40 878
原创 初尝MQ队列
AMQP:(advanced message queuing protocol) ,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息并不受客户端/中间件不同产品、不同开发语言等条件的限制。MQ全称:Message Queue(消息队列),是在消息的传输过程中保存消息的容器,多用于分布式系统之间进行通信。RabbitMQ简介。
2023-03-25 21:07:02 98
原创 Java内存模型
JMM通过控制主内存与每个线程的本地内存之间的交互,保证Java程序的可见性。同步是指程序中用于不同线程的操作发生相对顺序的机制。Java并发采用的是共享内存模型。final域的重排序规则。volatile特性。
2023-03-18 19:29:17 123
原创 synchronized理解
(1)FixedThreadPool和SingleThreadPool 这两个工厂方法所创建的线程池,工作队列(任务排队的队列) 的长度都为Integer.MAX_VALUE,可能会堆积大量的任务,从而导致 OOM(即耗尽内存资源)。固定数量的线程池的线程数量能比较稳定的保证一个数,避免频繁的回收线程和创建线程,固适用于处理CPU密集型任务,在CPU被工作线程长时间占用时,能确保尽可能少的分配线程。抛弃最老任务策略,也就是说如果队列满了,就会将最早进入队 列的任务抛弃,从队列中腾出空间,再尝试加入队列。
2023-03-12 16:10:33 98
原创 初尝并行编程
(1)FixedThreadPool和SingleThreadPool 这两个工厂方法所创建的线程池,工作队列(任务排队的队列) 的长度都为Integer.MAX_VALUE,可能会堆积大量的任务,从而导致 OOM(即耗尽内存资源)。固定数量的线程池的线程数量能比较稳定的保证一个数,避免频繁的回收线程和创建线程,固适用于处理CPU密集型任务,在CPU被工作线程长时间占用时,能确保尽可能少的分配线程。抛弃最老任务策略,也就是说如果队列满了,就会将最早进入队 列的任务抛弃,从队列中腾出空间,再尝试加入队列。
2023-03-03 20:38:27 671
原创 JVM面试总结
双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会 自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加 载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有 当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时, 子加载器才会尝试自己去完成加载。标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对 象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。
2023-02-23 09:07:58 601
原创 类加载子系统
解析动作主要针对类或接口、字段、类方法、接口方法、方法类型等。直接引用就是直接指向目标的指针、相对偏移量或一个间接定位到目标的句柄。使用 BinaryViewer软件查看字节码文件,其开头均为 CAFE BABE ,如果出现不合法的字节码文件,那么将会验证不通过。这里不包含用final修饰的static,因为final在编译的时候就会分配好了默认值,准备阶段会显式初始化。注意:这里不会为实例变量分配初始化,类变量会分配在方法区中,而实例变量是会随着对象一起分配到Java堆中。
2023-01-15 18:19:22 468
原创 JVM内存模型
JMM 即 Java Memory Model,它定义了**主存(共享内存)、工作内存(线程私有)**抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。JMM体现在以下几个方面退出不出的循环为什么无法退出该循环原子性可见性有序性多线程下的指令重排会影响安全性可以使用double-checked locking模型实现单例以上的实现优点是:但在多线程的情况下,上面的代码有问题JDK1.5以后的版本的voltile才会有效happens-before规则线程对volatile变量的写
2022-12-04 15:27:16 409
原创 JVM之方法的调用
随着高级语言的横空出世,类似于Java一样的基于面向对象的编程语言如今越来越多,尽管这类编程语言在语法风格上存在一定的差别,但是它们彼此之间始终保持着一个共性,那就是都支持封装、继承和多态等面向对象特性,既然这一类的编程语言具备多态特性,那么自然也就具备早期绑定和晚期绑定两种绑定方式。早期绑定就是指被调用的目标方法如果在编译期可知,且运行期保持不变时,即可将这个方法与所属的类型进行绑定,这样一来,由于明确了被调用的目标方法究竟是哪一个,因此也就可以使用静态链接的方式将符号引用转换为直接引用。
2022-11-26 16:40:39 779 1
原创 JVM类文件结构
Class文件结构:Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前(最高位字节在地址最低位,最低位字节在地址最高位)的方式分隔若干个8位字节进行存储。
2022-11-20 15:36:27 308
原创 MySQL索引
索引是对数据库表中一列或多列的值进行排序的一种结构。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度首先按照物理划分为聚簇索引和非聚簇索引。
2022-11-05 17:07:29 193
原创 ThreadLocal使用
通常弱引用都会和引用队列配合清理机制使用,但是ThreadLocal是个例外,它并没有这么做。这意味着,废弃项目的回收依赖于显式地触发,否则就要等待线程结束,进而回收相应ThreadLocal每次使用过ThreadLocal后都要手动进行删除防止出现内存溢出的情况。它表示线程局部变量:为当前线程绑定一个变量,这样在线程的声明周期内的任何地方均可取出。ThreadLocal是线程本地的变量,只要是本线程内都可以使用,线程结束了,那么相应的线程本地变量也就跟随着线程消失了。获取值:获取和当前线程绑定的变量值。
2022-10-30 09:42:12 153
原创 LinkedHashMap和Hashmap
一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。LinkedHashMap的containsValue方法:首先处理value为null的情况, 其次它不像HashMap一样遍历整个数组, 而是通过遍历双线链表header来查找value;默认以插入顺序排序,性能比HashMap略低,线程也是不安全的。1.linkedHashMap虽然继承HashMap, 但实现了双线链表 ,有固定的顺序,与插入entry的顺序一样;
2022-10-22 21:33:49 1100
原创 浅谈1.8的hashMap
的基础加入了红黑树,使得hashMap的查询性能大幅增长,而且相比与之前的头插法来说使用了尾插法,避免了可能会出现的死循环问题。在hashmap中最重要的就是增加和删除,在1.8的hashMap中引入了TreeNode在1.7的hashMap原来的。
2022-10-15 19:53:44 175
原创 浅谈Synchronized和Vector
3.有序性:有序性值程序的执行顺序按照代码先后执行, synchronized和volatile都具有有序性,Java允许编译器和处理器对指令进行重排,但是指令重排并不会影响单线程的顺序,它影响的是多线程并发执行的顺序性。2.可见性:可见性是指多个线程访问一个资源时,该资源的状态、值等信息对于其他的线程都是可见的。修饰的类或对象都是原子的,因为操作之前都要先获取类或对象的锁,直到执行完毕才能被释放。1.原子性:那么所谓的原子性是指一个或多个操作要么全部执行,要么全部不被执行。
2022-10-08 19:57:45 361
原创 关于序列化
对象序列化,将对象中的数据编码为字节序列的过程。反序列化;将对象的编码字节重新反向解码为对象的过程。JAVA提供了API实现了对象的序列化和反序列化的功能,使用这些API时需要遵守如下约定:被序列化的对象类型需要实现序列化接口,此接口是标志接口,没有声明任何的抽象方法,JAVA编译器识别这个接口,自动的为这个类添加序列化和反序列化方法。为了保持序列化过程的稳定,建议在类中添加序列化版本号。
2022-09-25 08:07:44 133
原创 Java基础—反射
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。
2022-09-17 16:36:04 130
原创 TCP网络通信
TCP与UDP都属于TCP/IP协议TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂, 只简单的描述下这三次对话的简单过程:1)主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;2)主机B向主机A发送同意连接和要求同步 (同步就是两台主机一个在发送,一个在接收,协调工作)的数据包 :“可以,你什么时候发。
2022-09-10 16:33:07 1090
原创 矩阵中的路径
输入:board = [[“A”,“B”,“C”,“E”],[“S”,“F”,“C”,“S”],[“A”,“D”,“E”,“E”]], word = “ABCCED”如果 word 存在于网格中,返回 true;单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。输入:board = [[“a”,“b”],[“c”,“d”]], word = “abcd”例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。
2022-09-04 09:21:13 106
原创 排序算法-堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
2022-08-13 23:13:10 96
原创 数据结构学习(Java)
一种特殊的树结构堆,是一棵完全二叉树,也就是一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同。:树是一种典型的非线性结构,它是由 n(n>0)个有限节点组成的一个具有层次关系的集合。相对于此类更多的运用的是双端队列(Deque),具有更强的灵活性,扩展了Queue类,同样可以使用于栈结构的使用,不同于单调的队列,栈(Stack)是先进后出。4.除了根节点外,每个子节点可以分为多个不相交的子树。..
2022-08-06 22:27:40 237
原创 滑动窗口的最大值
方法找出最大值,这样就可以利用简单的for循环来求解答案,存放在最终的数组中,同样也可以利用队列或栈来求解来减少时间复杂度。你可以假设k总是有效的,在输入数组不为空的情况下,1≤k≤输入数组的大小。输入nums=[1,3,-1,-3,5,3,6,7],和k=3。给定一个数组nums和滑动窗口的大小k,请找出所有滑动窗口里的最大值。这个指针指向滑动窗口的第一个值由于循环的。本题可以利用数组和指针来求解,先声明。输出[3,3,5,5,6,7]就可以得到新的数组,利用。...
2022-07-31 18:48:31 187
原创 linux下运行二进制文件
对于前后端完全分离的项目来说,都需要分别打包运行,前端文件就需要打包成二进制文件或者是在windows环境下的.exe文件。在linux下,首先来说需要注意的是要进行更改文件权限的操作使用chmod命令的语法为。表示只有当该文件是个子目录或者该文件已经被设定过为可执行。需要注意的是打包二进制文件是没有后缀名的。如果需要后台使用的话可以用。还有一种是八进制语法。执行二进制文件直接用。...
2022-07-24 09:52:43 13624
原创 BigDecimal使用
在使用单双精度float和double的运算过程中面对千万级的小数级上出现错误,对于我们的项目而言很不友好,对此BigDecimal就能很好的解决问题所在BigDecimal类提供了算术,缩放操作,舍入,比较,散列和格式转换的操作。...
2022-07-17 13:02:23 337 1
原创 Stream流使用
在写项目的过程中数组与collection集合的转换中我首先使用的是list集合的形式,其它基本类型数组形式转换为list集合再将使用for循环将其转为数组形式,中间迭代加入list集合仍然使用for循环迭代的形式Stream流处理:可以看出这种方法比较费事儿,经由学长指点才晓得还可以用Stream流的方式将代码缩减少了几步将数组数据转为list集合形式可以说非常省事Stream流除了这种使用外,还有很多常用的方法将list种的元素遍历不用使用for循环就能将数据转到另一个里边...
2022-07-09 23:16:42 190
原创 关于使用mybatis-plus
初使用mybatis-plus的时候感觉用处非常好,不用加大量的xml文件或者注解形式的sql语句提高了我们的效率,仅仅实现它的它的接口就能根据个人的特定需求很好的对单表进行操作,还有很多实用的插件。在我测试接口的时候发现它给我报sql语句错误,我的天哪,它自动生成的语句咋会把错误给到我呢,赶紧看我的字段是否对应错误,还用神器Ctrl+C和Ctrl+V最后还是给我报sql语句的错误,在配置文件配置上加上打印SQL语句到底是啥,一打印就发现了问题所在出现了我数据库根本就没有的字段把我的大写变成了然后再as一
2022-07-02 23:10:27 462 2
原创 Redis-缓存问题
每次启动项目时都会由于数据库的数据太多导致刚进去的时候会由于数据存放过多,首页信息多个请求体直接用MySQL数据库速度慢,影响用户体验一下是用redis解决缓存问题的解决思路,以提高能。指的是客户端请求的数据在缓存中和数据库中都不存在,这样的缓存永远也不会生效,这些请求都会打到数据库 优点:实现简单,维护方便 缺点:额外内存消耗,可能造成短期的不一致[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uao7fFL9-1656169792615)(
2022-06-25 23:11:42 211
原创 Redis学习
相比于原来的MySQL关系型数据库,redis是一种key-value的非关系型数据库。性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。 查看当前所有key(匹配:key *1)判断某个key是否存在查看你的 key是什么类型删除指定的key数据·根据value选择非阻塞删除,仅将keys 从 keyspace元数据中删除,真正的删除会在后续异步操作。 10秒钟:为给定的 key设置过期时间有多少秒过期,-1表示永不过期,-2表示已过期hash是一个 string 类
2022-06-18 21:05:19 164 1
Java后台实现居民信息管理系统
2022-05-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人