8.14-8.20
SonarQube简介
SonarQube是一个开源的静态代码分析工具,根据不同语言的规则,对代码进行扫描,扫描出潜在的问题并提供修改方案。
SonarQube除了支持自有的规则外,还可以通过插件的方式,支持CheckStyle、FindBugs、PMD等其他代码质量分析工具的规则
除了搭建SonarQube服务器,还可以在IDEA编辑器,安装SonarLint插件对代码进行扫描
管理问题可以点进去问题查看单个问题的详情,点击为何是问题?查看修改建议
对问题可以标记为:
不会修复:代表检测出的问题不需要解决
误判:代表系统误判
标记上述两种标记后,下次扫描就会自动略过。
项目详情质量阈只有配置了管理质量阈的用户,才可以编辑质量阈。
可以自定义编辑质量阈的条件,比如Bugs > 0 & 漏洞 > 0…
满足任一条件则质量阈状态为错误,否则为正常
问题
安全热点不一定是问题,需要审核确认是否为安全漏洞
指标
Yapi前后端分离的痛点:
文档缺失,输入输出没有预期,或与预期不符。
文档老旧,不够全面,如文档中的接口已失效,有用的接口不放在文档里。
前端开发依赖于后端 ...
java开发规范-设计模式
设计模式1、注意面向接口编程的原则,方便通过不同的实现类实现功能拓展。
2、接口继承关系应该规范,应该将下图的两个接口中的公共方法,抽象出一个父接口,两个子接口继承。
3、在编码过程中,应该考虑涉及模式的六大原则,尤其是单一职责原则。
六大设计原则:单一职责(类要职责单一)、里氏替换(不破坏继承体系)、依赖倒置(面向接口编程)、接口隔离(接口设计要精简单一)、迪米特(降低耦合)、开闭(对扩展开放,对修改关闭)。
java开发规范-安全规范
安全规约1、隶属于用户个人的页面或者功能必须进行权限控制校验。
123说明:防止没有做水平权限校验就可随意访问、修改、删除别人的数据,比如查看他人的私信内容。举例说明:若用户请假单仅允许用户自己删除,那么需要在delete语句中,加上createuser的验证条件:delete from doc where id='' and createuser='sessionuser.user.id'
2、用户敏感数据禁止直接展示,必须对展示数据进行脱敏
123for (Map<String, Object> user : tempList) { user.remove("userpassword")}
3、用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入,禁止字符串拼接SQL访问数据库。
这里涉及MySQL中#{}和${}的区别
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成s ...
java开发规范-异常日志
异常日志异常处理1、Java 类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch 的方式来处理,NullPointerException,IndexOutOfBoundsException等等。
1说明:无法通过预检查的异常除外,比如,在解析字符串形式的数字时,可能存在数字格式错误,不得不通过catch NumberFormatException来实现。
2、异常捕获后(也就是在try-catch里)不要用来做流程控制,条件控制。
1说明:异常设计的初衷是解决程序运行中的各种意外情况,且异常的处理效率比条件判断方式要低很多。
3、catch时请分清稳定代码和非稳定代码,稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进行区分异常类型,再做对应的异常处理。
123说明:对大段代码进行try-catch,使程序无法根据不同的异常做出正确的应激反应,也不利于定位问题,这是一种不负责任的表现。正例:用户注册的场景中,如果用户输入非法字符,或用户名称已存在,或用户输入密码过于简单,在程序上作出分门别类的判断,并提示给用户。
4、捕获 ...
java开发规范-编程规约
编程规约命名风格1、(S)代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
2、代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
1注:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
3、杜绝完全不规范的缩写,不要使用a、b、c等含义不清的变量或者使用lvl1/lvl2等根据数字区分的变量,避免望文不知义。为了达到代码自解释的目标,任何定义编程元素在命名时使用尽量完整单词组合来表达其意。
12正例:从远程仓库拉取代码的类命名为PullCodeFromRemoteRepository反例:AbstractClass“缩写”命名成AbsClass;变量int a的随意命名方式。
4、(S)包名统一使用小写,且用单数形式;类名如果有复数含义,可以使用复数形式。
1应用工具类包名为com.alibaba.ai.util、类名为MessageUtils
5、(S)类名使用大驼峰命名法,但以下情形例外:DO / BO / DTO / VO / AO / PO等
1正例:JavaServerless ...
数据库部分
本文参考马士兵java面试八股文,进行了梳理和分类,作为面试笔记留档
事务的基本特性事务四大特征ACID:原子性,一致性,隔离性和持久性。
原子性(Atomicity)一个原子事务要么完整执行,要么干脆不执行。这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败,则整个工作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将会是永久性的。
一致性(Consistency)它必须由事务系统和应用开发人员共同来保证。事务系统通过保证事务的原子性,隔离性和持久性来满足这一要求; 应用开发人员则需要保证数据库有适当的约束(主键,引用完整性等),并且工作单元中所实现的业务逻辑不会导致数据的不一致(即,数据预期所表达的现实业务情况不相一致)。例如,在一次转账过程中,从某一账户中扣除的金额必须与另一账户中存入的金额相等。你的余额为100,你读到余额要取,有人向你转100,但是事务没提交(这时候你读到的余额应该是100,而不是200) 这种就是一致性。
隔离性(Isolation)隔离性意味着事务必须在不干扰其他进程 ...
Spring部分
本文参考马士兵java面试八股文,进行了梳理和分类,作为面试笔记留档
你觉得Spring的核心是什么?spring是为了简化企业开发而生的,使得开发变得更加优雅和简洁。
spring是一个IOC和AOP的容器框架。
IOC:控制反转
AOP:面向切面编程
容器:包含并管理应用对象的生命周期,就好比用桶装水一样,spring就是桶,而对象就是水
如何实现一个IOC容器IOC(Inversion of Control),意思是控制反转,不是什么技术,而是一种设计思想,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
在传统的程序设计中,我们直接在对象内部通过new进行对象创建,是程序主动去创建依赖对象,而IOC是有专门的容器来进行对象的创建,我们需要做的只是把对象放入容器中,需要时从容器中取即可,即IOC容器来控制对象的创建。
先准备一个基本的容器对象,包含一些map结构的集合,用来方便后续过程中存储具体的对象
进行配置文件的读取工作或者注解的解析工作,将需要创建的bean对象都封装成BeanDefinition对象存储在容器中
容器将封装好的Be ...
java基础部分
本文参考马士兵java面试八股文,进行了梳理和分类,作为面试笔记留档
面向对象三大特性 面向对象编程是利用类和对象编程的一种思想。万物可归类,类是对于世界事物的高度抽象 ,是具有相同特征的实体的集合,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的继承关系, 一个类和多个类的多态关系。万物皆对象,对象是具体的世界事物,面向对象的三大特征封装,继承,多态。封装,封装说明一个类行为和属性与其他类的关系,低耦合,高内聚;继承是父类和子类的关系,多态说的是类与类的关系。
封装隐藏了类的内部实现机制。可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法。封装包括类的封装和属性的封装。
属性的封装:使用者只能通过事先定制好的方法来访问数据,可以方便地加入逻辑控制,限制对属性的 不合理操作;
方法的封装:使用者按照既定的方式调用方法,不必关心方法的内部实现,便于使用;便于修改,增强代码的可维护性;
继承从已有的类中派生出新的类,新的类能继承已有类的数据属性和行为,并能扩展新的能力。在本质上是特殊到一般的 ...
操作系统
本文参考eetcode的硬核操作系统指南,主要用于春招OS准备留档
操作系统入门本文主要结构图如下图所示:
简述现代计算机系统由一个或多个处理器、主存、打印机、键盘、鼠标、显示器、网络接口以及各种输入/输出设备构成。是架在用户和底层硬件的桥梁。
程序员不会直接跟硬件打交道,因为程序员不可能完全掌握所有计算机系统的细节,所以在硬件的基础上,计算机安装了一层软件,这层软件能够通过响应用户输入的指令达到控制硬件的效果,从而满足用户需求,这种软件称之为 操作系统,它的任务就是为用户程序提供一个更好、更简单、更清晰的计算机模型。
我们常用的OS有Windows,Linux,MacOS,如果是带有图形界面的OS被称为图形用户界面(Graphical User Interface, GUI),而基于文本、命令行的通常称为 Shell。下图为OS的部件:
这是一个操作系统的简化图,最下面的是硬件,硬件包括芯片、电路板、磁盘、键盘、显示器等我们上面提到的设备,在硬件之上是软件。大部分计算机有两种运行模式:内核态和用户态,软件中最基础的部分是操作系统,它运行在内核态中,内核态也称为管态和核心态,它们 ...