- 博客(59)
- 收藏
- 关注
原创 富文本文案存储翻译方案
首先富文本内容都有一个特点,就是前端能转换成html解析,所以,我们把内容转换成我们能看到的结构,在代码中就是转换成html结构的对象,那什么工具能实现这种效果呢?转换成Document对象之后里面的标签都会被解析成该对象的节点,有个类型就是存储的正文内容:TextNode。以上两种方式都会面临一个问题,内容取不全,翻译就会不完整,因为不确定正文是否包含正则内的内容。这样之后termList就是整个富文本中的非标签内容,将其翻译之后在替换回来就完美解决了。1、遍历整个内容,判断连续的中文文段,收集起来,
2023-10-13 15:05:00
427
1
原创 GPT生产实践之定制化翻译
GPT除了能用来聊天以外,其实功能非常强大,但是我们如何把它运用到生产实践中去,为公司带来价值呢?下面一个使用案例--使用gpt做专业领域定制化翻译
2023-08-23 15:13:36
1460
原创 Java设计模式:工厂模式,优化代码的灵活性和可维护性
本篇博客主要介绍了Java设计模式之工厂模式,旨在让初级程序员理解工厂模式的概念和使用,甚至能够看懂一些开源框架的源码。文章以Spring中的工厂模式为信息来源,通过实例讲解了工厂模式的实现过程和优点,强调了工厂模式能够简化对象的创建过程并使客户端无需知道具体的对象创建过程。最后,文章鼓励读者通过学习设计模式来提高编程能力,并介绍了其他的设计模式供读者深入学习。
2023-04-28 19:43:39
844
1
原创 Java设计模式之策略者模式
本文介绍了Java设计模式之策略者模式,主要包括策略者模式的基本思想和应用场景,以及一个简单的计算器程序的实现示例。策略者模式可以帮助我们将算法或行为封装成独立的类,使得它们可以互相替换,而不影响客户端的使用。在Java编程中,策略者模式可以用来实现不同的算法或行为,让代码更加灵活和可扩展。本文的示例代码展示了如何使用策略者模式实现一个计算器程序,可以进行加、减、乘、除等四种计算方式。
2023-04-28 19:23:40
233
原创 图解通用网络IO底层原理、Socket、epoll、用户态内核态······
大家都知道;CPU 在执行任务途中接收到中断请求,需要保存现场后去处理中断请求!保存现场称为中断处理程序!处理中断请求也就是唤醒对应的任务进程来持有CPU进行需要的操作!有了中断之后,提升了操作系统的性能!可以异步并行处理很多任务!软中断(80中断)由CPU产生的;CPU检查到程序代码段发生异常会切换到内核态;硬中断由硬件设备发起的中断称为硬中断!可以发生在任何时间;比方说网卡设备接收到一组报文;对应的报文会被DMA设备进行拷贝到网卡缓冲区!
2022-08-19 22:09:27
394
原创 2022最新 Netty底层数据交互源码剖析二
当有连接建立时服务端底层做了哪些事情;无非就是生成socketChannel并初始化pipeline设置事件为读事件;最后将其注册到workerGroup中的其中一个EventLoop上,底层流程与上一节ServerSocketChannel一样的流程!以及当触发读事件时EventLoop做了哪些工作才保证了数据的正常到达,这里又涉及到了Netty直接内存的概念以及零拷贝原理;最后把整个netty的设计精髓做了一些专门的讲解以及源码级别剖析!最后贴一张整个Netty源码流程图!...
2022-08-18 18:09:17
712
2
原创 最最新Netty线程模型源码,它真的太细了【doge】一
下定决心研究Netty源码,将用三篇文章记录自己看源码流程,方便后续复习!这是第一篇,也就是服务端启动流程源码剖析,通过netty线程模型图做主流程,寻找图中流程步骤在源码中的具体体现!...
2022-08-15 21:45:50
383
原创 深入理解Netty底层基础、中断、NIO、epoll~~~~
高性能网络通信IO是如何实现的?Netty底层IO机制是啥?响应式线程模型是什么东西?BIO、NIO、Epoll都是写什么牛马;一次网络通信底层都经历了什么?这篇文章通通告诉你!
2022-08-07 17:11:27
954
原创 程序员不可不知的操作系统高频知识点,备战秋招
参加过几场面试后发现,什么狗屁的流行技术;基础才是王道;是能伴随程序员终生的财富;所以有必要对热门的操作系统进行整理,方便理解和复习
2022-07-24 11:30:00
218
原创 万字详解Mysql底层索引,事务等面试热点
> mysql作为一个非常重要的数据库,在面试中也会扮演非常重要的角色,恰逢秋招来临,总结了mysql从索引到事务全方位的知识点;希望能帮到各位读者!
2022-07-11 23:06:23
293
原创 零拷贝、NIO、内核态、DMA、Java堆外内存
零拷贝在很多中间件里面都有广泛的应用;正是因为有了零拷贝的存在,才会出现想Kafka、RocketMQ、Netty这种高性能、高吞吐量的网络中间件;所以此片文章就是从最底层硬件开始,讲解零拷贝的实现原理;保证清晰...
2022-07-03 18:40:21
470
原创 RocketMQ高级特性总结
文件存储?那不慢的要死?其实并不慢,下面会有介绍!文件存储!不需要借助mysql等索引数据库;高性能的磁盘顺序写的速度很快;比随机写快6000倍!完全不用担心;Rocket就是使用顺序写,保证了消息存储的速度;另外!原始数据读写:App read数据;文件先从内核态复制到用户态中,再由程序读取到自己的工作空间;乍一看;就觉得慢!这两个看似简单的操作,实际进行了4 次数据复制,分别是:mmap机制:mmap操作提供了一种机制,让用户程序直接访问设备内存,这种机制,相比较...
2022-07-03 15:00:27
400
原创 RocketMQ 入门
什么事消息中间件?这个问题很基础,简单解释一下:主要有以下三点:异步、解耦、削峰异步:12306春节买票期间,产生大量的短信发送请求;如果同步发送短信的话;就处理不了高并发了;采用MQ将短信放到消息队列;用专门的消费者来发送短信;解耦:1、服务之间进行解耦,才可以减少服务之间的影响。提高系统整体的稳定性以及可扩展性。2、另外,解耦后可以实现数据分发。生产者发送一个消息后,可以由一个或者多个消费者进行消费,并且消费者的增加或者减少对生产者没有影响。削峰:双十一期间大批量订单产生,为了防止服务崩溃,使用消息队列
2022-07-01 22:58:24
688
原创 秋招面试突击之-------Java网络通信篇
三次握手、四次挥手:第一次,客户端向服务端发送SYN包,随后进入SYN_SENT 状态;第二次,服务端收到SYN包并确认,回复一个SYN包和一个ACK包(ACK= SYN客户端 + 1),随后进入SYN_RESV状态客户端收到SYN + ACK;向服务器发送ACK确认收到后就成功建立连接;完成三次握手;只有两次的话如果发生丢包行为的话会让客户端认为连接没有建立成功,而服务段则认为连接建立成功,就疯狂发数据给客户端,然而客户端并不会理会这些数据;四次挥手:由一端发起通道关闭通知,另一端收到后回复一个数据包;同
2022-06-11 22:46:45
131
原创 秋招面试突击之-------Java并发篇
引申问题:进程和线程的区别:进程是操作系统分配资源的最小单位,线程是OS进行任务分配的最小单元,线程隶属于进程;为什么设计这几种?:JDK考虑单继承多实现的机制,引申-----什么锁,如何加锁?-----synchronized 和 Lock;----引发出一系列锁的问题;可见性:多个线程访问同一资源变量,该资源变量发生变化后,会触发总线嗅探机制,通过Cpu缓存一致性协议将线程中的内存副本中的缓存行变为失效状态,导致该线程主动重新到主内存load到变量副本中!从而保证可见性;—底层汇编lock指令;**指令
2022-06-11 22:41:35
174
原创 简单的入个zookeeper门
没接触zk之前,总觉得他很牛逼;感觉在哪都能看到它的身影;所以才下定决心在秋招到来之前把它从头到尾掌握一遍;理解他的核心设计原理,甚至会深入源码;有兴趣的可以留意一下后面的博文;
2022-05-14 12:55:26
142
原创 备战秋招,Redis面试题万字详解
本篇旨在讲清楚redis在面试常问的面试题比如:缓存击穿、缓存雪崩、缓存穿透、布隆过滤器等等经典面试题,将他们的来龙去脉尽我所能介绍得一清二楚!开车!
2022-05-08 17:31:15
649
原创 Redis基础入门及五大数据结构API使用
Redis基础学习笔记入门中文网基于Linux搭建学习Linux安装Redis上传到linux,移动到opt目录tar -zcvf ....gz解压进入配置使用命令make–>make install安装目录在该目录的src下拷贝一份配置文件启动、后台启动测试:使用redis-cli客户端连接性能测试测试:100个并发连接 100000请求redis-benchmark -h localhost -p 6379 -c 100 -n 100000```基本
2022-05-02 18:53:04
1139
原创 Java常量池原理以及垃圾回收
Java常量池常量池:用于存放编译期间生成的各种字面量和符号引用字面量:由字母数字等构成的字符串或数值常量,如int a = 1中 1就是字面量符号引用:编译原理中的概念;是相对直接引用来说的,主要包括三类常量类和接口的全限定名,字段的名称和描述符方法的名称和描述符这些常量池现在都是静态信息,只有运行时被加载到内存后,这些符号才有对应的内存地址信息;就变成了运行时常量池,在程序加载或运行时会被转变为直接引用,也就是动态链接;字符串常量池字符串的创建和分配耗费高昂的时
2022-05-02 18:18:26
2276
原创 从没有人写的Redis慢问题:记录一次Redis网络IO开销大导致系统运行慢问题
问题:将自己博客系统改造成redis之后,兴致勃勃的打开压测工具测试,发现比之前更慢了,还出现很多redis连接读取超时问题,百思不得其解,曾以为是连接池的问题但是没有道理,最后终于发现问题;在配置文件中redis连接地址写成具体IP地址,但该Ip指向的还是本机服务器;所以导致在线上运行时产生不必要的网络IO开销,但这些又不是必要的,导致并发数上来之后一半的访问直接失败了!解决:改成localhost之后速度指数级提升;然而又有了新的问题;这个速度提升只是相对于没改ip时的提升;但对比了之前系.
2022-05-02 14:05:16
839
原创 一个接口对应一个线程,Tomcat线程池控制线程选择
一直都很好奇同时有多个请求调用我后台接口时是什么样的情况,今天在互联网上搜索了很久终于有了答案;我们的应用是由Tomcat进行管理的,tomcat才接受到请求时需要调用接口方法处理请求,那么一个请求肯定就对应了一个线程,但是并不是每个请求都会创建一个线程来处理它,因为线程创建与销毁很浪费资源,所以Tomcat维护了一个线程池,线程执行完一个请求后就会空闲,这样就算有并发请求突然访问某一个接口也调度得过来;实例测试验证:我们在被调用的方法里面打印线程的名字;这样就可以判读啊出每次线程都是哪些来处.
2022-04-30 01:14:01
1343
原创 超详细的手写SpringMVC、SpringMVC执行流程、底层实现原理
SpringMvc执行流程在发送请求之前容器做了些什么呢?容器初始化的准备有哪些?一、建立controller和urL的映射在容器启动时,当然会把所有的bean通过IOC注入到容器里面,二、根据URL找到对应的Controller方法,处理请求doService 调用doDisptch,doDisptch方法:总结:实际上就是根据请求路径去Map里面拿到对应的Controller,利用反射得到方法和参数,然后执行它!不过在执行前判断是否有拦截器,如果有就会去掉用它,最后返回Mod
2022-04-10 22:32:10
1254
原创 深入源码探究Spring循环依赖
深入源码探究Spring循环依赖spring使用三级缓存解决循环依赖,那他具体是怎么解决的?深入源码探究一手上图就是三级缓存;缓存作用一级缓存:放置最终版本的bean,当用户调用getBean的时候就会从一级缓存中拿到直接返回;二级缓存:存放早期实例化后的bean,当B依赖A,A又依赖B的时候,A就会使用B的二级缓存中的B的早期对象引用来填充属性三级缓存:存放工厂代理的依赖对象的引用;过程:创建之后肯定先放入三级缓存,填充属性遇到依赖别的bean就会先去get别的bean
2022-04-05 22:07:42
247
原创 一步一步拆解Spring IOC源码流程
IOC源码流程细致过程解析文章目录IOC源码流程细致过程解析**实例化建**BeanDefinition读取器: AnnotatedBeanDefinitionReader:BeanDifinition解释**注册配置类**:refresh()getBean---->creatBean解决几道面试题控制反转源码流程this()方法主要是调用该类中的其他重载构造函数,这里调用的是无参构造;但是众所周知:子类调用无参构造会首先调用父类的构造,所以这里会调用–同时继续调用父类抽象类的构
2022-04-03 20:55:48
418
原创 一图理解递归实现汉诺塔过程
汉诺塔的递归实现想把1、2、3全部从a移动到c,就肯定先把1、2移动到b! 然后把3移动到c!问题就变成了吧1、2 从b移动到c,那么a就变成了工具杆子!代码实现:public static void hanoi2(int n) { if (n > 0) { func(n, "left", "right", "mid"); }}public static void func(int N, String from, String to, String other)
2022-03-14 11:04:48
388
原创 链表必刷题:快慢双指针,链表反转,找中点模版·····
234. 回文链表很有代表性!包含了链表遍历,快慢指针找中点模版,链表数据比对,链表反转!非常具有代表性class Solution { public boolean isPalindrome(ListNode head) { if(head == null || head.next == null) return true; // 找中点 1=>1 123=>2 1234=>2 ListNode A_end = mid(he
2021-12-13 22:22:56
489
原创 25. K 个一组翻转链表
25. K 个一组翻转链表反转前k个很简单、需要记录后驱结点,但这不只有前k个,有多个前k个;需要两个结点记录需要反转的链表的起点和终点,a,b把a当起点,反转[a,b)链表!在以b为起点当成另一个组递归,又会产生一个[a,b)把第一个a接到第二个反转后的结点上! */class Solution { public ListNode reverseKGroup(ListNode head, int k) { if (head == null) return null
2021-12-05 21:55:33
319
原创 KMP算法详解(保姆级别)
KMP算法详解(保姆级别)这东西没那么难理解,看别人的文章写的有点啰嗦了自己会的东西不算会,能给别人讲明白才算会背景给你两个字符串,问你他们是否具有包含关系(连续的)!大部分都会首先想到暴力解法,一个个比较!直到找到比对上的!但是如果是这两个:aaaaaaab和aaaaaaac就很操蛋了(O(n*m))!里面包含很多重复比较的过程,如何设计一种算法来减少这种重复很有必要!这就是KMP研究的领域(加速BUFF)!不过想要彻底弄明白KMP;还得先搞懂一个最大前缀数组最大前缀数组(最长前缀&a
2021-11-28 12:36:06
340
原创 IDEA常用好用的插件
IDEA常用好用的插件1、EasyCode自动生成数据库表对应的实体类、mapper、接口等等自行选择2、LeetCode Editor在IDEA中刷力扣题----------详细设置过程3、热部署插件jrebel不需要重启项目就可以访问项目如何激活使用?-----------查看激活使用教程4、Translation翻译阅读源码必备5、MavenHelper处理maven冲突项目比较大难免会有依赖冲突6、Alibaba Java Coding阿里巴巴代码
2021-11-25 22:21:21
471
原创 一文解决阿里云配置服务器端口无法连接问题汇总
检查防火墙(centos7)查看防火墙状态firewall-cmd --staterunning代表正在运行停止命令systemctl stop firewalld.servicenot running 没运行启动命令systemctl start firewalld.service重启命令systemctl restart firewalld.service开放指定端口以开放80端口为例:开放端口:firewall-cmd --zone=public --add-port
2021-11-17 12:59:40
3308
原创 算法入门刷题二十天(1/20)!
今天开始正式备战明年秋招,那算法必不可少,所以从今天开始每天力扣两三道题,有兴趣的可以一起探讨!-第 一题:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。思路一:比较简单,首先想到的就是遍历数组和目标值进行比较,相等就返回下标值!代码如下:class Solution { public int search(int[] nums, int target) {
2021-09-02 21:44:33
98
转载 Shrio入门到“精通”
什么是Shrio?—一个NB的安全框架!号称世界上最火的企业级别安全框架(我编的)!可以干什么?—可以完成,认证,授权,加密,会话管理,Web集成,缓存等.说人话:就是过滤器封装版本及扩展版!有了它之后,什么繁琐的登录验证啊,拦截器啊都可以托管了,关键shrio运用AOP思想,横切代码,让你的源码受不到一点伤害!What can shrio do ?三个核心组件:Subject, SecurityManager 和 Realms.*Subject*: 即“当前操作用户”。但是,在Shiro.
2021-06-14 17:22:34
111
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人