print socket.gethostbyname('www.baidu.com')

fping功能

https://www.cnblogs.com/zhoujie/p/python17.html

适合服务器数量较大时使用,fping命令,它是对一个文件的批量ping,瞬间完成的,如果ping不通,那就较慢,日常ping不通的毕竟是少数,所以这个非常适用。来感受一下,它ping的结果,新建一个文件iplist,里面是IP列表,fping结果如下:

其实结果就两个 is alive / is unrreachable ,其它的中间检测时它自己输出的不用理会。

fping.sh :

#!/bin/bash

rm -f result.txt

cat ipmi_ping.txt | fping > result.txt

思路也很简单,将IP列表读取来写进一个iplist文件,然后再对这个文件fping(调用fping.sh)批量执行的结果写进result文件:

def check_online_ip():

ip = mysql('select * from ip_check')

#将IP写进一个文件

if os.path.exists('iplist.txt'):

os.remove('iplist.txt')

iplist= 'iplist.txt'

for i in range(0,len(ip)):

with open(iplist, 'a') as f:

f.write(ip[i][0]+'\n')

#对文件中的IP进行fping

p = subprocess.Popen(r'./fping.sh',stdout=subprocess.PIPE)

p.stdout.read()#读result.txt文件,将IP is unreachable的行提取更新mysql状态为1

result = open('result.txt','r')

content = result.read().split('\n')

for i in range(0,len(content)-1):

tmp = content[i]

ip = tmp[:tmp.index('is')-1]

Status = 0

if 'unreachable' in tmp:

Status = 1

#print i,ip

mysql('update ip_check set Status=%d where IP="%s"'%(Status,ip))

print 'check all ipconnectness over!'

将这个搞成计划任务,每天跑几遍,还是挺赞的。 呵呵。。

代码

#!/usr/bin/env python

"""

A pure python ping implementation using raw socket.

Note that ICMP messages can only be sent from processes running as root.

Derived from ping.c distributed in Linux's netkit. That code is

copyright (c) by The Regents of the University of California.

That code is in turn derived from code written by Mike Muuss of the

US Army Ballistic Research Laboratory in December, and

placed in the public domain. They have my thanks.

Bugs are naturally mine. I'd be glad to hear about them. There are

certainly word - size dependenceies here.

Copyright (c) Matthew Dixon Cowles, .

Distributable under the terms of the GNU General Public License

version . Provided with no warranties of any sort.

Original Version from Matthew Dixon Cowles:

-> ftp://ftp.visi.com/users/mdc/ping.py

Rewrite by Jens Diemer:

-> http://www.python-forum.de/post-69122.html#69122

Rewrite by George Notaras:

-> http://www.g-loaded.eu/2009/10/30/python-ping/

Fork by Pierre Bourdon:

-> http://bitbucket.org/delroth/python-ping/

Revision history

~~~~~~~~~~~~~~~~

November ,

-----------------

Initial hack. Doesn't do much, but rather than try to guess

what features I (or others) will want in the future, I've only

put in what I need now.

December ,

-----------------

For some reason, the checksum bytes are in the wrong order when

this is run under Solaris .X for SPARC but it works right under

Linux x86. Since I don't know just what's wrong, I'll swap the

bytes always and then do an htons().

December ,

----------------

Changed the struct.pack() calls to pack the checksum and ID as

unsigned. My thanks to Jerome Poincheval for the fix.

May ,

------------

little rewrite by Jens Diemer:

- change socket asterisk import to a normal import

- replace time.time() with time.clock()

- delete "return None" (or change to "return" only)

- in checksum() rename "str" to "source_string"

November ,

----------------

Improved compatibility with GNU/Linux systems.

Fixes by:

* George Notaras -- http://www.g-loaded.eu

Reported by:

* Chris Hallman -- http://cdhallman.blogspot.com

Changes in this release:

- Re-use time.time() instead of time.clock(). The implementation

worked only under Microsoft Windows. Failed on GNU/Linux.

time.clock() behaves differently under the two OSes[].

[] http://docs.python.org/library/time.html#time.clock

September ,

------------------

Little modifications by Georgi Kolev:

- Added quiet_ping function.

- returns percent lost packages, max round trip time, avrg round trip

time

- Added packet size to verbose_ping & quiet_ping functions.

- Bump up version to 0.2

"""

