Java 编码安全 (1) 如何比较数组

Submitted by Lizhe on Wed, 07/19/2017 - 12:07

先看下面的代码

int[] a = new int[10];
 int[] b = new int[10];
        
System.out.println(a==b);

上面代码会直接打印出 false , 正常来讲初始化的int数组值应该都是0 , 那为什么两个数组不相等呢

rootcause在于, 数组并不会重写Object.equals() 方法, 而原始的equals方法比较的是引用

两个数组的引用不同, 自然结果是false 

正确的做法应该是使用Arrays.equals(a,b)

import java.util.Arrays;

关于"在用户设定的时间发送邮件"的功能设计

Submitted by Lizhe on Mon, 07/17/2017 - 17:23

这个问题其实还是Brian问的, 他真的去做那个 "拍卖系统" 了

这个拍卖系统有一个需求是  " 假设用户设定的拍卖开始时间是2017年1月1日中午12点, 那么系统需要在拍卖会开始之前半个小时给参与的bidder们发送提醒邮件"

这个功能看起来貌似很简单, 不过仔细想起来以前好像还真没碰到类似的

1. 发送邮件的job触发一次之后, 就会被移除 ( 不像springbatch或者crontab那种定时器触发, 要触发好多次)

2. job的数量不固定, 以前做的job都是程序员设定的, 不会由用户创建, 所以如果job数量特别大,可能会出问题

3. job的触发时间是用户设定的, 如果同一时间有大量job需要触发, 而且如果邮件发送特别慢的话,也可能会出问题

 

下面给出两个解决方案

  • 使用atd服务实现
  • 使用redis+rabbitmq写代码实现

总的来说各有利弊, 下面请看详细

 


第一种, 使用atd服务实现

安装atd服务
yum -y install at

centos7+openstack (5) neutron配置

Submitted by Lizhe on Sat, 07/15/2017 - 23:41

 

开始之前我建议你先关闭SELinux

 

临时关闭SELinux
setenforce 0

临时打开SELinux
setenforce 1

开机关闭SELinux
编辑/etc/selinux/config文件,将SELINUX的值设置为disabled

查看SELinux状态
执行getenforce命令

 

修改/etc/neutron/neutron.conf 文件

 

cat /etc/neutron/neutron.conf|grep -v "^#"|grep -v "^$"

glance image-list 错误

Submitted by Lizhe on Tue, 07/11/2017 - 16:27

 

我觉得我需要吐槽一下openstack的log .... 基本上你很难很难从log发现rootcause ... =.=

[root@centos_admin ~]# glance image-list
500 Internal Server Error: The server has either erred or is incapable of performing the requested operation. (HTTP 500)

处理办法

修改SELinux添加权限
ausearch -c 'glance-api' --raw | audit2allow -M my-glanceapi
semodule -i my-glanceapi.pp

当然简单粗暴直接关闭SELinux也行
临时关闭SELinux
setenforce 0

centos7+openstack (1) 环境安装

Submitted by Lizhe on Mon, 07/10/2017 - 16:48

 

首先我要说的是, openstack 比我想的要简单一点(一开始我觉得它有点太臃肿了), 但学习曲线仍然很陡峭

( 学习曲线陡峭这句话是我 7 年前从一本java SOA的书里看到的,它当时在讲基于soap的webservice应用, 原话大概是说 在任何系统上构建分布式系统都不是一件容易的事,webservice学习曲线很陡峭 )

如果你不能自称是一名"专家", 或者接触Linux服务器的时间不长,或者对开源项目不是很熟悉, 或者对分布式系统不了解 再或者是没用过虚拟机之类的

openstack可以分分钟玩死你... 所以最好是... 好好学基础

它依赖的开源库和软件并不多,除了自身的安装包大约只有 memcached, mariadb 和 rabbitmq, 如果以上3样东西你不知道是什么, 最好在开始之前去了解一下

这里我尽量遵循官方文档的做法, 以避免出现太多不知道为什么就出现了也许只是某个东西版本更新了导致的log里什么都看不出来Google被墙了baidu根本查不到的错误

首先我是在vmware虚拟机上装了两台centos7, 安装的时候注意点, 直接选workspace带桌面UI那个, 要不你就得参考我的另一篇文章自己动手装UI界面了