1 前言作为骨灰级博客写手,如何让写博客成为一种乐趣,甚至一种艺术享受的过程,是每个创作者的追求。能实现我们这些梦想的,就是创作者中心的编辑器,51CTO博客就是一个理想的平台,悟空WuKong编辑器几乎满足了我的所有幻想。2 “二八定律”下的网红功能本文就来谈一下这么久以来 WuKong 的吸睛之处,在于常用功能,他都做到了业界最极致的用户体验。2.1 标题、目录写博客首先就是写标题,提纲挈领,
为什么小小一个CPU,有那么多周期(Cycle)?程序的性能,是由三个因素相乘来衡量的,“指令数×CPI×时钟周期”。和周期相关的只有一个时钟周期,即CPU主频的倒数。一个CPU的时钟周期可以认为是可以完成一条最简单的
微服务之间的大多都是使用 通信,这自然少不了使用 HttpClient。在不适用 Spring 前,一般使用 Apache HttpClient 和 Ok HttpClient 等,而一旦引入 Spring,就有了更好选择 - RestTemplate。参数类型是 MultiValueMap接口
换个方式访问该接口,示例如下:期待"JavaEdge:dev 666",但是运行上述代码后,你会发现结果却是下面这样:why?解析这就要求精通 URL 的处理:UriComponentsBuilder#toUriString:URL Encode调用栈如下:至此,都还
想通过流水线设计来提升CPU的吞吐率,我们需要冒哪些风险。流水线设计需解决的三大冒险:结构冒险(Structural Hazard)数据冒险(Data Hazard)控制冒险(Control Hazard)CPU流水线设计里,会遇到各种“危险”,使得
很多业务mapper 中都包含了一个无用的拼接 SQL:where 1=1,这是为何?先尝试去掉它看
1 简介SPI,Service Provider Interface,一种服务发现机制。 有了SPI,即可实现服务接口与服务实现的解耦: 服务提供者(如 springboot starter)提供出 SPI 接口。身为服务提供者,在你无法形成绝对规范强制时,适度"放权" 比较明智,适当让客户端去自定义实现客户端(普通的 springboot 项目)即可通
import com.google.c
事务的传播机制多数据源的切换问题 更深入理解 Spring 事务。用户注册完成后,需要给该用户登记一门PUA必修课,并更新该门课的登记用户数。 为此,我添加了两个表。 课程表 course,记录课程名称和注册的用户数。用户选课表 user_course,记录用户表 user 和课程表 course 之间的多对多关联。 同时为课程表初始化了一条课程信息 接
现在产品期望用户创建和保存逻辑分离:把User实例的创建和保存逻辑拆到两个方法分别进行。 然后,把事务的注解 @Transactional 加在保存数据库的方法上。 执行程序,异常正常抛出 事务未回滚 源码解析debug: 前一段是 Spring 创建 Bean 的过程。当 Bean 初始化之后,开始尝试代理操作,
1简介SPI,ServiceProviderInterface,一种服务发现机制。!(https://s4.51cto.com/images/blog/202111/25101830_619ef276b3ffd85266.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_1
深度优先搜索算法利用的是回溯算法思想。这个算法思想非常简单,但是应用却非常广泛。除用来指导像深度优先搜索这种经典的算法设计之外,还可以用在很多实际的软件开发场景中,比如正则表达式匹配、编译原理中的语法分析等。数学问题都可以用回溯算法解决,比如数独、八皇后、0-1背包、图的着色、旅行商问题、全排列等等。如何理解“回溯算法”?如果人生可以量化,那如何才能在岔路口做出最正确的选择,让自己的人生“最优”呢?贪心算法,在每次面对岔路口的时候,都做出看起来最优的选择,期望这一组选择可以使得我们的人生达到“最优
1 概述源自于Google的MapReduce论文,发表于2004年12月。Hadoop MapReduce是Google MapReduce的克隆版优点海量数量离线处理易开发易运行缺点实时流式计算2 MapReduce编程模型wordcount词频统计MapReduce执行流程将作业拆分成Map阶段和Reduce阶段Map阶段: Map TasksReduce阶段、: Reduce TasksMapReduce编程模型执行步骤准备map处理的输入数据Mapper处
针对Java的开发工具,一般都有Compile、Make和Build三个菜单项,完成的功能的都差不多,但有区别。编译,是将源代码转换为可执行代码的过程。编译需要指定源文件和编译输出的文件路径(输出目录)。Java的编译会将java编译为class文件,将非java的文件(一般成为资源文件、比如图片、xml、txt、poperties等文件)原封不动的复制到编译输出目录,并保持源文件夹的目录层次关系
全是干货的技术号:本文已收录在github仓库JavaInterviewTutorial(https://github.com/Wasabi1234/JavaInterviewTutorial),欢迎star/fork:https://github.com/Wasabi1234/JavaInterviewTutorial1ScaleOut即Scalehorizontally,横向扩展,向外扩展。称
你一定经常见到一个两三千行的controller类,类之所以发展成如此庞大,有如下原因:长函数太多类里面有特别多的字段和函数量变引起质变,可能每个函数都很短小,但数量太多1程序的modularity你思考过为什么你不会把allcode写到一个文件?因为你的潜意识里明白:相同的功能模块无法复用复杂度远超出个人理解极限一个人理解的东西是有限的,在国内互联网敏捷开发环境下,更没有人能熟悉所有代码细节。解
简介用来提供一个集中的请求处理机制,所有请求都由一个单一处理程序处理。该处理程序可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。前端控制器(FrontController)处理应用程序所有类型请求的单个处理程序,应用程序可以是基于web的应用程序,也可以是基于桌面的应用程序调度器(Dispatcher)前端控制器可能使用一个调度器对象来调度请求到相
1 本地锁常用的即 synchronize 或 Lock 等 JDK 自带的锁,只能锁住当前进程,仅适用于单体架构服务。而在分布式多服务实例场景下必须使用分布式锁2 分布式锁2.1 分布式锁的原理厕所占坑理论可同时去一个地方“占坑”:占到,就执行逻辑否则等待,直到释放锁可通过自旋方式自旋“占坑”可以去Redis、DB、任何所有服务都能访问的地方。2.2 分布式锁演进一阶段// 占分布式锁,去red
冒泡排序、插入排序、选择排序时间复杂度都是O(n2),适合小规模数据排序。两种时间复杂度为O(nlogn)的排序算法,归并排序和快速排序。这两种排序算法适合大规模数据排序,更常用。归并排序和快速排序都用到了分治思想。归并排序要排序一个数组,
1简介MQ要能支持组件通信消息的快速读写,而Redis本身支持数据的高速访问,正好可以满足MQ读写性能需求。但除了性能,MQ还有其他要求,Redis真的适合做消息队列吗?问题的背后,其实包含如下核心问题:MQ消息存取需求是什么Redis如何实现消息队列的需求MQ的特征和Redis提供的MQ方案。只有把这两方面的知识和实践经验串连起来,才能彻底理解基于Redis实现消息队列的技术实践。MQ选型时,就
全是干货的 Java 技术仓库:https://github.com/Wasabi1234/Java-Interview-Tutorial 服务注册发现示意图 当你在启动类上添加了启动 Eureka 服务注册中心注解时,到底发生了什么呢? 激活eureka服务器相关配置EurekaServerAutoConfiguration的注解 Eu
Redis到底快在哪?它接收到一个键值对操作后,能以微秒级速度找到数据,并快速完成操作。为啥就Redis这么突出?它是内存数据库,所有操作都在内存上完成,内存的
是不是觉得数据结构和算法,跟os、计网一样,属于脱离实际工作的屠龙术?除了面试,其实这辈子也用不着?尽管计算机专业同学在大学都学过这些课程,甚至很多培训机构也会培训,但很多程序员对数据结
冒泡排序、插入排序、选择排序时间复杂度都是O(n2),适合小规模数据排序。两种时间复杂度为O(nlogn)的排序算法,归并排序和快速排序。这两种排序算法适合大规模数据排序,更常用。归并排序和快速排序都用到了分治思想。归并排序要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并,整个数组就有序了。!(https://s4.51cto.com/images/b
Redis本身内容繁杂,要是上来就研究一细节点,如连接池、数据结构,虽可直接学到某个点的详尽源码内容,甚至尽快解决一些事故,但容易溺死在细节
Servlet从创建直到毁灭的整个过程:Servlet 初始化后调用 init () 方法Servlet 调用 service() 方法来处理客户端的请求Servlet 销毁前调用 destroy() 方法最后,
通过注解或servlet声明都能控制 servlet 容器如何提供 servlet 实例。对于非分布式(默认)的 servlet,servlet 容器对于每个 Servlet 声明必须且只能产生一个
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号