__version__ = "0.2"

import os

import select

import socket

import struct

import sys

import time

# From /usr/include/linux/icmp.h; your milage may vary.

ICMP_ECHO_REQUEST = # Seems to be the same on Solaris.

def checksum(source_string):

"""

I'm not too confident that this is right but testing seems

to suggest that it gives the same answers as in_cksum in ping.c

"""

sum =

count_to = (len(source_string) / ) *

for count in xrange(, count_to, ):

this = ord(source_string[count + ]) * + ord(source_string[count])

sum = sum + this

sum = sum & 0xffffffff # Necessary?

if count_to < len(source_string):

sum = sum + ord(source_string[len(source_string) - ])

sum = sum & 0xffffffff # Necessary?

sum = (sum >> ) + (sum & 0xffff)

sum = sum + (sum >> )

answer = ~sum

answer = answer & 0xffff

# Swap bytes. Bugger me if I know why.

answer = answer >> | (answer << & 0xff00)

return answer

def receive_one_ping(my_socket, id, timeout):

"""

Receive the ping from the socket.

"""

time_left = timeout

while True:

started_select = time.time()

what_ready = select.select([my_socket], [], [], time_left)

how_long_in_select = (time.time() - started_select)

if what_ready[] == []: # Timeout

return

time_received = time.time()

received_packet, addr = my_socket.recvfrom()

icmpHeader = received_packet[:]

type, code, checksum, packet_id, sequence = struct.unpack(

"bbHHh", icmpHeader

)

if packet_id == id:

bytes = struct.calcsize("d")

time_sent = struct.unpack("d", received_packet[: + bytes])[]

return time_received - time_sent

time_left = time_left - how_long_in_select

if time_left <= :

return

def send_one_ping(my_socket, dest_addr, id, psize):

"""

Send one ping to the given >dest_addr<.>

"""

dest_addr = socket.gethostbyname(dest_addr)

# Remove header size from packet size

psize = psize -

# Header is type (), code (), checksum (), id (), sequence ()

my_checksum =

# Make a dummy heder with a checksum.

header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, , my_checksum, id, )

bytes = struct.calcsize("d")

data = (psize - bytes) * "Q"

data = struct.pack("d", time.time()) + data

# Calculate the checksum on the data and the dummy header.

my_checksum = checksum(header + data)

# Now that we have the right checksum, we put that in. It's just easier

# to make up a new header than to stuff it into the dummy.

header = struct.pack(

"bbHHh", ICMP_ECHO_REQUEST, , socket.htons(my_checksum), id,

)

packet = header + data

my_socket.sendto(packet, (dest_addr, )) # Don't know about the 1

def do_one(dest_addr, timeout, psize):

"""

Returns either the delay (in seconds) or none on timeout.

"""

icmp = socket.getprotobyname("icmp")

try:

my_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)

except socket.error, (errno, msg):

if errno == :

# Operation not permitted

msg = msg + (

" - Note that ICMP messages can only be sent from processes"

" running as root."

)

raise socket.error(msg)

raise # raise the original error

my_id = os.getpid() & 0xFFFF

send_one_ping(my_socket, dest_addr, my_id, psize)

delay = receive_one_ping(my_socket, my_id, timeout)

my_socket.close()

return delay

def verbose_ping(dest_addr, timeout = , count = , psize = ):

"""

Send `count' ping with `psize' size to `dest_addr' with

the given `timeout' and display the result.

"""

for i in xrange(count):

print "ping %s with ..." % dest_addr,

try:

delay = do_one(dest_addr, timeout, psize)

except socket.gaierror, e:

