- 博客(31)
- 资源 (2)
- 收藏
- 关注
原创 DayXX 系统健壮性设计
代码评审烂代码的标准 不遵守diam规约 代码像迷宫 代码流程复杂或不清楚 代码执行效率低 bug 多 烂代码的后果死循环: 不断出现的坑 -> 进度紧张 -> 到处灭火对自己的要求1.写出计算机能理解的代码2.写出自己未来可以理解的代码3.写出别人可以自我理解的代码CR 常用的工具PhabricatorGerritCheckStyle实战健壮性健壮性的定义:在遇
2021-11-30 15:59:04
380
原创 DAY XX Redis 分布式锁
Day XX 分布式锁单个服务加锁:使用 synchronized 或者 lock分布式架构:多个服务同时运行时,需要对这些服务进行加锁。Redis 分布式锁原理使用到的命令setnx 加锁expire 设置锁过期时间使用 set 同时设置过期时间set lock "1234" EX 100NX使用 lua 脚本eval "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first
2021-11-23 17:53:35
589
原创 Day XX 用户系统实现
JWTJWT (Json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON开放标准的一种间接的,自包含的方法用于通信双方之间以JSON对象的形式安全的传递信息。因为数字签名的存在,这些信息是可信的,JWT 可以使用HMAC算法或者RSA的公私钥进行签名。JWT 的最大特点:可以签名。所以可以减少令牌校验的次数。签名:作用是防止header 和 payload 被篡改。签名是加密的。JWT 的组成Header包含:token类型 和 加密算法P
2021-11-23 17:15:58
138
原创 Day XX 单元测试
单元测试的原因测试的目的单元测试是对软件组成单元进行的测试。其目的是检验软件基本组成单位的正确性。要先做单元测试,然后再集成测试。否则集成测试全是 bug 。单元测试的目的: 验证软件的正确性,稳定性 找出程序中的 bug 单元测试的益处:提高软件之类;促进代码优化;提升研发效率;单元测试的进行时间边写码 边测试 Unit Test最后集成测试:性能测试 + 稳定性测试单元测试的内容单元测试的 AIR 原则A:自
2021-11-23 15:52:52
243
原创 DAY XX OAuth
Day XX OAuth2OAuth 的概念OAuth 是一个协议。具体的实现有JAVA Python 等方法。其作用是用来授权某个操作。拿到这个授权之后可以有操作的权限。OAuth 与 密码的区别OAuth 是短期的,自动失效;OAuth 可以撤销;OAuth 有权限范围OAuth 的结构OAuth 分为Resource Owner资源拥有者,一般指用户Client需要请求资源的服务Authorization Server能够纷发 t
2021-11-23 14:59:37
337
原创 Day XX 集合与并发
集合规约JAVA 中集合之间的相互关系如下所示:Collection 是总头领。Set, List, Queue 都继承自 Collection。数据结构数据结构定义:逻辑意义上的数据组织方式及其相应的处理方式。数据组织方式:线性结构;树结构;图结构;哈希结构;处理方式:增删改查数据结构的优化与运算规模有关,也与调用频率有关。所以具体采用什么数据结构,要集合实际情况。HashMapHashMap 的基本概念HashMap 具有多个slo
2021-11-12 15:01:25
741
原创 Day11 JAVA 坑
Day11 JAVA 避坑指南摘要本文关于 JAVA 中出现的坑进行说明。浮点数处理背景数的表示范围是有限的。整型可以精确的表示一个数据,浮点数近似表示一个数据???单精度的数据存储格式使用浮点数可能导致的结果:精度丢失。单精度数据的存储格式是以 有效数字 + 指数 的方法存储的。浮点数避坑方法 浮点数之间的等值判断,基本数据类型不能用 == 来比较。包装数据类型不能用 equals 来判断。 BigDecimal 的等值比较应使用 compa
2021-11-10 16:16:27
483
原创 Day 10 编码规范
摘要本文主要关于写码时需要遵守的约定。这些约定能够提高团队协作,并降低维护成本。背景代码是不断成长的,在成长的过程中,有逐渐变得混乱的趋势。所以需要通过遵守编码公约尽量降低混乱的增加速度。编码规约的最主要目的是为了方便协作(共同开发,后期维护)好的编码规约的作用: 减少代码维护成本; 改善可读性 提高团队开发的合作效率 锻炼出更严谨的思维 代码模式与命名风格命令体现代码元素特征 抽象类命名使用 Abstract 或 Base
2021-11-07 14:43:47
110
原创 Day 9 技术选型
摘要本文主要用来描述哪些方面需要选型以及如何选型。背景选型的目的 降低开发成本 提高开发效率 技术架构的分类单体应用缺点: 各模块之间耦合。任何一个更新可能会造成其它模块的 bug 不利于扩展。只能进行单维度扩展;当引入新的框架或语言时,需要重构所有业务模块。 SOA缺点: ESB 成为 bottle neck 服务的拆分粒度太大。 微服务将一个功能变成一个模块;是去中心化的SOA拓展。在设计上更多的是自
2021-11-05 12:50:11
151
原创 Day8 项目结构
摘要本文主要关于项目结构及maven概述。目的在于搭建起整个项目的模块骨架,并且导入 jar 依赖。项目分层分层概括凡是整体项目,都需要进行分层。分层之后的效果:隐藏下层实现逻辑。分层的目的: 提高复用性:分层之后每个模块之间是松散状态。每个模块可被别的项目使用。 有利于扩展:直接增加某个模块即可 有利于维护:当某个模块不工作或者需要替换时,可直接停掉此模块,并用另一个模块进行替换。 推荐的分层结构通用的分层模式:MVC这样分层可以更好的
2021-11-03 15:04:01
1291
原创 Day5 异常与日志
摘要本文注意关于 JAVA 异常和日志的使用方法及注意事项。概述JAVA 中的异常处理,比别的语言都要优秀。使用异常和日志的目的是为了便于后续的维护。JAVA 中的异常要求: 异常应当描述导致当前异常发生的原因 需跟进异常栈快速定位到异常发生的位置 结合异常描述和异常栈解决异常 异常的分类ErrorExceptionRuntimeExcepotion unChecked可预测异常;需捕捉异常;可投出异常;Checked
2021-10-31 17:57:40
126
原创 Day4 MySQL 框架学习
摘要本文主关于 MySQL 框架的问题。主要涉及 InnoDB 引擎。MySQL 目录结构研究 MySQL 的目录,主要目的在于研究配置文件、数据目录、日志文件等。在 Linux 操作系统下,MySQL 目录结构如下:配置文件:/etc/my.cnf这里包含所有 MySQL 的配置参数。如果要修改 MySQL 配置参数,则需要重启 MySQL数据目录:/var/lib/mysql这里包含 MySQL 的表文件。每一个 DB 对应一个文件夹。MySQL 逻辑
2021-10-30 17:24:19
122
原创 Day3 MySQL
摘要数据库设计同样是项目进行过程中的一个重要的部分。本文主要研究数据库设计的规约和方法。背景了解数据库设计规约的目的:主要为了方便SDE之间的沟通交流,并且为了防止踩了某些坑。设计规约与踩坑规约表、字段的命名规则 小写字母,数字,下划线 禁止使用数字开头 不使用复数名词 禁用保留字 是与否概念的字段,必须使用 is_XXX 的方式命名 表中必备三个字段idcreate_timeupdate_time表名
2021-10-29 12:47:46
117
原创 Day2 UML 图
摘要Day2 主要任务是画出系统用例图,状态图,时序图,类图,活动图。主要训练对模块的划分以,对OOD的理解。用例图用例图为了表现系统能够为某个用户提供什么样的服务。让SDE能够理解需要开发哪些服务以及这些服务之间的关系。用例图包括的元素: 参与者; 用例; 关系; 参与者参与者是系统外的一个实体,它以某种方式参与到用例的执行过程中。参与者分为以下几类: 真实的人:系统用户 其它系统 一些运行的进程(比如说时间,到了某个
2021-10-28 16:45:07
142
原创 Day 1 系统设计先导
摘要在开发一个项目之前需要首先清楚地明白自己需要做什么。需要达到什么样的效果,采用怎样的技术路线去实现自己想要的效果。这就需要通过对需求的分析,得到项目的架构Situation 需求分析人性是提出需求的本源,通过分析 人性 来抓住 用户诉求。需求分析角度明确以下三方面: 边界:哪些是需要自己做的,哪些是不需要自己做的。 用户故事:能够以用户的角度,结合不同的用户场景,走完所有用户诉求。 用户路径:实现某种功能所需要的步骤。用户路径尽可能的短。 需求分
2021-10-27 12:16:53
93
原创 123
处理数据的原因是为了让数据更能够符合模型的计算。比如归一化。回归问题使用 MSE :原因是用极大似然拟合正态分布。正态分布在这里有什么关系么?cross entropy 也是通过极大似然推出来的?loss function 极大似然 最大后验???最大后验后面会加正则项而已多个二分类和用 softmax ????多分类的 cross entropy ????前馈神经...
2019-01-04 02:36:06
432
原创 Neural Network 初步
Neural Network 基础理论neural network 实际上是许多 LR 组成的网络。当neual network 层数特别多时,可以称为是 deep learning。neural network 是 deep learning 的基础,而deep learning 又是 cnn 的基础。使用 neural network 或者 deep learning neural netwo...
2018-07-15 05:15:15
356
原创 Logisitc Regression 预测员工离职率
Logistic Regression 基础Logistic Regression 沿用了 Linear Regression 的思路和想法,通过使用线性关系拟合得到真实的函数关系。同样的,如果模型结果表现不好,可能是超参数没调好,或者是训练集的特征没处理好(可以多构造一些特征,将线性特征构造成为非线性特征之类的)。由于用Linear Regression 求得的解范围是 正无穷 到 负无穷,而最...
2018-07-15 01:57:00
1607
原创 Linear Regression 进行房价预测
Linear Regression 理论基础Linear Regression 认为各个feature之间的关系是线性的,通过修正线性相关的系数,来拟合整个变化趋势。之所以采用 Linear Regression 并认为特征之间是线性关系,是因为线性关系拟合起来比较简单,是最基础的方程,可以由这个方程得到许多高级的复杂的方程。而且也可以更有效防止 overfitting 的产生。如果想要拟合二次方...
2018-07-14 03:41:38
552
原创 Naive Bayes 手动实现
Naive Bayes 求的是后验概率。后验概率的定义:P(B|A) 已知A发生后 B 发生的概率。其理论基础如下公式所示:故手动实现需要得到:1. 邮件中出现的单词及其出现的次数 2. spam / ham 单词的总个数这里加入了Laplace smoothing 修正,其原理如下所示:有两种方法可以实现,第一种方法是利用dict; 第二种是模拟sklearn 里的model利用dict:# ...
2018-07-14 01:00:22
398
原创 KNN 手动实现
KNN 算法KNN 的实质是根据 预测值 与训练集之间的距离来进行分类。下面代码使用 欧氏距离来表示点集之间的距离,具体代码如下:class Knn(): def fit(self, X, y): self.X_train = X self.y_train = y def predict(self, X, k): ...
2018-07-13 12:22:29
486
原创 正则化 与 cross validation
在所有机器学习的问题上都要采用以下方法Overfitting:得到的模型随着训练轮数或者别的超参数的改变,在 training data 上的错误率肯定是越来越低的。但是这么做会出现overfitting的情况。为了解决这个情况,从 training data 中分出来一个 validation set。在每次训练之后,看一下在 validation set 上的表现。如果在train...
2018-07-09 06:35:21
276
原创 ML 学海拾贝 07/03/2018
auto encoder 优点back-propagation 的算法?greedy method?NN 的中间层是检测什么的?
2018-07-04 07:46:34
160
原创 Python in ML —— 基本数据结构
Listlist能够进行的操作在list中添加循环:a = [i for i in range(10)] # 利用这个for循环向list中添加元素添加元素:添加单个元素a = [1,2,3,4,5]a.append(7)添加另一个list:a = [1,2,3,4,5]c = [7,8,9]a.extend(c)# 或者直接用 + a + c删除元素:按照下标删除元素a = [1,...
2018-07-03 06:50:21
353
原创 算法爬坑记——二分法
二分法:二分法的时间复杂度是 O(logn) 。其原理是采用一个时间复杂度为O(1)的操作,将问题分为两半之后,只取其中一半。这样就减小了问题的规模。二分法属于P 问题,即能够在多项式时间复杂度内解决的问题。与P问题相对应的是NP 问题,定义为无法用多项式时间复杂度解决的问题。NP 问题一般是指只能用深度优先搜索解决的问题。二分法可以用递归或者非递归实现。算法过程中是否采用递归,需要具...
2018-06-16 03:22:16
284
原创 Linux 与 Unix
Unix 就像一种API。Unix设计的目的是 Multi users Multi tasks。使用Linux的原因是,这些程序可以在任意OS中运行。如果用win的话,只能在win中运行。Linux kernel中只存在file或者process。Windows中目录和Linux中目录的区别?shell 出现的目的是为了提升用户体验。比如移动鼠标操作就会通过shell 传递给kernel。wind...
2018-06-16 03:21:56
184
原创 接口(Interface)与抽象类(abstract)
接口 (Interface)在Java 中用 implement 来做。接口中的方法只有定义,没有实现,而且默认都是public 的形式。接口中不能定义变量。可以定义常量。Java中的interface:代码中的 List , Set, Map, Queue 叫做 interface。而后面的 ArrayList, LinkedList 则是这个interface的实现方式。所以前面一定是 Lis...
2018-06-15 05:12:21
354
原创 Linux 与 Unix(2)
编译型语言与解释型语言程序如果需要运行,必须将代码翻译成机器能够识别的语言(机器语言)。编译型语言在程序执行之前,会有一个编译的过程。这个过程会将代码翻译成机器能够识别的语言,然后再运行。这个编译的过程只需执行一次,之后再次执行相同的程序就不需要再次翻译。而解释型语言是在程序运行的过程中对代码进行解释,对每一行代码进行解释然后再运行。所以每次程序运行的时候,都要重复解释。引用知乎上一个答案,编译型...
2018-06-13 03:56:12
176
原创 排序算法——快排,归并
快速排序:从数组中随机选一个数,比这个数大的放右边,比这个数小的放左边。快排中的一个细节:如果一个数等于P的时候,既可以在左边又可以在右边。这么做是为了避免如果数组中所有的数都一样,则会造成数据的不平衡。快排的目的是能够使得左边和右边的数都差不多,这样的话时间复杂度就不会退化到O(N^2),而是O(N * logN)。这里是用递归实现的。但是这里并不需要回头。那么为什么需要递归呢?原因是循环的时候...
2018-06-12 11:58:50
227
原创 时间复杂度与空间复杂度
时间复杂度:时间复杂度和程序执行的语句次数有关。程序执行的语句数越多,那么耗时越长,时间复杂度越高。但是时间复杂度是一个对大规模数据的估计,所以只在乎最高次幂,不管系数和低次幂。常见的时间复杂度如下表所示:时间复杂度的推导:能够节省时间的巧妙算法,其本质都是通过一个时间复杂度是O(1)的操作,将原来规模为N的问题变为规模为N/2的问题。所以能够推导出二分法的时间复杂度为:T(n) = T(n/2)...
2018-06-11 12:39:34
172
原创 堆Heap与栈Stack
栈Stack:每个进程在产生之后,OS会自动给这个进程分配一个存储进程中参数,局部变量,返回值的内存空间。这部分内存空间叫做栈。这个内存空间是固定大小的。所以在递归的时候,我们不断调用函数本身,就会在栈中不断添加函数的传入参数,局部变量,返回值。当调用函数次数非常多时,会沾满整个栈的空间,造成 stack overflow的错误。堆Heap:如果在进程中需要创建别的容器(比如创建一个数组),那么这...
2018-06-11 09:55:00
153
Concepts of Programming Languages Robert W. Sebesta 11th
2017-08-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人