/**
* 移动卡类
*/
public class MobileCard {
private String cardNumber; //卡号
private String userName; //用户名
private String passWord; //密码
private ServicePackage serPackage; //移动卡所属套餐
private double consumAmount; //本月消费金额
private double money; //本月余额
private int realTalkTime; //本月实际通话时长
private int realSMSCount; //本月实际发送短信条数
private int realFlow; //本月实际上网流量 public MobileCard() {
//super();
} //接受新注册移动卡用户的名称,和手机号,密码
public MobileCard(String cardNumber, String userName, String passWord){
this.cardNumber=cardNumber;
this.userName=userName;
this.passWord=passWord;
} public MobileCard(String cardNumber, String userName, String passWord,
ServicePackage serPackage, double consumAmount, double money,
int realTalkTime, int realSMSCount, int realFlow) {
//super();
this.cardNumber = cardNumber;
this.userName = userName;
this.passWord = passWord;
this.serPackage = serPackage;
this.consumAmount = consumAmount;
this.money = money;
this.realTalkTime = realTalkTime;
this.realSMSCount = realSMSCount;
this.realFlow = realFlow;
} public String getCardNumber() {
return cardNumber;
} public void setCardNumber(String cardNumber) {
this.cardNumber = cardNumber;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPassWord() {
return passWord;
} public void setPassWord(String passWord) {
this.passWord = passWord;
} public ServicePackage getSerPackage() {
return serPackage;
} public void setSerPackage(ServicePackage serPackage) {
this.serPackage = serPackage;
} public double getConsumAmount() {
return consumAmount;
} public void setConsumAmount(double consumAmount) {
this.consumAmount = consumAmount;
} public double getMoney() {
return money;
} public void setMoney(double money) {
this.money = money;
} public int getRealTalkTime() {
return realTalkTime;
} public void setRealTalkTime(int realTalkTime) {
this.realTalkTime = realTalkTime;
} public int getRealSMSCount() {
return realSMSCount;
} public void setRealSMSCount(int realSMSCount) {
this.realSMSCount = realSMSCount;
} public int getRealFlow() {
return realFlow;
} public void setRealFlow(int realFlow) {
this.realFlow = realFlow;
} /**
* 显示移动卡的信息
*/
public void showMeg(){ }
}
/**
* 三个移动套餐----父类
*/
public abstract class ServicePackage {
//三个套餐的共同属性就是每月要交月租,不交钱还想用卡?
private double price; public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public ServicePackage() {
super();
} public ServicePackage(double price) {
super();
this.price = price;
} //定义一个抽象的控制台输出方法,三个套餐子类会用到
public abstract void showInfo();
}
/**
* 短信---接口
*/
public interface SendService {
public abstract int send(int count, MobileCard card) throws Exception;
}
/**
* 上网流量---接口
*/
public interface NetService {
public abstract int netPlay(int flow, MobileCard card) throws Exception;
}
/**
* 通话--接口
*/
public interface CallService {
public abstract int call (int minCount, MobileCard card) throws Exception;
}
/**
* 超人套餐
* 此套餐继承套餐总类,并实现发送短信,上网流量,语音通话的三个接口
*/
public class SuperPackage extends ServicePackage implements SendService, NetService, CallService {
private int talkTime; //通话时长
private int smsCount; //短信数量
private int flow; //上网流量 public SuperPackage() {
super();
} public SuperPackage(double price, int talkTime, int smsCount, int flow) {
super(price);
this.talkTime = talkTime;
this.smsCount = smsCount;
this.flow = flow;
} public int getTalkTime() {
return talkTime;
} public void setTalkTime(int talkTime) {
this.talkTime = talkTime;
} public int getSmsCount() {
return smsCount;
} public void setSmsCount(int smsCount) {
this.smsCount = smsCount;
} public int getFlow() {
return flow;
} public void setFlow(int flow) {
this.flow = flow;
} //通话时长---暂时未实现具体功能
public int call(int minCount, MobileCard card) throws Exception{
int temp = minCount;
return temp;
} //使用流量数---暂时未实现具体功能
public int netPlay(int flow, MobileCard card) throws Exception {
int temp = flow;
return temp;
} //发送短信数量---暂时未实现具体功能
public int send(int count, MobileCard card) throws Exception {
int temp = count;
return temp;
} //重写套餐父类showInfo输出方法
public void showInfo() {
}
}
/**
* 话唠套餐
* 此套餐继承套餐总类,并实现发送短信,语音通话的二个接口
* 戒除网瘾,从此套餐开始
*/ public class TalkPackage extends ServicePackage implements CallService, SendService {
private int talkTime;//通话时长
private int smsCount;//短信条数 public TalkPackage() {
super();
} public TalkPackage(double price, int talkTime, int smsCount) {
//把此套餐的价格传给父类
super(price);
this.talkTime = talkTime;
this.smsCount = smsCount;
} public int getTalkTime() {
return talkTime;
} public void setTalkTime(int talkTime) {
this.talkTime = talkTime;
} public int getSmsCount() {
return smsCount;
} public void setSmsCount(int smsCount) {
this.smsCount = smsCount;
} //通话时长---未实现此功能
public int call(int minCount, MobileCard card) throws Exception {
int temp = minCount;
return temp;
} //发送短信数量------未实现此功能
public int send(int count, MobileCard card) throws Exception {
int temp = count;
return temp;
} //重写套餐父类showInfo输出方法
public void showInfo() {
}
}
/**
* 网虫套餐---网瘾少年,从此套餐做起~~~
* 此套餐继承餐套父类并继承上网流量接口
*/
public class NetPackage extends ServicePackage implements NetService {
private int flow; //上网流量 public NetPackage() {
super();
} public NetPackage(double price, int flow) {
super(price);
this.flow = flow;
} public int getFlow() {
return flow;
} public void setFlow(int flow) {
this.flow = flow;
} //使用流量---未实现此功能
public int netPlay(int flow, MobileCard card) throws Exception {
int temp = flow;
return temp;
} //重写套餐父类showInfo输出方法
public void showInfo() {
} }
/**
* 实例化三个套餐类
*/
public class Common {
//实例化话唠套餐
//括号参数分别对应(价格,通话时间,短信数量)
static TalkPackage talkPackage = new TalkPackage(58, 500, 30);
//实例化网虫套餐
//括号参数分别对应(价格,上网流量)
static NetPackage netPackage = new NetPackage(68, 3 * 1024);
//实例化超人套餐
//括号参数分别对应(价格,通话时间,短信数量,上网流量)
static SuperPackage superPackage = new SuperPackage(78, 200, 50, 1 * 1024);
}
import java.io.*;
import java.util.*; /**
* 工具类
*/
public class CardUtil {
//初始用户集合
protected static Map<String, MobileCard> cards = new HashMap<String, MobileCard>();
//卡号消费记录列表
protected static Map<String, List<ConsumInfo>> consumInfos = new HashMap<String, List<ConsumInfo>>();
//Scanner方法,后面的方法会多次用到
protected static Scanner input = new Scanner(System.in); public CardUtil() {
//super();
} /**
* 添加用户
*/
public static void addCard(MobileCard card) {
cards.put(card.getCardNumber(), card);
} /**
* 话费充值
*/
public static void chargeMoney(String number) {
System.out.println("请输入要充值的金额(不少于50元):");
while (true) {
double money = 0.0;
while (true) {
Scanner input = new Scanner(System.in);
if (input.hasNextDouble() == true) {
money = input.nextDouble();
break;
} else {
System.out.print("输入错误!请重新输入:");
}
}
if (money < 50) {
System.out.println("输入金额少于50元请重新输入:");
continue;
} else {
cards.get(number).setMoney(cards.get(number).getMoney() + money);
System.out.println("充值成功,当前话费余额为" + cards.get(number).getMoney());
break;
}
} } /**
* 套餐费用简介
*/
public static void introduce() throws IOException {
//该文件地址需按照自己的文件地址格式来写
File file = new File("E:\\JavaLog/logs/2.txt");
//指定读取编码格式为bgk(解决读取出现中文乱码)
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
try {
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
System.out.println("没有找到套餐费用简介文件");
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
br.close();
}
} /**
* 本月账单查询
*/
public static void showAmountDetail(String number) {
MobileCard mobileCard = cards.get(number);
System.out.println("您的卡号为:" + mobileCard.getCardNumber());
System.out.println("当月账单如下:");
System.out.println("套餐资费:" + mobileCard.getSerPackage().getPrice() + "元"
+ "\t合计消费:" + mobileCard.getConsumAmount() + "元"
+ "\t账户余额:" + mobileCard.getMoney() + "元");
} /**
* 套餐余量查询
*/
public static void showRemainDetail(String searchNumber) {
MobileCard mobileCard = cards.get(searchNumber);
MobileCard card;
int remainTalkTime;
int remainSmsCount;
int remainFlow; StringBuffer meg = new StringBuffer();
card = cards.get(searchNumber);
meg.append("您的手机号码是" + searchNumber + "餐套内剩余:\n");
ServicePackage pack = card.getSerPackage();
//向下转型超人类型
if (pack instanceof SuperPackage) {
SuperPackage cardPack = (SuperPackage) pack;
//查询套餐内剩余的通话时长
remainTalkTime = cardPack.getTalkTime() > card.getRealTalkTime() ? cardPack.getTalkTime() - card.getRealTalkTime() : 0;
meg.append("通话时长:" + remainTalkTime + "分钟\n");
//查询套餐内剩余的短信条数
remainSmsCount = cardPack.getSmsCount() > card.getRealSMSCount() ? cardPack.getSmsCount() - card.getRealSMSCount() : 0;
meg.append("短信条数:" + remainSmsCount + "条");
//查询套餐内剩余的流量
remainFlow = cardPack.getFlow() > card.getRealFlow() ? cardPack.getFlow() - card.getRealFlow() : 0;
meg.append("通话时长:" + remainFlow + "分钟\n"); System.out.println("您的手机号是:" + mobileCard.getCardNumber() + ",套餐内剩余:");
System.out.println("通话时长:" + remainTalkTime);
System.out.println("短信条数:" + remainSmsCount);
System.out.println("上网流量:" + remainFlow); //向下转型上网套餐
} else if (pack instanceof NetPackage) {
NetPackage cardPack = (NetPackage) pack;
//查询套餐内剩余的流量
remainFlow = cardPack.getFlow() > card.getRealFlow() ? cardPack.getFlow() - card.getRealFlow() : 0;
meg.append("通话时长:" + remainFlow + "分钟\n");
System.out.println("您的手机号是:" + mobileCard.getCardNumber() + ",套餐内剩余:");
System.out.println("上网流量:" + remainFlow); //向下转型话痨
} else {
TalkPackage cardPack = (TalkPackage) pack;
//查询套餐内剩余的通话时长
remainTalkTime = cardPack.getTalkTime() > card.getRealTalkTime() ? cardPack.getTalkTime() - card.getRealTalkTime() : 0;
meg.append("通话时长:" + remainTalkTime + "分钟\n"); System.out.println("您的手机号是:" + mobileCard.getCardNumber() + ",套餐内剩余:");
System.out.println("通话时长:" + remainTalkTime);
}
} /**
* 打印消费详单--未实现此功能
*/
public static void printAmountDetail(String number) {
} /**
* 套餐变更---未实现此功能
*/
public static void changingPack(String number) {
} /**
* 办理退网
*/
public static void delCard(String number) {
Set<String> numberKeys = cards.keySet();
Iterator<String> it = numberKeys.iterator();
while (it.hasNext()) {
String numberKey = it.next();
//如果在集合中找到此号码,则删除他,完成退网
if (numberKey.equals(number)) {
//删除
cards.remove(numberKey);
System.out.println("卡号" + number + "办理退网成功\n谢谢使用!");
} else {
System.out.println("没有找到您的手机号码,退卡失败!");
}
}
} /**
* 根据手机号码和密码验证该卡是否已经是移动用户
* 实行登陆操作
*/
public static boolean isExistCard(String number, String passWord) {
if (cards.size() != 0) {
Set<String> numberKeys = cards.keySet();
Iterator<String> its = numberKeys.iterator();
while (its.hasNext()) {
String numberKey = its.next();
//根据key取出对应的值
MobileCard mobileCard = cards.get(numberKey);
//trim()作用是无视开始于结束的空格
if (number.trim().equals(numberKey.trim()) && passWord.trim().equals(mobileCard.getPassWord().trim())) {
System.out.println("尊敬的☆" + mobileCard.getUserName() + "☆五星级会员,恭喜您登陆成功!\n");
return true;
} else if (number.trim().equals(numberKey.trim()) == true && passWord.trim().equals(mobileCard.getPassWord().trim()) == false) {
System.out.println("尊敬的☆" + mobileCard.getUserName() + "☆五星级会员,很遗憾您密码输入错误哦~");
return false;
}
}
System.out.println("对不起您还没有注册会员呢~");
return false;
} else {
System.out.println("对不起您还没有注册会员呢~");
return false;
}
} /**
* 手机号码验证是否已经注册
*/
public static boolean isExistCard(String number) {
if (cards.size() != 0) {
Set<String> numberKeys = cards.keySet();
Iterator<String> its = numberKeys.iterator();
while (its.hasNext()) {
if (number.equals(its.next())) {
return true;
}
}
System.out.println("对不起此号码还不是移动会员~");
return false;
} else {
System.out.println("对不起此号码还不是移动会员~");
return false;
}
} /**
* 生成随机卡号
*/
public static String createNumber() {
Random random = new Random();
boolean isExist = false;
String number = "";
int temp = 0;
do {
isExist = false;
//生成的随机数是8位
do {
temp = random.nextInt(100000000);
} while (temp < 10000000);
//生成之前,前面加“139”
number = "139" + temp;
//和已经注册的用户的卡号对比,重复则无法注册
if (cards != null) { //价格判断
Set<String> cardNumbers = cards.keySet();
for (String cardNumber : cardNumbers) {
if (number.equals(cardNumber)) {
isExist = true;
break;
}
}
} } while (isExist);
return number;
} /**
* 生成指定个数的卡号列表
*/
public static String[] getNewNumbers(int count) {
String[] strs = new String[count];
for (int i = 0; i < count; i++) {
strs[i] = createNumber();
}
return strs;
} /**
* 添加指定卡号的消费记录
*/
public static void addConsumInfo(String number, ConsumInfo info) {
if (consumInfos.containsKey(number)) {
consumInfos.get(number).add(info);
} else {
List<ConsumInfo> list = new ArrayList<ConsumInfo>();
list.add(info);
consumInfos.put(number, list);
}
}
}
import java.io.IOException;
import java.util.Scanner; /**
* 业务类
*/
class SosoMgr {
Scanner input = new Scanner(System.in); /**
* 实现主菜单
*/
public void mainMenu() throws IOException {
String number = "";
boolean flag = true; do {
System.out.println("*****************欢迎使用嗖嗖移动业务大厅***************");
System.out.println("*********** 1.用户登录 ***********");
System.out.println("*********** 2.用户注册 ***********");
System.out.println("*********** 3.使用嗖嗖 ***********");
System.out.println("*********** 4.话费充值 ***********");
System.out.println("*********** 5.资费说明 ***********");
System.out.println("*********** 6.客户咨询 ***********");
System.out.println("*********** 7.退出系统 ***********");
System.out.println("*****************国庆钜惠走过路过不要错过***************");
System.out.print("请输入功能编号:");
String num = input.next();
switch (num) {
case "1":
System.out.println("*****************************《用户登录》*****************************");
System.out.print("请输入您的手机号:");
number = input.next();
if (number.length() == 11) {
System.out.print("请输入您的密码:");
String passWord = input.next();
//通过手机号和密码判断该用户是否存在
if (CardUtil.isExistCard(number, passWord)) {
cardMenu(number);
}
flag = true;
} else {
System.out.println("您输入的手机号码格式不正确!");
}
break;
case "2":
System.out.println("*****************************《用户注册》*****************************");
registCard(); flag = true;
break;
case "3":
System.out.println("*****************************《使用嗖嗖》*****************************");
flag = true;
break;
case "4":
System.out.println("*****************************《话费充值》*****************************");
System.out.println("请输入充值手机号码:");
String refill_Number = input.next();
if (CardUtil.isExistCard(refill_Number)) {
CardUtil.chargeMoney(refill_Number);
} flag = true;
break;
case "5":
CardUtil.introduce();
flag = true;
break;
case "6":
System.out.println("*****************************《客户咨询》*****************************");
//客户咨询功能未实现,可在CardUtil类写出ask方法来实现
//CardUtil.ask()
flag = true;
break;
case "7":
System.out.println("*****************************《退出系统》*****************************");
System.out.println("谢谢使用");
flag = false;
break;
default:
System.out.println("输入错误,请重新输入!");
flag = true;
break;
}
} while (flag);
} /**
* 二级菜单
*/
public void cardMenu(String number) {
boolean flag = true;
while (flag) {
System.out.println("*****************************嗖嗖移动用户菜单*****************************");
System.out.println("1.本月账单查询");
System.out.println("2.套餐余量查询");
System.out.println("3.打印消费详单");
System.out.println("4.套餐变更");
System.out.println("5办理退网");
System.out.println("请选择(输入1~5选择功能,其它键返回上一级):");
//num定义为String类型可以防止输入数字过大而导致的InputMismatchException异常
String num = input.next();
switch (num) {
case "1":
System.out.println("*****************************《本月账单查询》*****************************");
CardUtil.showAmountDetail(number);
flag = true;
break;
case "2":
System.out.println("*****************************《套餐余量查询》*****************************");
CardUtil.showRemainDetail(number);
flag = true;
break;
case "3":
System.out.println("*****************************《打印消费详情》*****************************");
CardUtil.printAmountDetail(number);
flag = true;
break;
case "4":
System.out.println("*****************************《套餐变更》*****************************");
CardUtil.changingPack(number);
flag = true;
break;
case "5":
System.out.println("*****************************《办理退网》*****************************");
CardUtil.delCard(number);
flag = true;
break;
default:
flag = false;
break;
}
if (flag) {
System.out.print("输入0返回上一层,输入其他键返回首页:");
int strNum = input.nextInt();
if (strNum == 1) {
continue;
} else {
flag = false;
}
}
}
} /**
* 用户注册
*/
public void registCard() {
MobileCard mobileCard = new MobileCard();
System.out.println("***************************可选择的手机号码***************************");
//通过循环遍历输出卡号,要输出10个号码
String[] cardNumbers = CardUtil.getNewNumbers(9);
for (int i = 0; i < cardNumbers.length; i++) {
System.out.print((i + 1) + "." + cardNumbers[i] + "\t");
if (2 == i || 5 == i || 8 == i) {
System.out.println();
}
}
System.out.print("请选择卡号:");
while (true) {
Scanner input = new Scanner(System.in);
if (input.hasNextInt() == true) {
int num = input.nextInt();
if (0 < num && num < 10) {
mobileCard.setCardNumber(cardNumbers[num - 1]);
break;
} else {
System.out.print("输入错误!请输入(1~9)的数字:");
continue;
}
} else {
System.out.print("输入错误!请输入(1~9)的整数:");
continue;
}
}
System.out.println("1.话唠套餐 2.网虫套餐 3.超人套餐 , 请选择套餐(输入序号):");
boolean bol = true;
while (bol) {
//core定义为String类型可以防止输入数字过大而导致的InputMismatchException异常
String core = input.next();
switch (core) {
case "1":
//从此段注释开始,Case1、Case2、Case3 是相同代码块,只有变量不同
//提取出去写成方法在Case直接调用,无法正确获取注册的手机号码
mobileCard.setSerPackage(Common.superPackage);
System.out.println("请输入姓名:");
String userName = input.next();
mobileCard.setUserName(userName);
System.out.println("请输入密码:");
String passWord = input.next();
mobileCard.setPassWord(passWord);
System.out.println("请输入预存话费:");
int money = input.nextInt();
mobileCard.setMoney(money);
System.out.println("注册成功!手机号:" + mobileCard.getCardNumber() + ",用户名:" + mobileCard.getUserName() +
",当前余额为:" + mobileCard.getMoney() + "元");
//到此段注释结束 //把注册的值给集合
MobileCard newmobileCard = new MobileCard(mobileCard.getCardNumber(), mobileCard.getUserName(), mobileCard.getPassWord(), Common.talkPackage);
CardUtil.addCard(newmobileCard);
bol = false;
break;
case "2":
//从此段注释开始,Case1、Case2、Case3 是相同代码块,只有变量不同
//提取出去写成方法在Case直接调用,无法正确获取注册的手机号码
mobileCard.setSerPackage(Common.superPackage);
System.out.println("请输入姓名:");
String userName2 = input.next();
mobileCard.setUserName(userName2);
System.out.println("请输入密码:");
String passWord2 = input.next();
mobileCard.setPassWord(passWord2);
System.out.println("请输入预存话费:");
int money2 = input.nextInt();
mobileCard.setMoney(money2);
System.out.println("注册成功!手机号:" + mobileCard.getCardNumber() + ",用户名:" + mobileCard.getUserName() +
",当前余额为:" + mobileCard.getMoney() + "元");
//到此段注释结束 //把注册的值给集合
MobileCard newmobileCard2 = new MobileCard(mobileCard.getCardNumber(), mobileCard.getUserName(), mobileCard.getPassWord(), Common.netPackage);
CardUtil.addCard(newmobileCard2);
bol = false;
break;
case "3":
//从此段注释开始,Case1、Case2、Case3 是相同代码块,只有变量不同
//提取出去写成方法在Case直接调用,无法正确获取注册的手机号码
mobileCard.setSerPackage(Common.superPackage);
System.out.println("请输入姓名:");
String userName3 = input.next();
mobileCard.setUserName(userName3);
System.out.println("请输入密码:");
String passWord3 = input.next();
mobileCard.setPassWord(passWord3);
System.out.println("请输入预存话费:");
int money3 = input.nextInt();
mobileCard.setMoney(money3);
System.out.println("注册成功!手机号:" + mobileCard.getCardNumber() + ",用户名:" + mobileCard.getUserName() +
",当前余额为:" + mobileCard.getMoney() + "元");
//到此段注释结束 //把注册的值给集合
MobileCard newmobileCard3 = new MobileCard(mobileCard.getCardNumber(), mobileCard.getUserName(), mobileCard.getPassWord(), Common.superPackage);
CardUtil.addCard(newmobileCard3);
bol = false;
break;
default:
System.out.println("输入错误,请重新选择:");
bol = true;
break;
}
}
} public static void main(String[] args) throws IOException { //给MobMobileCard的带参方法传入相应的值
MobileCard mobileCard = new MobileCard("36949889123", "张余生", "123",
Common.talkPackage, 0, 100, 0, 0, 0);
MobileCard mobileCard2 = new MobileCard("12345678912", "飙车司机王", "123",
Common.superPackage, 0, 100, 200, 100, 1); //把这些值传给CardUtil方法里会进入集合
CardUtil.addCard(mobileCard);
CardUtil.addCard(mobileCard2);
SosoMgr sosoMgr = new SosoMgr();
sosoMgr.mainMenu();
}
}
//本地套餐家介绍文本如下,可以直接用system.out.println输出,也可以用File方法读取本地txt文件