print "failed. (socket error: '%s')" % e[]

break

if delay == None:

print "failed. (timeout within %ssec.)" % timeout

else:

delay = delay *

print "get ping in %0.4fms" % delay

print

def quiet_ping(dest_addr, timeout = , count = , psize = ):

"""

Send `count' ping with `psize' size to `dest_addr' with

the given `timeout' and display the result.

Returns `percent' lost packages, `max' round trip time

and `avrg' round trip time.

"""

mrtt = None

artt = None

lost =

plist = []

for i in xrange(count):

try:

delay = do_one(dest_addr, timeout, psize)

except socket.gaierror, e:

print "failed. (socket error: '%s')" % e[]

break

if delay != None:

delay = delay *

plist.append(delay)

# Find lost package percent

percent_lost = - (len(plist) * / count)

# Find max and avg round trip time

if plist:

mrtt = max(plist)

artt = sum(plist) / len(plist)

return percent_lost, mrtt, artt

if __name__ == '__main__':

#verbose_ping("heise.de")

#verbose_ping("google.com")

#verbose_ping("a-test-url-taht-is-not-available.com")

verbose_ping("www.xd.com")

print quiet_ping("www.xd.com",count=)

说明:

1. 主要是两个函数 verbose_ping(显示的ping) 和 quiet_ping(计算了丢包率,最大延迟和平均延迟)

2. python3.6会不支持里面的部分语法,在pycharm中执行autopep8后即可。并给print加括号,range替换python2 的xrange

#!/usr/bin/env python

"""

A pure python ping implementation using raw socket.

Note that ICMP messages can only be sent from processes running as root.

Derived from ping.c distributed in Linux's netkit. That code is

copyright (c) by The Regents of the University of California.

That code is in turn derived from code written by Mike Muuss of the

US Army Ballistic Research Laboratory in December, and

placed in the public domain. They have my thanks.

Bugs are naturally mine. I'd be glad to hear about them. There are

certainly word - size dependenceies here.

Copyright (c) Matthew Dixon Cowles, .

Distributable under the terms of the GNU General Public License

version . Provided with no warranties of any sort.

Original Version from Matthew Dixon Cowles:

-> ftp://ftp.visi.com/users/mdc/ping.py

Rewrite by Jens Diemer:

-> http://www.python-forum.de/post-69122.html#69122

Rewrite by George Notaras:

-> http://www.g-loaded.eu/2009/10/30/python-ping/

Fork by Pierre Bourdon:

-> http://bitbucket.org/delroth/python-ping/

Revision history

~~~~~~~~~~~~~~~~

November ,

-----------------

Initial hack. Doesn't do much, but rather than try to guess

what features I (or others) will want in the future, I've only

put in what I need now.

December ,

-----------------

For some reason, the checksum bytes are in the wrong order when

this is run under Solaris .X for SPARC but it works right under

Linux x86. Since I don't know just what's wrong, I'll swap the

bytes always and then do an htons().

December ,

----------------

Changed the struct.pack() calls to pack the checksum and ID as

unsigned. My thanks to Jerome Poincheval for the fix.

May ,

------------

little rewrite by Jens Diemer:

- change socket asterisk import to a normal import

- replace time.time() with time.clock()

- delete "return None" (or change to "return" only)

- in checksum() rename "str" to "source_string"

November ,

----------------

Improved compatibility with GNU/Linux systems.

Fixes by:

* George Notaras -- http://www.g-loaded.eu

Reported by:

* Chris Hallman -- http://cdhallman.blogspot.com

Changes in this release:

- Re-use time.time() instead of time.clock(). The implementation

worked only under Microsoft Windows. Failed on GNU/Linux.

time.clock() behaves differently under the two OSes[].

[] http://docs.python.org/library/time.html#time.clock

September ,

------------------

Little modifications by Georgi Kolev:

- Added quiet_ping function.

- returns percent lost packages, max round trip time, avrg round trip

time

- Added packet size to verbose_ping & quiet_ping functions.

- Bump up version to 0.2

"""

