孤尽训练营打卡日记day28--第四周总结 前言 光阴似箭,日月如梭。转眼已经过去了一个月,孤尽训练营第四周也已经结束,今天我们一起来对这一周的内容做个简单回顾。第一次课 单元测试和系统安全规约什么是单元测试?对软件组成单元进行的测试,其目的是检验软件基本组成单位的正确性。测试对象是软件设计的最小单元:模块,又称模块测试为什么要单元测试?提高软件质量 促进代码优化 提升研发效率怎么单元测试?借助常用的单元测试框架,如 Junit、SpringTest等系统安全...
孤尽训练营打卡日记day27--分布式锁 前言 随着公司业务的扩展,单实例逐渐都演变成的多实例,在多实例的情况下,怎么处理并发呢? 单实例加锁:synchronized关键字、Semaphore、ReentrantLock,或者我们也可以基于AQS定制化锁 多实例加锁:?什么是分布式锁 单机部署的情况下,锁是在多线程之间共享的,但是分布式部署的情况下,是多台机器,应用级锁。也就是说锁是多进程之间共享的。那么分布式锁要保证锁资源的唯一性,可以在多进程之间共享。...
孤尽训练营打卡日记day26--redis分布式锁 setnx 加锁expire设置超时时间加锁两个条件1、能加锁2、形成锁的互斥问题:setnx是两个命令,如果执行了setnx,expire失败 ,就会造成锁无法释放解决:使用set key value [ex ][nx]使用 lua 脚本执行,两个命令是个原子操作锁过期问题:线程一持有锁超时 20秒,执行10秒的时候,遭遇fullgGC ,SWT导致任务挂起,超过20秒,线程二开始执行,fullGC结束,线程一继续执行,导致数据混乱1、增加乐观锁,线程一
孤尽训练营打卡日记day25--JWT初识 前言 在前面的学习中,我们已经学过了OAuth2,是一种第三方登录授权协议,今天我们要学习的是JWT,也是一种授权协议。为什么已经有OAuth2了,还要学习JWT呢,我们一起进入今天的学习。什么是JWT Json web toke(JWT)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC7519)定义了一种简洁的,自包含的方法用于通信双方之间以JSON对象的形式安全传递信息。因为数字签名的存在,这些信息是可信的,JWT可以使用HMAC算法或者是...
孤尽训练营打卡日记day24--系统安全规约 前言 现在是大数据的时代,数据是非常重要的,一张照片就有可能泄漏了你的位置信息。在我们的系统中,安全一直是老生常谈的话题,怎么维护我们的系统安全,在我们日常开发中,怎么避免出现安全问题,我们跟着Joel老师继续学习系统安全规约。权限控制之越权访问漏洞越权访问(Broken Access Control,简称 BAC)是web程序中一种常见的漏洞,由于其存在范围广、危害大,被 OWASP 列为Web应用十大安全隐患第二名。垂直越权访问:拥有...
孤尽训练营打卡日记day23--单元测试 前言 在我们的开发流程中,需求调研 -> 项目立项 -> 设计产品 -> 开发 ->测试 -> 发布,测试也是非常重要的一环,只有经过严格测试的产品,才能投入使用。如果一个产品不经过测试,直接上线是有非常大的风险的,出现问题会导致公司的名誉受损,如三星的note 7 爆炸时间。今天我们跟着Joel老师一起学习一下单元测试。软件测试 指的是通过手工或工具对被测对象进行测试操作 以此来验证实际结果与预期之间是否存在差异 ...
孤尽训练营打卡日记day22--OAuth2实战 前言 在前面的笔记分享中,我们知道了OAuth 2是什么,他是一个第三方登录的授权协议。为什么要使用 OAuth 2,因为现在是分布式架构,对客户来说,是一个系统,但是后台实现是多个微服务,客户一次登录,应该要能访问到不同的微服务。今天我们接着学习 OAuth2 的实战。工程结构; 授权服务器:颁发和验证令牌 提供需要令牌才能访问的服务依赖<dependency> <groupId>org.springfra...
孤尽训练营打卡日记day21--第三周总结 前言 半城烟沙,兵临城下,金戈铁马,为谁争天下。有人说,杀人太多,就会失去自我,而总是着急赶路,就会错过风景。今天一起来回顾一下我们第三周学了那些内容。第一次课无尘老师给我们介绍了一些java中容易踩的坑。Java中浮点数据的处理 浮点数在计算机中是一个近似的数,因为计算机本身是二进制的,在十进制转二进制的时候,有一些数会出现无限小数,所以浮点数在Java中是个近似数。所以我们在使用金额计算的时候,要使用int,如果一定要使用小数的话,使用BigDecim...
孤尽训练营打卡日记day20--HashMap 源码浅析 前言 在前面的文章里,我们知道了HashMap 是什么,今天跟大家分享下HashMap的源码关键源码:常量/*** The default initial capacity - MUST be a power of two.*/static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16/*** The maximum capacity, used if a higher va...
孤尽训练营打卡日记day19--OAuth2基础 前言 我们现在的系统架构都是微服务的架构,也就是说,一个完整的功能,是由后台多个工程一起完成的。那么就会有一个问题,明明是多个工程,但是我们只需要登录一次,这是怎么实现的呢?今天我们跟着刘雪松老师一起学习一下OAuth2第三方登录授权协议OAuth2 是什么? OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。比如在微信上打开京东的小程序,这个时候...
孤尽训练营打卡日记day18--HashMap初识 前言 Map是我们平时开发时候经常用到的一种数据结构,我们都知道他是一种 <key,value> 的模型。Map中最常用的是HashMap,因为他是线程安全的,为什么他是线程安全的呢,他和Map的区别在哪呢,为什么线程安全推荐使用CurrentHashMap,今天我们一起来学习一下HashMap的源码。HashMap是什么?HashMap是一种常用的java容器,它继承了AbstractMap,实现了Map,Cloneable,Serializable; HashMa...
孤尽训练营打卡日记day17--面向对象 前言 Java是一门面向对象的语言,那么问题来了,有人会问,老师,我没对象,我该怎么办,老师会发么还是要自己带,此对象非彼对象,今天我们一起来学习一下面向对象的编程思想。面向对象编程(Object-Oriented Programming,OOP) 是划时代的编程思想变革,推动了高级语言的快速发展和工业化进程。OOP 的抽象、封装、继承、多态的理念使软件大规模化成为可能,有效地降低了软件开发的成本、维护成本和复用成本。面向对象编程思想是大型软件的开发就像搭积木一样...
孤尽训练营打卡日记day16--Java代码避坑指南 前言 在我们日常开发中,代码有很多细节都是我们不曾注意的,比如金额应该使用 double 还是 float,或者是int;时间格式化里的yyyy代表什么,使用 大写YYYY 行不行。很多东西我们一直都是看前人这么写的,我们就跟着写,没考虑过为什么。今天,跟着无尘老师我们一下学习一下代码中一些常见的坑。浮点数据处理浮点型:double、float浮点数是属于有理数中某特定子集的数字表示,在计算机中用以近似表示任意某个实数整型:int计算机中...
孤尽训练营打卡日记day15--项目实战乘客管理爬坑 前言 即使是在老师给了基础代码的情况下,还是走了不少弯路,特此记录问题1、ticket-service 报 异常Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failureThe last packet successfully received from the server was 2milliseconds ago. The last p...
孤尽训练营打卡日记day14--第二周总结 前言 光阴似箭,日月如梭!跟着孤尽老师学习的第二周也即将结束,训练营的日子也已经过去了一半。古人云,学而不思则罔,思而不学则殆。今天我们来对第二周的学习做个总结。内容回顾day08首先,孤尽老师对上一周的作业做了一个标准解答:用例图核心:用户 + 行为,有哪些用户角色,使用了系统什么功能 类图核心:模型的抽象、模型之间的关系 时序图核心:对象之间的协作、随着时间线,做了什么 状态图核心:有哪些状态、什么条件触发状态变化 活动图核心:有哪些系统参与了协...
孤尽训练营打卡日记day13--mybatis-plus 自动生成代码 前言 在我们开发项目的时候,controller、service、serviceImpl、mapper、entity每次都要手动敲一遍,太不方便了,所以本次我写了一个mybatis-plus 自动生成代码器,提供开发效率。依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-gen...
孤尽训练营打卡日记day12--代码规范 前言 软件质量,不仅依赖于良好的架构设计及项目管理,还和代码质量紧密相关。你是否也曾被糟糕的代码坑过,没有注释、和约定的不一致、方法和变量名称随意命名,调用起来不找到对面开发根本不知道调用哪个方法,使用哪个变量。今天我们跟着孤尽老师一起学习一下代码规范。为什么需要代码规范1、熵增定律:任何系统在没有外力的有序干预下,一定会往混乱无序的方向发展。代码如果没有一个有效的管理,最终也会变得混乱不堪。2、破窗理论:窗户破损了的建筑让人觉得似乎无人照管。于是别人也不再关心,他们放入窗户继...
孤尽训练营打卡日记day11--底层项目搭建爬坑 前言 在孤尽训练营的三十天里,需要完成一个类似12306的购票网站,实现从查票、下单、付钱、通知的主流程。今天就和大家分享一下搭建底层项目时候遇到的一些坑。nacos 启动闪退我们都知道,从jdk8起,在安装jdk的时候,我们不手动配置环境变量也是可以运行起来Java程序的。因为在用户变量的 Path 里面就有Java路径生成,而在映射的路径文件夹中已经存在了可执行的java.exe,也就是说在安装的时候就已经自动为我们添加好了环境配置。所谓环境...
孤尽训练营打卡日记day10--技术选型 前言 在我们开始开发一个系统之前,我们需要先做一件事,就是技术调研,专业的叫法就叫 技术选型。如果技术选型选不好,就容易给自己埋下一大推坑,对系统的后续维护,版本升级都是很不友好的。那我们如何选择呢,成本和效率都是我们需要考虑的问题。为什么需要技术选型降低开发成本 提高研发效率 系统可维护性微服务架构三部曲巨石应用 第一代单体应用,将所有模块打包到一起部署运行。优点:易于部署、调试、运维方便,维护成本低缺点:不可靠,一个模块的bug就...
孤尽训练营打卡日记day09--网络协议 TCP/IP 前言网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。有了这些协议,计算机和计算机之间才能连接在一起,用一些共同的东西进行交流,发挥更强大的作用。TCP/IP在多个不同网络间实现信息传输的协议簇iso 七层模型物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换),这一层的数据叫做比特。 数据...