******************************《套餐介绍》******************************
***********************  **********************  ***********************
** 套餐类型:话唠套餐 *  *                    *  * 套餐类型:超人套餐 **
**  通话时长:400分钟 *  * 套餐类型:网虫套餐 *  * 通话时长:200分钟  **
**    短信条数:200条 *  *   上网流量:3GB    *  *   短信条数:100条  **
**    月租费:38元    *  *    月资费:66元    *  *    上网流量:1GB   **
**                     *  *                    *  *     月资费:88元   **
***********************  **********************  ***********************
******************************《国庆钜惠》******************************

最新文章

  1. 学习Scala02 基本类型
  2. PHP in_array效率问题
  3. Sql Server 附加没有日志文件的数据库(.mdf)文件方法
  4. IOS 使用block完成网络请求的自定义类BlockURLConnection
  5. 《Linux/Unix系统编程手册》读书笔记3
  6. [转]利用vertical-align:middle实现在整个页面居中
  7. 隐藏android中EditText中的下划线以及修改光标颜色
  8. ice grid 完整部署过程
  9. MySQL my.cnf 配置文件注释
  10. 菜鸟系列docker——docker基本概念(1)
  11. awk简单用法-(1)
  12. Bellman-Ford算法模板题
  13. 被深信服上网行为管理器AC拒绝的操作如何正常访问
  14. ERC 725 and ERC 735 的实现及关系
  15. thinkphp中order方法
  16. Javascript的V8引擎研究
  17. JDK源码分析(一)——ArrayList
  18. Oracle安装部署之 timesten install on redhat6.5
  19. linux hosts.equiv设置解析
  20. 【DataGuard】部署Data Guard相关参数详解 (转载)

热门文章

  1. Spring Cloud 入门Eureka -Consumer服务消费(Ribbon)(二)
  2. 采坑笔记——mysql的order by和limit排序问题
  3. Windows Server 2008 IIS 并发请求设置
  4. ethereum(以太坊)(十二)--应用(一)__集资(构造函数/映射)
  5. mysql 存储过程的基本语法知识
  6. Aizu:2170-Marked Ancestor
  7. talent-aio源码阅读小记(二)
  8. Vsftpd服务 和 TFTP协议
  9. idea录制宏
  10. centos使用--软件启动关闭等操作的命令