__version__ = "0.2"

import os

import select

import socket

import struct

import sys

import time

# From /usr/include/linux/icmp.h; your milage may vary.

ICMP_ECHO_REQUEST = # Seems to be the same on Solaris.

def checksum(source_string):

"""

I'm not too confident that this is right but testing seems

to suggest that it gives the same answers as in_cksum in ping.c

"""

sum =

count_to = (len(source_string) / ) *

for count in xrange(, count_to, ):

this = ord(source_string[count + ]) * + ord(source_string[count])

sum = sum + this

sum = sum & 0xffffffff # Necessary?

if count_to < len(source_string):

sum = sum + ord(source_string[len(source_string) - ])

sum = sum & 0xffffffff # Necessary?

sum = (sum >> ) + (sum & 0xffff)

sum = sum + (sum >> )

answer = ~sum

answer = answer & 0xffff

# Swap bytes. Bugger me if I know why.

answer = answer >> | (answer << & 0xff00)

return answer

def receive_one_ping(my_socket, id, timeout):

"""

Receive the ping from the socket.

"""

time_left = timeout

while True:

started_select = time.time()

what_ready = select.select([my_socket], [], [], time_left)

how_long_in_select = (time.time() - started_select)

if what_ready[] == []: # Timeout

return

time_received = time.time()

received_packet, addr = my_socket.recvfrom()

icmpHeader = received_packet[:]

type, code, checksum, packet_id, sequence = struct.unpack(

"bbHHh", icmpHeader

)

if packet_id == id:

bytes = struct.calcsize("d")

time_sent = struct.unpack("d", received_packet[: + bytes])[]

return time_received - time_sent

time_left = time_left - how_long_in_select

if time_left <= :

return

def send_one_ping(my_socket, dest_addr, id, psize):

"""

Send one ping to the given >dest_addr<.>

"""

dest_addr = socket.gethostbyname(dest_addr)

# Remove header size from packet size

psize = psize -

# Header is type (), code (), checksum (), id (), sequence ()

my_checksum =

# Make a dummy heder with a checksum.

header = struct.pack("bbHHh", ICMP_ECHO_REQUEST, , my_checksum, id, )

bytes = struct.calcsize("d")

data = (psize - bytes) * "Q"

data = struct.pack("d", time.time()) + data

# Calculate the checksum on the data and the dummy header.

my_checksum = checksum(header + data)

# Now that we have the right checksum, we put that in. It's just easier

# to make up a new header than to stuff it into the dummy.

header = struct.pack(

"bbHHh", ICMP_ECHO_REQUEST, , socket.htons(my_checksum), id,

)

packet = header + data

my_socket.sendto(packet, (dest_addr, )) # Don't know about the 1

def do_one(dest_addr, timeout, psize):

"""

Returns either the delay (in seconds) or none on timeout.

"""

icmp = socket.getprotobyname("icmp")

try:

my_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)

except socket.error as xxx_todo_changeme:

(errno, msg) = xxx_todo_changeme.args

if errno == :

# Operation not permitted

msg = msg + (

" - Note that ICMP messages can only be sent from processes"

" running as root."

)

raise socket.error(msg)

raise # raise the original error

my_id = os.getpid() & 0xFFFF

send_one_ping(my_socket, dest_addr, my_id, psize)

delay = receive_one_ping(my_socket, my_id, timeout)

my_socket.close()

return delay

def verbose_ping(dest_addr, timeout=, count=, psize=):

"""

Send `count' ping with `psize' size to `dest_addr' with

the given `timeout' and display the result.

"""

for i in xrange(count):

print("ping %s with ..." % dest_addr,)

try:

delay = do_one(dest_addr, timeout, psize)

except socket.gaierror as e:

print("failed. (socket error: '%s')" % e[])

break

if delay is None:

print("failed. (timeout within %ssec.)" % timeout)

else:

delay = delay *

print("get ping in %0.4fms" % delay)

