暂时未有相关云产品技术能力~
关注公众号:JavaEdge,后台回复面试,领取更多大厂求职资源。曾在百度、携程、华为等大厂搬砖,专注Java生态各种中间件原理、框架源码、微服务、中台等架构设计及落地实战,只生产硬核干货!
回溯算法思想很简单,大部分都是用来解决广义搜索问题:从一组可能解中,选出一个满足要求的解。 回溯非常适合用递归实现,剪枝是提高回溯效率的一种技巧,无需穷举搜索所有情况。 回溯算法可解决很多问题,如DFS、八皇后、0-1背包、图的着色、旅行商、数独、全排列、正则表达式匹配等。
你一定经常见到一个两三千行的 controller 类,类之所以发展成如此庞大,有如下原因: 长函数太多 类里面有特别多的字段和函数 量变引起质变,可能每个函数都很短小,但数量太多
冒泡排序、插入排序、选择排序时间复杂度都是O(n2),适合小规模数据排序。 两种时间复杂度为O(nlogn)的排序算法,归并排序和快速排序。这两种排序算法适合大规模数据排序,更常用。 归并排序和快速排序都用到了分治思想。
冒泡排序、插入排序、选择排序时间复杂度都是O(n2),适合小规模数据排序。 两种时间复杂度为O(nlogn)的排序算法,归并排序和快速排序。这两种排序算法适合大规模数据排序,更常用。 归并排序和快速排序都用到了分治思想。
冒泡排序、插入排序、选择排序时间复杂度都是O(n2),适合小规模数据排序。 两种时间复杂度为O(nlogn)的排序算法,归并排序和快速排序。这两种排序算法适合大规模数据排序,更常用。 归并排序和快速排序都用到了分治思想。
为啥就Redis这么突出? 它是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快 数据结构 键值对是按一定的数据结构来组织的,操作键值对最终就是对数据结构进行增删改查操作,所以高效的数据结构是Redis快速处理数据的基础
为啥就Redis这么突出? 它是内存数据库,所有操作都在内存上完成,内存的访问速度本身就很快 数据结构 键值对是按一定的数据结构来组织的,操作键值对最终就是对数据结构进行增删改查操作,所以高效的数据结构是Redis快速处理数据的基础
构造Redis 这种 KV DB,首要考虑: 数据模型 能存什么数据?如用户信息(用户ID、name、age、sex等),通常用 MySQL,在一个用户ID对应一个用户信息集合的场景下,就是KV DB的数据模型之一,也能满足这类存储需求。 操作接口 可以怎么操作数据?如计算多个用户的avg年龄,KV DB则无法胜任。因其只提供了简单的操作接口,并不支持复杂聚合计算。 所以,先搞懂数据模型和操作接口,才能物尽其用。
学习数据结构和算法,并非为了死记硬背几个知识点。而是为建立时间复杂度、空间复杂度意识,写出高质量代码,能够设计基础架构,提升编程技能,训练逻辑思维,积攒人生经验,以此获得工作回报,实现你的价值,完善你的人生。 掌握数据结构与算法,看待问题的深度,解决问题的角度就会完全不同。
HttpServlet为什么要实现serializable?
通过注解或servlet声明都能控制 servlet 容器如何提供 servlet 实例。
Servlet的生命周期
这么多日志级别(log levels),编程新手们到底该如何选用?
阿里四面:Spring Exception的原理你精通了吗?
别小看Spring过滤器,这些知识点你必须得掌握!
别小看Spring过滤器,这些知识点你必须得掌握!
模型设计,DDD 分两阶段,战略设计和战术设计。
Java类的初始化和清理
Java类的初始化和清理
Java类的初始化和清理
Java类的初始化和清理
Java类的初始化和清理
Java类的初始化和清理
Java类的初始化和清理
Java类的初始化和清理
为什么加了@WebFilter注解,Spring却没有给我自动注入该过滤器?
为什么加了@WebFilter注解,Spring却没有给我自动注入该过滤器?
什么,你还在用拼音命名法?
关于Spring注解容器配置的那些事,掌握这几点,不再难!
不讲废话,全程干货,0基础带你学习SpringMVC拦截处理器
Arthas使用
Dependence Inversion Principle,DIP High level modules should not depend upon low level modules.Both should depend upon abstractions.高层模块不应该依赖低层模块,二者都应该依赖其抽象 Abstractions should not depend upon details.Details should depend upon abstractions.抽象不应该依赖细节;细节应该依赖抽象 针对接口编程,不要针对实现编程。
Dependence Inversion Principle,DIP High level modules should not depend upon low level modules.Both should depend upon abstractions.高层模块不应该依赖低层模块,二者都应该依赖其抽象 Abstractions should not depend upon details.Details should depend upon abstractions.抽象不应该依赖细节;细节应该依赖抽象 针对接口编程,不要针对实现编程。
Dependence Inversion Principle,DIP High level modules should not depend upon low level modules.Both should depend upon abstractions.高层模块不应该依赖低层模块,二者都应该依赖其抽象 Abstractions should not depend upon details.Details should depend upon abstractions.抽象不应该依赖细节;细节应该依赖抽象 针对接口编程,不要针对实现编程。
mac系统下没有预装consolas字体,但是在JetBrains的IDE下,一直都觉得consolas字体看的最舒服。安装步骤如下:
OOP三大特性最重要的:多态。 很多程序员虽然在用支持OOP的语言,但却从未用过多态。 只使用封装、继承的编程方式,称为基于对象(Object Based)编程 只有加入多态,才能称为OOP 没写过多态,就是没写过OO代码。 正是有了多态,软件设计才有更大弹性,更好拥抱变化。
Java的Set转成逗号分隔的字符串
面向对象关键在于结构的组合,而函数式编程在于函数接口的组合。 将单纯结构化的功能代码,重构成了领域模型+应用层引用的方式。属于领域模型的功能内敛,应用层对这些功能的复杂性无感。同时在多个应用层间,该领域模型的功能都是可以复用的,不管是代码去重还是复用性都有不错的提高
面向对象编程 V.S 函数式编程
像C语言这种结构化编程帮助我们解决了很多问题,但随现代应用系统的代码量剧增,其局限也越发明显:各模块依赖关系太强,不能有效隔离变化。
理解一个实现,是以对模型和接口的理解为前提。 如果想了解一个系统的实现,应从软件结构和关键技术两个方面着手。无论是软件结构,还是关键技术,我们都需要带着自己的问题入手,而问题的出发点就是我们对模型和接口的理解。 了解软件的结构,其实,就是把分层的模型展开,看下一层模型: 要知道这个层次给你提供了怎样的模型 要带着自己的问题去了解这些模型为什么要这么设计 Kafka的实现主要是针对机械硬盘做的优化,现在的SSD硬盘越来越多,成本越来越低,这个立意的出发点已经不像以前那样稳固了。
看接口的一个方法是找主线,看风格。先找到一条功能主线,对项目建立起结构性的了解。有了主线之后,再沿着主线把相关接口梳理出来。 查看接口,关键要看接口的风格,也就是项目作者引导人们怎样使用接口。在一个项目里,统一接口风格也是很重要的一个方面,所以,熟悉现有的接口风格,保持统一也是非常重要的。 Web应用对外暴露的接口:REST API; 程序员写程序时用到的接口:API; 程序员在开发过程中用到的接口:命令行。 一个好的接口设计,无论是最佳实践的引入,抑或是API设计风格的引导,都可以帮助我们建立起良好的开发习惯。 理解一个项目的接口,先找主线,再看风格。
Hystrix是什么 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很常见的。 Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。 Hystrix通过将依赖服务进行资源隔离,进而避免某个依赖服务出现故障的时候,在整个系统所有的依赖服务调用中蔓延,同时Hystrix还提供故障时的fallback降级机制 总而言之,Hystrix通过这些方法帮助我们提升分布式系统的可用性和稳定性
面对一个新项目,如何理解它的模型呢? 要先知道项目提供了哪些模型,模型又提供了怎样的能力。若只知道这些,你只是在了解别人设计的结果,这不足以支撑你后期对模型的维护。 在一个项目中,常常会出现新人随意向模型中添加内容,修改实现,让模型变得难以维护。原因在于对模型的理解不够。 模型都是为解决问题,理解一个模型,需要了解在没有这个模型之前,问题是如何被解决的? 这样,你才能知道新的模型究竟提供了怎样的提升,这是理解一个模型的关键。
Spring Boot Actuator
Spring Boot Actuator
总结 使用Spring Initializr快速创建应用 应用组成分析 开发三部曲 Actuator 配置管理 Profile
总结 使用Spring Initializr快速创建应用 应用组成分析 开发三部曲 Actuator 配置管理 Profile
本文分享了解决Graphviz安装问题的实践经验,针对绘制plantUML类图时出现的报错,提供了两种安装方案。方案1通过Homebrew安装Graphviz,但可能失败;方案2推荐先安装MacPorts,再使用命令`sudo port install graphviz`完成安装。作者为一位资深技术专家,专注于分布式系统与AIGC应用开发,实战经验丰富,更多内容可关注其专栏或访问编程严选网。
《代码重构》之方法到底多长算“长”?