小世界
这是一个私人小博客,在这个博客中,我会记录在学习过程中遇到的新技术、对所遇到问题的思考与见解,搬运优秀的文章,主要侧重于记录“思想”,而一些琐碎的知识例如程序报错等,我会放到我的CSDN博客上(在推荐链中)。我会对搬运来的文章进行一定的修改使之便于理解,所以如果文章出了什么问题一般是我的原因,如果发现了问题欢迎大家联系我。我也会记录生活中的一些故事,在这里大家可以看到一名普通的学生成长为一名优秀的架构师,最后成为技术总监的历程(笑)。欢迎大家来参观、学习、交流。
面向对象概念 面向对象概念
 概述什么是面向对象(Object-Oriented,OO)观点?为什么一个方法被认 为是面向对象的?什么是对象?在20 世纪80 年代和90 年代,面向对象 概念赢得了广泛的传播,在那时,关于这些问题的答案有很多不同观点, 但是今天关于
2020-06-08
UML简介 UML简介
 简介统一建模语言(Unified Modeling Language,UML)是“绘制软件蓝图的标准化语言。UML 用来可视化、描述、构造和文档化软件密集系统的 人工制品”[Boo05]。如果了 解 UML 的词汇(图示元素和它们的含义
2020-05-31
分支开发工作流 分支开发工作流
Git 工作流简介概述工作流有各式各样的用法,但也正因此使得在实际工作中如何上手使用增加了难度。这篇指南通过总览公司团队中最常用的几种 Git 工作流让大家可以上手使用。 在阅读的过程中请记住,本文中的几种工作流是作为方案指导而不是条例规定
2020-05-28
随机选择算法 随机选择算法
问题如何从一个无序数组中求出第 K 大的数(为了简化讨论,假设数组中的数各不相同)。 例如,对数组 { 5,12,7,2,9,3 }来说,第三大的是 5,第五大的是 9 随机选择算法概念最直接的想法是对数组排序,然后取出第 K 个。这样做法
活用递推 活用递推
许多题目需要细心考虑是否可能用到递推关系 例如就一类涉及序列的题目来说。假如 序列的每一位所需要计算的值 都可以通过 该位左右两侧的计算结果得到,那就可以考虑所谓的“左右两侧的结果”是否可以通过递推进行预处理来得到,这样在后面的使用中就可以
打表 打表
打表是典型的 空间换时间,一般指将所有可能需要用到的结果事先计算出来存入表,后面如果需要就直接查表。 常见方法有以下几种: 程序中一次性计算所有需要用到的结果,之后需要用到直接取 最常用的方法 如一个大量查询 Fibonacci 数 F
Two Pointer:快速排序 Two Pointer:快速排序
首先解决的问题快速排序平均时间复杂度 O(nlogn) 它的实现要先解决解决了这样的一个问题: 对一个序列 A[1]、A[2]、……、A[n]。调整序列中元素的位置,使得 A[1](原序列的 A[1],下同)的左侧所有元素都不超过 A[1
Two Pointer Two Pointer
很少有教材拿出来讲,因为Tow Pointer不像是一种算法,更像是一种编程思想 广义上的 Two Pointer 是利用问题本身与序列的特性,使用下标 i, j 对序列进行扫描,以较低复杂度(一般是O(n))解决问题 给出以下两个例子 找
Two Pointer:归并排序 Two Pointer:归并排序
归并排序是一种基于“归并”思想的排序方法,本节主要介绍其中最基本的2-路归并排序。 2-路归并排序的原理是,将序列两两分组,将序列归并为 n/2 个组,组内单独排序;然后将这些组再两两归并,生成 n/4 个组,组内再单独排序;以此类推,直到
二分:快速幂 二分:快速幂
问题 给定三个正整数 a、b、m( a<$10^9$,b<$10^6$,1<m<$10^9$),求 $a^b$ % m 的值 一般写法为了防止溢出使用long,Java代码,long为64位,等同于 C语言 的 l
单进程死锁示例 单进程死锁示例
当无 IO Buffer 时有可能出现单进程死锁 进程1 向 IO 请求数据,并告诉IO设备 返回的数据 应该送到 进程1 的哪个地址 IO设备去IO数据了,进程1就会阻塞等待,这时如果 进程1 被挂起,IO设备并不知道 进程1 被挂起
2020-05-15
二分:寻找有序数列第一个满足某条件的元素的位置 二分:寻找有序数列第一个满足某条件的元素的位置
问题有这样的问题:如果递增序列 A 中的元素可能重复,那么如何对给定的欲查询元素x,求出序列中第一个大于等于x的元素的位置L以及第一个大于x 的元素的位置R。 序列中第一个大于等于x的元素的位置先看第一问 例如对下标从0开始、有5个元素的序
1 / 5