print

def quiet_ping(dest_addr, timeout=, count=, psize=):

"""

Send `count' ping with `psize' size to `dest_addr' with

the given `timeout' and display the result.

Returns `percent' lost packages, `max' round trip time

and `avrg' round trip time.

"""

mrtt = None

artt = None

lost =

plist = []

for i in range(count):

try:

delay = do_one(dest_addr, timeout, psize)

except socket.gaierror as e:

print("failed. (socket error: '%s')" % e[])

break

if delay is not None:

delay = delay *

plist.append(delay)

# Find lost package percent

percent_lost = - (len(plist) * / count)

# Find max and avg round trip time

if plist:

mrtt = max(plist)

artt = sum(plist) / len(plist)

print(plist)

print(len(plist))

return percent_lost, mrtt, artt

# if __name__ == '__main__':

# verbose_ping("heise.de")

# verbose_ping("google.com")

# verbose_ping("a-test-url-taht-is-not-available.com")

# verbose_ping("www.xd.com")

# print quiet_ping("www.xd.com", count=)

python3中的如上文件

Python标准模块--threading

1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

Day05 - Python 常用模块

1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...

python常用模块-调用系统命令模块(subprocess)

python常用模块-调用系统命令模块(subprocess) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. subproces基本上就是为了取代os.system和os.spaw ...

Python的模块引用和查找路径

模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

Python Logging模块的简单使用

前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

Python标准模块--logging

1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

python基础-模块

一.模块介绍                                                                                              ...

python 安装模块

python安装模块的方法很多,在此仅介绍一种,不需要安装其他附带的pip等,python安装完之后,配置环境变量,我由于中英文分号原因,环境变量始终没能配置成功汗. 1:下载模块的压缩文件解压到任意 ...

python Queue模块

先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...

随机推荐

&lbrack;置顶&rsqb;PADS PCB功能使用技巧系列之NO&period;006- 如何实现OrCAD与PADS Layout同步?

