LXZ的原创知识库

记录,思考,成长,回忆


  • 首页

  • 分类

  • 归档

【笔记】Sonarqube-使用

发表于 2017-10-21 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

帮助理解

技术债务:没有按照规范所编写设计的代码(走捷径),或者错误代码.
这些产生的问题,需要在以后的工作中需要被修复所花的时间(即称为债务).

本地Sonarqube环境

测试地址:192.168.10.221:9000 用户名:admin 密码:admin 数据库:192.168.10.222 scholar2test/scholar2test

#####根据债务的不同特性分为8种:
下图对应:
可重用性
可移植性
可维护性
安全性
实用性
效率
可变性(低耦合?)
可靠性
可测性

产生以上技术债务的原因有大概七种(常用原因,默认规则):

1:Bug和潜在的Bug
2,违反编码标准
3,重复
4,单元测试信息
5,复杂的代码
6,结构设计
7,注释

重新强调使用sonar为了什么

产生债务原因已经找到,通过人力去分析代码,进行优化改进比较麻烦。通过工具,按照我们使用者的意愿去分析代码并且呈现出来,这些就是sonar所要做的事情。
前提:想要对项目进行严格的分析,修改,把控,需要项目具有良好的编码规范。没有这方面需求,使用sonar没有意义。

以下介绍七种产生债务原因在图形化界面上的查看与分析方式
以下会穿插部分界面的解释,以默认规则,默认插件为例。

1:Bug和潜在的Bug

根据字面意思可以理解
这种原因通常问题严重性标记为:Blocker(阻断)
通过下图观察:

阅读全文 »

【笔记】Sonarqube-安装

发表于 2017-10-21 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

软件作用

根据规则分析源代码,进行数据统计,呈现在可视化界面,方便使用者对代码分析。

使用软件:

  1. 安装软件。
  2. 使用者根据具体需要定义代码分析规则。
  3. 利用Sonar软件对源代码分析上传到Sonar服务器。
  4. 访问服务器图形界面,对代码进行分析。
  5. 使用者根据分析结果,对项目进行优化调整。

帮助理解

Sonar-runner客户端:配置sonar服务端配置之后,可与sonar服务端结合分析,存储项目
maven或者Jenkins集成sonar,底层利用Sonar-runner客户端工具。

Sonar+Sonar-runner进行项目的源代码分析

准备

  1. 下载sonarqube安装文件,下载地址:http://www.sonarqube.org/downloads/
  2. 数据库一个(支持各种数据库,自带H2,速度慢,测试使用)
  3. sonar-runner工具包
安装步骤
一,sonar

1, 配置

1
2
3
4
5
配置sonarqube配置文件\conf\sonar.properties
sonar.jdbc.username=scholar2test
sonar.jdbc.password=scholar2test
sonar.jdbc.url=jdbc:oracle:thin:@192.168.10.222:1521:ora11g
sonar.web.port=9000

2, 版权问题使用oracle时自己导jdbc包
extensions/jdbc-driver/oracle目录下放入对应的oracle驱动jar包
路径oracle客户端目录 client_1\jdbc\lib下

3, 导入汉化包extensions/plugins
下载地址:http://docs.codehaus.org/display/SONAR/Chinese+Pack

4, 找到对应系统的执行目录,这里运行/bin/linux-x86-64/sonar.sh

阅读全文 »

【方案】接口+抽象类+实现类的三层设计模型

发表于 2016-06-23 | 分类于 方案

[方案系列文章说明]: 该类型的文章是我在使用和学习中认为不错的解决办法,当然会有更好的方案,也一定会有, 所以文章具有一定的局限性, 请结合自己的思考辩证的看.

结构模型

应用情景

  1. 访问入口是统一的
  2. 具体实现有多种变化

模拟情景

1,蛋糕店有一台生产蛋糕的机器(接口),机器有磨具插槽(定义入口)
2,机器需要有不同的蛋糕磨具才能塑形(抽象类),磨具与机器之间有相匹配的型号(入口实现)
3,磨具又规定了蛋糕的大小,但是蛋糕材料没有固定(差异化定义)
4,果仁蛋糕磨具中放入果仁,鸡蛋蛋糕磨具中放入鸡蛋(差异化实现)
(1),机器是接口 (2),磨具是抽象类 (3),磨具+材料是具体实现

抽象类对接口进行了统一入口的实现,并且约束了具体实现类的定义

【笔记】Java版本更新历史(ing)

发表于 2016-05-02 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

历史版本特性

JDK Version 1.0

开发代号为Oak(橡树),于1996-01-23发行.

JDK Version 1.1

于1997-02-19发行.

引入的新特性包括:

引入JDBC(Java DataBase Connectivity);

支持内部类;

引入Java Bean;

引入RMI(Remote Method Invocation)

引入反射(仅用于内省)

J2SE Version 1.2

阅读全文 »

【笔记】转义字符对照

发表于 2016-04-20 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

对照表

阅读全文 »

【笔记】Zookeeper应用

