51dev.com IT技术开发者社区

51dev.com 技术开发者社区

三分钟带您搞懂装饰模式

三分钟带您搞懂装饰模式

全文:959字,预计阅读时间:8分钟  装饰模式(Decorator)动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更加灵活。  这里可以举一个生活中的例子,一个蛋糕,在蛋糕上摆上水果,这个蛋糕就变成了水果蛋糕,给这个水果蛋糕插上蜡烛,它就变成了一个生日蛋糕。(这是HeadF...

一篇文章带您搞懂观察者模式

一篇文章带您搞懂观察者模式

  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自动地更新自己。  根据依赖倒置原则可知,我们希望模块与模块之间不是直接耦合到一起,而是依赖于抽象,所以观察者模式抽象出了Subject和Observer...

趣谈设计模式——责任链模式

趣谈设计模式——责任链模式

  责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。  让我们去...

趣谈设计模式——组合模式

趣谈设计模式——组合模式

Composeobjectsintotreestructurestorepresentpart-wholehierarchies.Compositeletsclientstreatindividualobjectsandcompositionsofobjectsuniformly.将对象组合成树形结...

Servlet还有学习的必要吗?(手工搭建Servlet)

Servlet还有学习的必要吗?(手工搭建Servlet)

  在初学Javaweb的时候,就曾听到过这样一种说法:  javaWeb的演变过程大概可以分为4个阶段:jsp+Servlet+jdbcspring+struts2+hibernate(ssh)spring+SpringMVC+mybatis(ssm)微服务阶段。  所以学习Javaweb,可以从...

为什么我的tomcat启动不起来?

为什么我的tomcat启动不起来?

  tomcat安装好了,准备部署Web项目了,启动tomcat,发现没有反应。  虽然显示了Tomcatstarted。但是这个started不等同于success,当我们打开浏览器访问8080端口的时候,却发现我们的tomcat并没有被启动。网上大多的教程都是教我们去查端口占用,或者是配置jdk...

图解leetcode —— 128. 最长连续序列

图解leetcode —— 128. 最长连续序列

每道题附带动态示意图,提供java、python两种语言答案,力求提供leetcode最优解。给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。输入: [100,4,200,1,3,2]输出:4解释:最长连续序列是[1,2,3,4]。它的长度为4...

这可能是最容易入门的socket教程了

这可能是最容易入门的socket教程了

  如今,网络编程已然成为了一个后端开发工程师需要具备的核心技能之一。因此,该博客力求提供最简单、通俗的描述方式,来描绘网络编程中常见的知识点,同时附带代码示例,后期会加上具体的抓包分析,实际项目、框架案例,希望可以和大家共同探索网络世界。  在计算机通讯领域,socket被翻译为“套接...

图解leetcode —— 124. 二叉树中的最大路径和

图解leetcode —— 124. 二叉树中的最大路径和

前言:每道题附带动态示意图,提供java、python两种语言答案,力求提供leetcode最优解。描述:给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例1:输入:[1,2,3]1/23输出:6示例...

图解leetcode —— 395. 至少有K个重复字符的最长子串

图解leetcode —— 395. 至少有K个重复字符的最长子串

前言:每道题附带动态示意图,提供java、python两种语言答案,力求提供leetcode最优解。描述:找到给定字符串(由小写字符组成)中的最长子串T, 要求 T 中的每一字符出现次数都不少于k。输出T 的长度。示例1:输入:s="aaabb",k=3输出:...

区域和检索

区域和检索

描述:给定一个整数数组 nums,求出数组从索引 i 到 j  (i ≤ j)范围内元素的总和,包含 i, j 两点。示例:给定nums=[-2,0,3,-5,2,-1],求和函数为s...

除数博弈

除数博弈

描述:爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0<x<N且 N%x==0 。用N-x 替换黑板上的数字N。如果玩家...

括号生成

括号生成

描述:给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。示例:例如,给出 n=3,生成结果为:["((()))","(()())","(())()","()(())","()()()"]思路:这道题可以用回溯法解决,即穷举出所有可...

你真的了解数组吗?

你真的了解数组吗?

数组,应该是我们每个人学习编程时接触的第一个数据结构。它很简单,但是却很重要。很多高级的数据结构,其实都是由数组组成的,或者说是用数组来实现的。比如跳跃表、散列表是由数组+链表组成的。堆、完全二叉树、图(邻接矩阵存储)都可以用数组来实现。所以说学好数组,就等于为你学习高级的数据结构打下了坚实的基础。...

合并两个有序数组

合并两个有序数组

  给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。初始化nums1和nums2的元素数量分别为m和n。你可以假设nums1有足够的空间(空间大小大于或等于m+n)来保存nums2中的元素。输入:nums1=[1,2,3,0,0,0],m=3...