很多同仁都喜欢用OrCAD画原理图,而PCB Layout则用PADS/PowerPCB,这两者被有些人誉为“黄金组合”,但由于两者并非一套软件,因此如何实现同步亦是需要急待解决的问题... (未完待 ...

usb驱动开发18之设备生命线

现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符.接口描述符还是端点描述符都挤在一起,所以得想办法将 ...

解决kettle配置文件中的中文乱码

在日常开发中有时候配置文件会出现中文(如config.properties 里有中文),为了避免出现乱码,因而要转成unicode编码. 1.在设置变量的javascript(转换中的JavaScri ...

DB2对年份的处理Year&lpar;&rpar;

public DataSet GetCustomerAllocListByQC(CustomerAllocQueryDataContract aQC) { StringBuilder sql = ne ...

图片裁切插件jCrop的使用心得(二)

上一篇简单的介绍了一下开发的背景以及一些学习资料,下面开始介绍如何上手. 一.下载jCrop http://deepliquid.com/content/Jcrop_Download.html 直接去 ...

Map集合中value()方法与keySet()、entrySet&lpar;&rpar;区别

http://blog.csdn.net/liu826710/article/details/9001254 在Map集合中 values():方法是获取集合中的所有的值----没有键,没有对应关系, ...

Parallel&period;Foreach的并发问题解决方法-比如爬虫WebClient

场景五:线程局部变量 Parallel.ForEach 提供了一个线程局部变量的重载,定义如下: public static ParallelLoopResult ForEach

lua学习笔记11:lua中的小技巧

lua中的小技巧,即基础lua语言本身的特种,进行一个些简化的操作 一. 巧用or x = x or v 等价于: if not x then x = v end 假设x为nil或false,就给他赋 ...

codeforces 372E&period; Drawing Circles is Fun

tags:[圆の反演][乘法原理][尺取法]题解:圆の反演:将过O点的圆,映射成不过O的直线,相切的圆反演出来的直线平行.我们将集合S中的点做反演变换:(x,y)->(x/(x^2+y^2), ...

VUE 创建element项目

前提:电脑安装git node.js 一.右键Git Bash Here 二.$ vue init webpack element //新建一个element项目,element是文件夹名字 $ cd ...

python3导入ping模块_Python ping 模块相关推荐

  1. python导入pillow模块_Python -Pillow模块使用

    无聊在Github上看见python的趣味练习题,自己试着做了做 第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 这个题目主要是练习对P ...

  2. python如何自定义模块_python自定义模块和开源模块使用方法

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  3. python manager模块_Python 并发模块

    Python 并发模块 multiprocessing 介绍 multiprocessing 是一个用与 threading 模块相似API的支持产生进程的包. multiprocessing 包同时 ...

  4. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  5. python shelve模块_python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  6. python 多层包多模块_python Modules模块操作

    今天学习python的Modules模块操作,并记录学习过程欢迎大家一起交流分享. 首先新建一个python文件命名为my_module.py的自定义moudle文件,在这个文件中进行模块代码编写: ...

  7. python中的模块_python的模块和包的详细说明

    Python模块和包的详细说明 模块的导入 模块的加载与修改 模块和脚本的说明 模块搜索路径 包的导入 一.模块的导入 之前我们简单的使用了一下模块,并没有详细的介绍,现在我们来详细的说说 1.什么是 ...

  8. python文件操作和模块_Python(五)--模块与文件操作

    Python(五)–模块与文件操作 模块和包 模块 模块是包含Python定义和语句的文件,把一组相关函数或代码组织到一个文件中,一个文件即一个模块.模块的文件名 = 模块名+后缀.py 模块之间代码 ...

  9. python常用运维模块_python常用模块之一

    sys模块: sys模块是提供关于python本身的详细内在的信息的模块. sys.executable变量,它包含python解释器的路径 sys.platform变量,告诉我们现在处于什么操作系统 ...

最新文章

  1. C语言 | C编程练习题(代码版)
  2. java读取dat_使用在eclipse java.io库,以便能的FileInputStream读取dat文件
  3. 20应用统计考研复试要点(part37)--概率论与数理统计
  4. set 和select 的区别
  5. 数据结构与算法————稀疏数组
  6. 获取数组中的最大、最小值
  7. Linux服务器性能监控工具
  8. 两天撸一个天气应用微信小程序
  9. 高级英语(张汉熙版)第一册学习笔记(原文及全文翻译)——2 - Hiroshima-The “Liveliest“ City in Japan (excerpts)(广岛——日本“最有活力”的城市)
  10. 301work 不积跬步无以至千里Asp.net程序
  11. 失落的帝国攻略java,失落的帝国 --- 吴哥旅游日记(8)
  12. JPress安装部署及模板开发
  13. 解决svmtrain已被删除问题
  14. Apple Pay线上支付的流程和app应用内接入的方法
  15. 第一次.......
  16. 第四章 JavaWeb CSS入门 核心基础 基础形式 + 选择器
  17. python生成日期列表_PYTHON生成日期维度表
  18. python 热图颜色_Python可视化matplotlibseborn14-热图heatmap
  19. AP模式(路由器的几种模式)
  20. matlab电流表怎么连线,数显电压电流表接线图 数显电压电流表电路图

热门文章

  1. 什么是 Web 应用里加载 google font 带来的 FOIT 和 FOUT 问题?
  2. java监听设计模式----得-先理解观察者设计模式
  3. 皇室战争挑战模式锦标赛概率分析
  4. atlas单机模式代码_为什么说海盗战争游戏《ATLAS》很佛系?看看这些玩法就知道了...
  5. Day3 Java基础语法
  6. c 语言求字符数组长度,C/C++中获取数组长度的方法示例
  7. 一个程序最多可以使用多少内存?
  8. java 实现 string类_java 中String类的常用方法总结,带你玩转String类。
  9. 给自己的XTC820摆拍一下。
  10. 记录个人web测试总结经验