ProGuard学习笔记
ProGuard是一个开源的Java类文件(.class)处理工具,相比起其它的Java混淆器,ProGuard更快,更易用。它同时提供了命令行和图形界面。ProGuard能够:
- 压缩(Shrunk ):检测未使用的类、字段、方法、属性,…
基于Apache Cordova开发移动应用程序
- 目标平台:本文中会反复出现该名词,目标平台是指移动操作系统+移动应用SDK构成的移动应用支撑环境。有时也称作移动平台,或简称平台
- 构建平台:在其上运行Cordova工具,生成目标平台应用程序的宿主操作系统
- PhoneGap:目前作为Apache…
IntelliJ平台知识集锦
IntelliJ是JetBrains公司的一个基础软件平台,主要用于构建IDE。IDEA、WebStorm、PHPStorm、CLion、PyCharm、RubyMine、DataGrip、Android Studio等IDE均基于此平台构建。本文记录通用…
阅读全文Linux的三种Init机制
一台安装了Linux操作系统的计算机的启动,从BIOS加电开始,随后进入Bootloader,由Bootloader加载Linux内核并初始化。
内核本身不能做任何有意义的事情,内核初始化的最后一步,就是创建PID为1、名为init的守护进程,该进程是操作系…
阅读全文Docker学习笔记
Docker是一个容器化软件,所谓容器化即操作系统级别的虚拟化(Operating-system-level virtualization)。比起硬件虚拟化:
- 容器更加轻量,它不需要运行独立操作系统,因而减少了磁盘(操作系统文件占用GB+空间)、…
Apache HTTP Server知识集锦
名词 | 说明 |
MPM |
Apache2引入的特性,即多处理模块(Multi-Processing Modules)。MPM是Apache用来处理网络请求的模块,其功能包括:绑定网络端口、接受请求、分发给子例程执行请求处理 引入MPM,可以实现针对平台、针对业务… |
Ubuntu下安装SNMP组件
安装必要的软件:
1 2 3 4 5 |
sudo apt-get update #Manager组件 sudo apt-get install snmp #包含标准化MIBs信息的组件,允许通过名字而不是OID访问绝大部分MIB树分支 sudo apt-get install snmp-mibs-downloader |
修改配置文件: sudo vim /etc/snmp/snmp.conf 注释掉: #mibs : ,以允许Manager可以导入额外的MIBs。可以在此文件中设置默认的身份验证信息:
这样,该Manager可以使用简短的命令来访问Agent:
修改配置文件: ,如下:
重新启动代理服务器:
在Manger上尝试执行一个get-request,确认代理服务器正常运作:
以bootstrap为模板,创建用户snmp:
修改密码为snmppswd:
现在可以尝试使用新用户了:
回到代理服务器,注释掉…
阅读全文snmp4j学习笔记
snmp4j是Java社区首选的SNMP协议的开源实现,支持JDK1.4+版本,该框架受C++库snmp++启发,以面向对象的方式进行设计。snmp4j同时支持Manager、Agent两种角色,支持同步、异步通信方式,以及多种验证方式和加密算法。snmp…
阅读全文基于Spring Test和Mockito进行单元测试
本文引入一个简单的银行业务场景,用来阐述如何集成Spring Test、Junit、Mockito,以简化单元测试工作。该场景主要的业务代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
/** * 人员 */ public class Person { private int id; private String name; private Account defaultAccount; } /** * 账户 */ public class Account { private int id; private int balance; private Person person; } /** * 人员服务接口 * */ public interface PersonService { /** * 查询人员用户 */ Person getPerson( int id ); /** * 得到人员默认账户 */ Account getDefaultAccount( Person p ); } /** * 账户服务接口 * */ public interface AccountService { /** * 查询人员默认账户余额 */ int queryBalanceOfDefaultAccount( int personId ); } |
假设你已经实现了服务AccountService:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
@Service ( "accountService" ) public class AccountServiceImpl implements AccountService { private Map<Integer, Object[]> accountDatabase; @Inject private PersonService personService; @PostConstruct public void init() { accountDatabase = new HashMap<Integer, Object[]>(); //字段:账号,余额 accountDatabase.put( 100, new Object[] { "6225100", 68861 } ); accountDatabase.put( 101, new Object[] { "6225101", 1851 } ); accountDatabase.put( 102, new Object[] { "6225102", 845 } ); accountDatabase.put( 103, new Object[] { "6225103", 16598 } ); } @Override public int queryBalanceOfDefaultAccount( int personId ) { Person person = personService.getPerson( personId ); Account defaultAccount = person.getDefaultAccount(); return (Integer) accountDatabase.get( defaultAccount.getId() )[1]; } } |
而你的搭档负责的PersonService还没有开发完毕,如何方便的进行单元测试呢?
你可能会觉得,我们不需要在单元测试中引入Spring。对于上面的例子的确可以这么说,它太简单了,AccountServiceImpl 依赖的PersonService完全可以通过setter手工注入。但是实际的开发场景要比这个例子复杂的多,待测试类可能和S…
阅读全文KVM和QEMU学习笔记
Hypervisor,即虚拟机监管程序(virtual machine monitor ,VMM)。它可以是电脑上的软件、固件或者硬件,用于建立和执行虚拟机。拥有Hypervisor后,你可以执行一个或者多个虚拟机。这些虚拟机称为客户机(guest mac…
阅读全文