- 博客(49)
- 收藏
- 关注
原创 里氏替换原则以及IS-A关系的判定
相信许多人都看过GoF的设计模式以及各种设计模式的书籍。这些繁复的设计模式究竟是为了什么呢?这些设计模式为的是维护一组原则,这组原则使得代码灵活,可维护,远离所谓的“代码臭味”。 这组原则就是SOLID SingleResponsibilityPrinciple单一职责原则 Open-Close Principle开闭原则 Liskov Substitution Principle里氏替换原则 ...
2021-09-15 17:02:12 222
原创 一种比较直观地推断递归算法时间复杂度的思路
用快速排序举例问题规模为N递归第一层为 N递归第二层 分成两个分区,每个分区的规模为 N/2 (取平均值1/2)...因为递归一直二分,所以,到了logN层,分无可分。每一层其实都要遍历整个数组,所以每一层都是时间复杂度都是O(n),乘以层数,得到总体的时间复杂度O(logn*n)再看看用这种快排的方法解Top K的时间复杂度问题问题规模为N递归第一层为N递归第二次,分成两个分区,取平均值,每个分区为N/2, 但是丢弃一个分区递归第三次次,剩下的分区分成两个分
2021-08-23 23:08:11 118
原创 Raft 实现原理与踩坑指南
前言 因为学习了MIT6.824课程,我对于raft这个分布式算法感到很有兴趣,它宣称自己是容易理解的分布式共识算法,相比之前广泛应用的Paxos,Raft的描述使用的是工程化的语言,引入了RPC,Log等易懂的概念,使得它更加容易被理解。 但是容易被理解并不等于就可以简单地实现正确,实际上,正确地实现Raft ——甚至只是课程中那个非工业级的,完全按照paper中叙述的那种简单版 ——也是极为困难的。因为分布式共识算法中一点细节不对,就可能会对整个系统的安全性和活...
2021-07-27 18:29:11 990
原创 c++在对象的构造时做了什么手脚?——《深度探索c++对象模型》阅读笔记之一
前言 《深度探索c++对象模型》是《c++ primer》的作者Lippman所写的一本书,Lippman从自己参与开发cfront的经历出发,深度剖析了c++中对象的相关特性是如何被实现的。 这本书相对其他的各种c++特性解读,用法,最佳实践的书来说,相对艰深晦涩,其面对的也不是刚入门的C++ 学习者,而是想要了解C++在幕后做了什么的人。 这本书的作用应当是消除程序员脑海中的不确定性,揭开C++对象表面的魔法。一个对象,其定义, 创建,调用方法,析构等等,编译器有为你做了什么,又没做什
2021-07-27 12:17:14 127
原创 LEETCODE解题笔记 —— 29.两数相除
不得使用乘除和mod运算。算出来整数,小数位丢弃这个第一想法就是不让用乘除就用减法嘛,但是如果被除数过大,除数国小,这样效率就会非常慢。要怎么做比较有效率呢?假如我给一个被除数和除数 25 和 7,如何算出 3为商呢?可以借助指数扩大的方法将变量ans初始化为 1每次令 除数 7 乘以 2这时ans也乘以 2然后用除数去和被除数对比,如果除数等于被除数,那么这时的ans就是答案,注意,如果除数*2就直接大于被除数了,那么我们就让被除数减去这时的除数,同时ans我们也记录下来
2021-02-09 12:45:39 172
原创 LEETCODE解题笔记 —— 24.两两交换链表中的节点 & 25. K 个一组翻转链表
常作题,常更新。这类题就是和反转链表有关,有两种思路,一种是维护几个指针顺着链表一个一个做处理。这样效率比较高,但是确实比较繁琐。另一个是用递归的思想来翻转链表,一层层递归下去,在函数出栈的时候让下一个节点的指针指向自己,因为使用了函数栈来记录每个节点的指针,所以代码实际上更简单了。下面要要记录的是翻转链表的一个变体,即在链表中部分翻转链表。下面是 25题的解,25题其实是24题的通用形式。class Solution {public: int coun...
2021-02-09 11:33:06 148
原创 LEETCODE解法笔记 —— 15 三数之和 & 18 四数之和
这个可以扩展到n数之和时间复杂度如果暴力匹配的话可以达到O(N^n)基本上首先需要sort给的数据,这样复杂度就会变成 O(N^(n-1)) ,快速排序的复杂度 O(nlogn)在大O表示法中被省去如果sort之后,整个数据有序了,我们就可以指定前 N-2个,然后通过左右夹逼的方式,找出剩下的2个数,如果时暴力查找的话复杂度时O(n^2),但是现在是O(n)这个实现起来其实很简单,但是一个问题是去重,给出的N元组合可能重复。可以建一个set来暴力去重,但是效率比较低。可以采取和前驱.
2021-02-06 11:06:03 152
原创 LEETCODE解法笔记——7.整数反转 & 9.回文数
这两个一起记录是因为有共性,涉及将一个数字反转,这个操作可以通过转换成字符串来处理,但是这样效率比较低也不是题目本意。题目本意是如何处理数字的溢出。32位整型的范围为 -2^31 ~ 2^31-1 超出这个范围会溢出。先看7的代码:class Solution {public: int reverse(int x) { int rev = 0; while (x != 0) { int pop = x % 10;
2021-02-06 11:04:19 91
原创 配置Nginx反向代理
为了解决跨域问题需要设置反向代理,尽管后端和前端文件皆存放于同一服务器假设后端为django运行于8000端口在nginx中写入 upstream django_server { server 127.0.0.1:8000; keepalive 2000; }在监听端口为80的server项中新建一个location项目 location...
2018-06-30 13:31:06 195
原创 系统分析与设计final report
psp如下Planning10 Estimate10 Development82 Analysis7 Design Spec5 Design Review5 Coding Standard5 Design10 Coding30 Code Review5 Test15 Reporting8 Test Report6 ...
2018-06-30 13:19:59 218
原创 系统分析与设计lesson16作业
对hotelreservation的行为做一个ECB模型用户于boundary交互也就是和网页交互,网页通过controller同获得各种信息,entity类中存储着地点,酒店信息,预定信息,查询这些entity返回信息或者存储controller交给它们的信息。顺序图如下:小组项目逻辑架构中包图和类图的对应...
2018-06-29 22:28:32 239
原创 系统分析与设计lesson13作业
1.软件架构与框架的异同。软件架构和框架某种意义上都是对软件系统的一个草图,他们都描述了系统中各部分的功能行为和程序结构。但是软件架构是纯草图,一般是在概念上构建一个系统的功能与结构。而框架是一种半成品,它已经完成了对一个架构的大致开发活动,提供了相应的接口,开发人员只需要配合框架来进行开发,就可以开发出拥有良好架构的软件系统。2.后端模块的三层架构三层架构的好处是可以明确的知道各个模块的功能是怎...
2018-06-03 20:56:55 263
原创 透视变换的实现以及透视变换矩阵的构造
透视变换(Perspective Transformation)是什么,无需多说,但是一个非常惨痛的现实是如果你想知道怎么样才能在编程做,你只能得到一些调用opencv函数的文章,简直有病,谁不会调用函数,我搜索实现肯定是要找代码参考看下是怎么实现算法的,你调用函数还敢叫自己“实现”?那我用调用Django的模块是不是实现了后端框架的开发啊? 言归正传,要了解透视变换...
2018-05-15 23:50:39 27075 22
原创 Forest应用-期中建模
15331261题目:https://github.com/Owl-Movies-Ticket-System/Dashboard/blob/gh-pages/XX1-Forest%E5%BA%94%E7%94%A8.pdf用例:活动图:领域图:状态图:系统顺序图:
2018-05-12 20:23:00 295
原创 系统分析与设计Homework3
1.storyboard我们项目做的是一个二维码订餐的应用故事板技术可以刻画用户的角色和使用产品的场景,从而非常直观地体现用户以及用户处于的场景。但是故事板如果没做好也可能会误导开发,因为可能会选错了用户角色和所处场景,进而影响产品的质量,以至于不能体现真正的用户需求。对于数据,可以通过问卷调查收集,或者向一些数据调查机构购买,也可以通过其他的产品的使用情况间接了解用户的一些属性。UML:asg-...
2018-04-22 23:24:36 201
原创 系统分析与设计lesson7个人作业
a.b. 导出的脚本:CREATE TABLE `Traveller`( userid INTEGER(40) NOT NULL, E-mail VARCHAR(50), Name VARCHAR(40), PRIMARY KEY (userid));CREATE TABLE `CreditCard`( CardNumber VARCHAR(18) NOT NULL,...
2018-04-22 23:22:47 273
原创 Github使用傻瓜入门
1.什么是Git,Github?请善用搜索引擎。2.如何安装Git? https://git-scm.com/downloads windows下直接下载安装包安装,而Linux下的各大包管理系统都有git,命令行安装就行。 如Ubuntu:sudo apt-get install git3.使用Github前所需的工作 生成ssh key,linux下打开shell,W...
2018-04-12 20:48:15 285
原创 系统分析与设计Homework4
1.用例建模a.b.红色为创新用例,绿色为外部系统c.在考虑功能的时候应当考虑得更加周全,揣摩用户使用产品时的心理和需求究竟是什么,比如在搜索得出的旅馆中选择时,使用排序,除了按照旅馆星级,价格等要素,还应当考虑到用户的省钱的需求,用户期望有优惠活动,可以以更低的价格享受服务,所以在Angoda的排序中能找出有优惠的酒店。d.Name重要性估算How to demo搜索功能408客户输入地点信息广...
2018-04-10 18:44:05 206
原创 系统分析与设计Homework2
简答题:简述瀑布模型、增量模型、螺旋模型(含原型方法)的优缺点。瀑布模型为项目提供了按阶段划分的检查点,每个阶段都有明确定义的产出物。并且每个阶段不重叠,一个阶段完成后只需要关心下一阶段。能保证软甲有较好质量,各种缺陷能及时发现。但是瀑布模型难以应对前期需求不明确或者需求会变化的项目。且只有到后期才能看到产品效果。增量模型人员分配灵活,可以按需求来分配人员,可以较早地将产品发布给客户,并听取反馈,...
2018-03-16 23:53:46 267
原创 系统分析与设计Homework1
1.软件工程的定义:将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中。阅读经典名著“人月神话”等资料,解释 software crisis、COCOMO 模型。 软件危机(Software Crisis)是早期计算机科学的一个术语,是指在软件开发及维护的过程中所遇到的一系列严重问题,这些问题皆可能导致软件产品的寿命缩短、甚至夭折。软件开发是一项高难...
2018-03-10 20:41:34 404
原创 leetcode :50. Pow(x, n)
描述:Implement pow(x, n).思路:题目要求实现pow(x,n)函数,第一感觉是就是循环乘法了。然而毫无疑问会超时。可以转换成二进制然后快速幂。或者递归削减计算的复杂度。但是看到一个迭代的算法,很不错。public double pow(double x, int n) { double result = 1.0; for(int i =
2018-01-30 11:52:00 174
原创 leetcode习题解答:First Missing Positive
难度:Hard描述:Given an unsorted integer array, find the first missing positive integer.For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2.Your algorithm should run in O(n) time
2017-12-30 00:03:03 444
原创 课后习题8.8
8.8.证明 Exact 4 SAT是一个NP完全问题。通过把3sat reduce到4sat实现首先设想有3SAT实例 f1 = (x1 ∨ x2 ∨ x3) ∧(x4 ∨ x5 ∨ x6) .......(xn ∨ xn+1 ∨ xn+2)其中x1~xn+2都是不同的变量,现在我们加入一个新变量a通过这个变量的加入,对f1中的子句进行变形:例如对于第一个子句(x1 ∨ x2
2017-12-27 21:30:35 272
原创 leetcode习题解答:45. Jump Game II
难度:Hard描述:Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that positi
2017-12-21 23:42:00 251
原创 leetcode习题解答:39. Combination Sum
难度:Medium描述:Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique combinations in C where the candidate numbers sums to T.The same repeat
2017-12-16 15:38:13 165
原创 leetcode习题解答:37. Sudoku Solver
难度:Hard描述:Write a program to solve a Sudoku puzzle by filling the empty cells.Empty cells are indicated by the character '.'.You may assume that there will be only one unique solution.
2017-12-16 15:31:24 192
原创 leetcode习题解答:16. 3Sum Closest
难度:medium描述:Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each in
2017-12-09 01:09:24 127
原创 leetcode习题解答: 15. 3Sum
难度:mediumGiven an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set mus
2017-12-03 21:12:13 152
原创 leetcode 习题解答:84. Largest Rectangle in Histogram
难度:hard描述:Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.Above is a histo
2017-11-27 00:00:05 150
原创 leetcode习题解答:72. Edit Distance
难度:Hard描述:Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)You have the following 3 operations pe
2017-11-24 22:10:20 201
原创 Leetcode习题解答:44. Wildcard Matching
难度:Hard描述:Implement wildcard pattern matching with support for '?' and '*'.'?' Matches any single character.'*' Matches any sequence of characters (including the empty sequence).The match
2017-11-23 23:24:26 129
原创 简单阅读Gzip中间件的源码
Gzip中间件实现的代码很短,加上大量注释也才126行。但如果要看懂它在做什么,事先要看Negroni的源码,来理解这些代码的意义。Negroni的代码也不长,但是构造很巧妙,一环扣一环,需要一些思考来知道他在干什么。首先,New()返回的Negroni结构本身是一个包含所有中间件的struct。而中间件(middleware)是什么呢?他是一个实现了ServeHTTP方法的结构,是一
2017-11-23 19:58:22 299
原创 leetcode习题解答:10. Regular Expression Matching
难度:Hard描述:Implement regular expression matching with support for '.' and '*'.'.' Matches any single character.'*' Matches zero or more of the preceding element.The matching should cover t
2017-11-14 23:45:28 133
原创 leetcode习题解答:6. ZigZag Conversion
难度:MEdium链接描述:The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
2017-11-11 22:33:00 192
原创 简单阅读golang的net/http包和Negroni的源码
在没文档指导下阅读源码比较麻烦。我们知道,golang比起c/c++来说,已经内建了http服务的功能,而且因为golang的特性,性能不低。下面通过阅读net/http的部分源码来看看它是怎么工作的:func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr,
2017-11-08 19:32:10 392
原创 leetcode习题解答:32. Longest Valid Parentheses
难度:Hard链接描述:Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.For "(()", the longest valid parentheses
2017-11-03 01:22:56 136
原创 leetcode习题解答:24. Swap Nodes in Pairs
难度:Medium链接描述:Given a linked list, swap every two adjacent nodes and return its head.For example,Given 1->2->3->4, you should return the list as 2->1->4->3.Your algorithm should us
2017-11-02 13:08:40 107
原创 leetcode习题解答:11. Container With Most Water
难度:Medium链接描述:Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (
2017-10-26 13:21:33 166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人