发表于 2016-04-11 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

说明

zookeeper是一个分布式的,为分布式应用提供数据一致性服务的程序.

Zookeeper是怎么来的?

分布式系统: 是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过 消息传递 进行通信和协调的系统。

在这个消息传递的过程中遇到的问题: 传输中数据被篡改,数据丢失处理,数据超时处理,数据的事务控制,可以统称为数据的一致性问题.

解决分布式系统中数据传输的一致性问题的理论基础:CAID,CAP(一致性,可用性,分区容错性),BASE等一致性方面的理论

结合理论基础,演变出分布式数据一致性协议算法,如2PC,3PC,Raft ,Paxos算法等.

解决消息传递过程中的两个问题:
1,消息传递中的消息篡改,消息容错机制

拜占庭将军问题:

  拜占庭帝国有许多支军队,不同军队的将军之间必须制定一个统一的行动计划,从而做出进攻或者撤退的决定,同时,各个将军在地理上都是被分隔开来的,只能依靠军队的通讯员来进行通讯。然而,在所有的通讯员中可能会存在叛徒,这些叛徒可以任意篡改消息,从而达到欺骗将军的目的。

解决方式:比如系统中的数字签名,数据加密

阅读全文 »

【笔记】Java程序员对服务器一词的解释

发表于 2016-03-25 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

分类

HTTP服务器: 主要用作Http请求转发

Servlet容器: 满足Servlet规范的容器,

应用服务器: 满足J2EE规范的Web容器

对比

根据他们的主要用途,用图表的形式给出

名称 HTTP服务器 Servlet容器 支持J2EE 厂家
Tomcat × √ × apache
Apache √ × × apache
Jboss × × √ Redhat
Nginx √ × × Igor
WebLogic × √ √ Oracle
WebSphere × √ √ IBM
Resin × √ × CAUCHO
Jetty × √ × Webtide

【笔记】Java RMI(远程方法调用) 实例与分析

发表于 2016-03-22 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

目的

通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出.

概念解释

RMI(RemoteMethodInvocation): 远程方法调用,顾名思义,通过远程的方式调用非本地对象的方法并返回结果。使用远程调用通常解决本地计算瓶颈问题,例如分布式记算,最近很火的阿尔法狗人机大战,据说运算使用上千个CPU。
JRMP(java remote method protocol): java远程方法协议,这是完成java到java远程调用的协议,基于TCP协议。
stub与skeleton: 这两个概念下面会用到,这里解释下,skeleton是放在服务端的代理,它知道真正的对象在哪。stub是放在客户端的代理,它记录了查找和调用skeleton信息。理解成远程对象引用也成.

容易混淆的概念

远程方法调用与远程过程调用的区别:远程方法调用是java独有的,基于JRMP对象流协议实现,支持传输java序列化对象。远程过程调用是基于socket技术实现的,不能传输java对象,socket套接字协议支持多种语言。它们都是基于TCP协议传输。远程方法调用传输的是java序列化对象和基本数据类型,而远程过程调用不支持传输对象。

RMI调用模型:

从宏观看,想要远程调用需要做两件事情,1,服务端向本地对象注册表中注册能被调用的远程对象. 2,客户端向远程对象注册表请求远程对象的引用.

阅读全文 »

【笔记】程序中的乐观锁与悲观锁,以及动手实现乐观锁

发表于 2016-03-16 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

概念

这里抛开数据库来谈乐观锁和悲观锁,扯上数据库总会觉得和Java离得很远.

悲观锁: 一段执行逻辑加上悲观锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放.

乐观锁: 一段执行逻辑加上乐观锁,不同线程同时执行时,可以同时进入执行,在最后更新数据的时候要检查这些数据是否被其他线程修改了(版本和执行初是否相同),没有修改则进行更新,否则放弃本次操作.

从解释上可以看出,悲观锁具有很强的独占性,也是最安全的.而乐观锁很开放,效率高,安全性比悲观锁低,因为在乐观锁检查数据版本一致性时也可能被其他线程修改数据.从下面的例子中可以看出来这里说的安全差别.

阅读全文 »

【笔记】Java中动态代理技术生成的类与原始类的区别

发表于 2016-03-16 | 分类于 笔记

[笔记系列文章说明]: 该类型的文章是笔者学习过程中整理的学习笔记.

用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑.

平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后来定义的逻辑.这样就达到了动态的在原有类上增加一些功能.比如日志打印,拦截信息等.

这里只关心动态代理技术生成新的类,先不管虚拟机是如何去生成类,用了什么字节码生成技术,怎么产生字节码等这一系列动作.现在只关心最后生成的新类长什么样,它和老类有什么区别.为了获取到生成后的代理类的字节码并且反编译成我们能够看得懂的代码,需要实现一个动态代理例子.

阅读全文 »
上一页1234…6下一页

55 日志
5 分类
1 标签
GitHub E-Mail
© 2016 — 2022 吕兴志
由 Hexo 强力驱动
|
主题 — NexT.Gemini v5.1.4