设计模式:Java方法
使用 try-with-resources调用用完需关闭的方法。实现了 AutoCloseable接口(由一个返回为 void的close组成)的资源可以使用try-with-resources方法。 AutoCloseable接口在Java的类库和第三方类库中许多类和接口都有实现或继承,例如 BufferedReader、InputStream、OutputStream 等。 123456789101112// examplestatic void copy(String src, String dst) throws IOException { try(InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dst)){ byte[] buf = new byte[BUFFER_SIZE]; int n; while((n = in.read(buf)) >...
设计模式:Java创建对象
使用静态工厂方法代替构造方法静态工厂方法是一个静态方法,用来生成实例。例如: 12345678910111213// 单例模式public class Dog{ // 私有方法防止在外调用创建实例 private Dog(){ } private static class Inner(){ private static final Dog dog = new Dog(); } public static getInstance(){ return Inner.dog; }} 因为构造方法每次调用都需要新建一个对象,有些情况下不能满我们的要求。 而静态工厂方法生成对象有以下几个好处: 1. 名字更有意义。 from —— 类型转换方法,它接受单个参数并返回此类型的相应实例,例如:Date d = Date.from(instant); of —— 聚合方法,接受多个参数并返回该类型的实例,并把他们合并在一起,例如:Set faceC...
Leetcode 33.搜索旋转排序数组
题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 示例1:12输入: nums = [4,5,6,7,0,1,2], target = 0输出: 4 示例2:12输入: nums = [4,5,6,7,0,1,2], target = 3输出: -1 思路+代码时间复杂度要求是O(log n),也就是二分法。于是我写了一个最基础的二分法…还是用递归.. 1234567891011121314151617181920212223242526272829class Solution { public int search(int[] nums, int target) { if(nums.length==0 || nums==null) return...
Servlet技术
什么是Servet?Servlet (Server Applet),从字面上看,就是Java服务器小程序的意思。它确实就像字面意思一样,是在服务中用于处理网络请求的小程序。 在Web的世界中,客户端会提交各种请求到服务端,服务端如何处理客户端的请求呢? 常规的Java编程方法,好像很难完成这项任务,但是没有事情是难倒程序猿的。 于是,他们设计了Servlet规范,用来处理网络的各种请求。 具体网络的请求呢,无非就是get、post等等,这在HTTP规范系列里面有讲到。 Servlet规范也没有想象中的那么高大上,其实它就是一个Java接口,里面一共就定义了五个方法,如图: 其中: init() 规定了Servet如何初始化。 getServletConfig() 获取Sevvlet的配置。 service(ServletRequest, ServletResponse) 接收到请求怎么处理。 getServletInfo() 提供有关servlet的信息,如作者、版本、版权等。 destroy() 销毁Servlet。 Servlet的运行任何合理实现了Servlet接...
Git 常用命令
Git简介Git是世界上最先进的分布式版本控制系统。 当时是为了帮助管理 linux 内核开发而开发的一个开源码版本控制系统。 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 Git 是分布式版本控制系统,每个人的电脑上都有完整的版本库。 常用命令列表常用1234567891011121314151617181920$ git remote add origin git@github.com:yeszao/dofiler.git # 配置远程git版本库$ git pull origin master # 下载代码及快速合并 $ git add . # 跟踪所有改动过的文件$ git add <file> # 跟踪指定的文件$ git commit -m “commit message” # 提交所有...
TCP/IP协议
起源HTTP的来历CERN(欧洲核子研究组织)的蒂姆 • 伯纳斯 - 李(Tim BernersLee)博士提出了一种能让远隔两地的研究者们共享知识的设想。 最初的设想是通过超文本(HyperText)标记,各地互联连接成可相互参阅的WWW(World Wide Web, 万维网)。 目前WWW构建的关键技术为: 基于SGML(Standard Generalized Markup Language,标准通用标记语言)的HTML (HyperText Markup Language, 超文本标记语言)。 指定文档所在的地址URL (Uniform Resource Locator, 统一资源定位符) 。 各个Web服务器通过万维网互相连接,以 HTML 标准编辑网页(存储信息),用 URL 实现信息的查找,最后通过Web浏览器实现界面的渲染。 如何控制信息的传输?然而,Web服务器有各种各样的类型及硬件接口,显示平台也有各种各样的类型,如何实现平台之间信息的互相交流呢? —— 统一协议控制。答案是通过统一的协议 (Protocol)。 TCP/TP 协议簇TCP/IP ...
Leetcode 岛屿最大的面积
题目给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。 找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。) 示例1:12345678[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,0,0,1,0,1,0,0], [0,1,0,0,1,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,0,0,0,0,0,0,1,1,0,0,0,0]] 对于上面这个给定矩阵应返回 6。注意答案不应该是11,因为岛屿只能包含水平或垂直的四个方向的‘1’。 示例2:1[[0,0,0,0,0,0,0,0]] 对于上面这个给定的矩阵, 返回 0。 注意: 给定的矩阵grid 的长度和宽度都不超过 50。 ...
Markdown文件中添加UML图
UML图简介UML(Unified Modeling Language)是统一建模语言的简写。 它可分为用例视图、设计视图、进程视图、实现视图和拓扑视图,又可以静动分为静态视图和动态视图。静态图分为:用例图,类图,对象图,包图,构件图,部署图。动态图分为:状态图,活动图,协作图,序列图。 其中类图 (Class Diagrams)是用来表示类的内部结构和类与类之间的关系的一种UML。常见的关系有:泛化 (Generalization),实现 (Realization),组合 (Composition),聚合 (Aggregation),关联 (Association),依赖 (Dependency)。 各种关系的强弱顺序: 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖 参考教程 UML类图的绘制及插入我们利用在线的开源工具plantUML实现UML图绘制。 具体的绘制方法可以参考官网plantUML。 然后将网址中生成的UML图片地址插入到Markdown文件中。 参考教程
Leetcode 字符串的排列 (String 练习 03)
题目给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 换句话说,第一个字符串的排列之一是第二个字符串的子串。 示例1:123输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba"). 示例2:12输入: s1= "ab" s2 = "eidboaoo"输出: False 注意:121. 输入的字符串只包含小写字母2. 两个字符串的长度都在 [1, 10,000] 之间 思路 1暴力法,滑动窗口依次判定。 但是超出时间限制! 1234567891011121314151617181920212223class Solution { public boolean checkInclusion(String s1, String s2) { int len1 = s1.length(); int len2 = s2.length(); ...
Leetcode 最长公共前缀 (String 练习 01)
题目编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例1:12输入: ["flower","flow","flight"]输出: "fl" 示例2:123输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。 说明:1所有输入只包含小写字母 a-z 。 思路1暴力法,时间复杂度O(n^3)。 123456789101112131415161718192021class Solution { public String longestCommonPrefix(String[] strs) { String ans = ""; if(strs.length==0) return ans; lable:{ for(int j=0...



