附:旗东设备点表
安装串口服务器时,需注意com口顺序及485线序
站室点表需要传入网关中,所以点表配置即为网关配置
主要涉及的有
一般情况需要修改的为设备地址项与IP地址项,设备地址项为主站总召的网关名称,IP地址为主站的mqtt服务器地址
需要修改的为对方IP与端口号(通过485传输的无需填写),如需增加硬件,则需将硬件接口、波特率、停止位、数据位、校验方式、传感器厂家id与config表中的数据对应
网关本体1 为配置网关的DNS地址,需要配置为网关地址,格式为:route add default gw xxx.xxx.xxx.xxx
网关本体2 为配置网关的ip地址,需要配置为网关地址,格式为:ifconfig eth0:1 xxx.xxx.xxx.xxx
eth0:1 为给第一个网口添加一个IP地址,而不是直接修改IP地址,以防止数据库上传错误后无法连接网关
此处的参数序号,对应mqtt点表中的参数序号,硬件id对应硬件配置中的id
参数序号一般为一种硬件对应一个,但消防、休普温度等,由于一次485命令最多读取100个点位,实际检测点位较多,则需要对应多个参数序号
参数序号理论上可以自由指定,但为了统一维护方便,请按照以下定义:
环境21-40、局放41-60、机器人61-80、机械特性81-100、消防101-120、休普121-140、
电池141-160、安防主机160-180。
注:1-20为网关本身预留,如有新增设备类型,从180继续增加。每个类型预留20个设备号。
首先需要确定的是点表序号,点表序号为主键,唯一值,为了方便管理,按如下规范定义点表序号:点表序号定义
位置为设备安装位置,此项内容会传输到主站作为设备安装展示,需要与现场对应,建议与主站沟通确定格式
点类型为 a_bit 表的外键,为区分不同监测传感器的唯一标识,同一厂家、同种设备的点类型为唯一,需要在 a_bit 表中查找确定
参数序号为服务参数表中参数序号的外键,一般同种设备相同,但消防、修普等可能会有不同,需要注意
位号为监测点位顺序号:
值、状态,默认为0即可
模块号和设备号即为整理点表时的调度号
其他剩余项: 阈值、倍数、精度、越限值,不同的设备填写的数值不同,需要根据实际情况确定
点表配置完成后,需要将点表数据库写入网关
首先需要将数据库文件重命名为:00-0.0.6.db
使用ssh或者telnet连接到网关
在命令行使用 scp 或者 使用图形化软件winSCP 将数据库文件复制到 /ts/db/ 目录下
命令行下使用 ls -l /ts/db 查看数据库文件修改时间,确定修改文件正确
命令行下使用 reboot 重启网关,加载配置文件
]]>Hyper-V中创建虚拟机后,可以连接虚拟交换机,通过虚拟交换机连接到物理机
但虚拟机如果有端口需要对外提供服务时,外部网络只能访问到物理机,无法访问到虚拟交换机的网络
此时则可以使用 netsh 将虚拟机网络端口映射到物理机
添加端口转发
比如使用IPv4+Port访问转发到IPv4+Port访问,就使用
netsh interface portproxy add v4tov4 listenaddress=监听IP listenport=监听端口 connectport=目标端口 connectaddress=目标IP
其中listenaddress可以省略,省略后就会监听所有访问物理机的IP,就不用担心网络环境改变后物理机的IP改变需要重新设置的问题
比如我想外部访问80端口,转发到虚拟机的172.17.89.39:80,则命令如下(不指定IP时则监听所有IP):
1 | netsh interface portproxy add v4tov4 listenport=80 connectport=80 connectaddress=192.168.147.199 |
删除端口转发
比如我要删除一个v4tov4的端口转发,就使用
netsh interface portproxy delete v4tov4 listenaddress=监听IP listenport=监听端口
如果你的监听IP设置的泛型,删除也不用填
比如我要删除上述添加的转发规则,命令就是
1 | netsh interface portproxy delete v4tov4 listenport=80 |
查看所有转发规则
使用如下命令
1 | netsh interface portproxy show all |
当然如果你只想看v4tov4
就把最后改为v4tov4
1 | netsh interface portproxy show v4tov4 |
ZeroTier
是一个基于UDP的异地组网工具,支持多平台,开箱即用。首次连接需要与转发服务器通信,建立连接后,则直接在两个客户端间通过UDP通信。
Linux下安装方式如下,其它系统可以参照官网:https://www.zerotier.com/download/
1 | curl -s https://install.zerotier.com/ | sudo bash |
注意:此安装方式不适用于openwrt系统,openwrt可以直接安装ipk插件
opkg install zerotier
Linux服务器可以作为Moon节点,可以改善与ZeroTier
官方服务器通信的延迟。
1 | zerotier-cli join 网络ID |
zerotier-one
目录,生成配置文件1 | cd /var/lib/zerotier-one |
修改文件中的“stableEndpoints”为 VPS的IP地址及开放的端口号,例如“stableEndpoints: [“8.8.8.8/9993”]
1 | zerotier-idtool genmoon moon.json |
1 | service zerotier-one restart |
在安装目录下创建一个moons.d文件夹,将签名文件放入,随后重启服务即可。
在命令行执行:zerotier-cli listpeers
,如果有Moon节点标签,则连接成功
ZeroTier会自动对安装了客户端的机器进行配置下发,在网站管理面板直接修改配置后,几分钟即可自动下发到客户端。
在某些情况下,网络中的设备,不一定支持安装zerotier客户端,或者多客户端管理起来比较麻烦,则可以在路由器上安装zerotier,然后将整个路由器下的设备进行异地组网。
需要zerotier虚拟局域网的网段与路由器lan下的网段不同,若多个路由的lan网段组网,需要每个路由下的lan网段不同。
如zerotier的虚拟网段为:10.147.17.*,给路由器分配的IP为10.147.17.10,路由器下lan的网段为192.168.1.0,则需要添加的路由为:192.168.1.0 via 10.147.17.10
添加路由后,等待几分钟(配置下发时间),即可在别的加入虚拟网络中的客户端,直接使用192.168.1.*
地址访问路由器下的内网机器。
引入:
特征:多路性、独立性、及时性、交互性
类型:
1、并行与并发
并行是指两个或多个时间在同一时刻发生,并发是指两个或多个事件在同一时间间隔内发生。
2、进程
是指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令数据和堆栈组成的,是一个能独立运行的活动实体。
前趋图:为了能更好的描述程序的顺序和并执行情况。
顺序执行:顺序性、封闭性、可再现性
并发执行:间断性、失去封闭性、不可再现性
定义:
含义:
信号量是一个用来实现进程同步的整型或记录型变量,除了定义初始化
外,对它只能执行 wait(或P)
和signal(或V)
这两种原子操作。
一个信号量S通常对应于一类资源
为了实现进程对临界资源的互斥访问,需为每类临界资源设置一初值为 1的互斥信号量mutex。
对于信号量机制,每个访问临界资源的进程自备wait、signal操作,给系统管理带来了麻烦,而且容易出现死锁。
共享变量分部到各程序中,使程序易读性差。
正确性难以保证。
将共享资源用共享数据结构表示,用对数据结构操作的一组过程表示资源管理程序, 将共享数据结构和对它们的操作集中在一个模块中形成管程。
一个管程定义了一个数据结构和能为并发进程所执行在该数据结构上的一组操作,这组操作能同步进程和改变管程中的数据。
☞若干进程共享缓存去的同步问题
利用记录型信号量解决:
基本工作:
互斥:缓冲池是临界资源,设置信号量mutex=1
同步: (生产者)有空缓冲区放产品,唤醒等待的消费者进程;无空缓冲区则阻塞。
(消费者)有产品取走,唤醒等待的生产者进程;无产品则阻塞。
实现同步需要设置两个信号量empty=n,full=0
1 | void producer(){ |
作业
进程的概念(定义) 状态 特征 标志 进程与程序的关系(异同)
必需:
可选:
Ultimate
版, Community
版不支持 web 相关功能。tips: 教育网邮箱可以官网申请一年 Ultimate 激活码
npm install vue-cli
1 | git clone http://222.129.11.38/Waver/vue.git |
1 | cd admin |
启动项目并运行
package.json
中 scripts 下面配置的启动项npm run dev
启动项目安装 vue.js
插件
导入项目
安装依赖项
npm install
npm install
配置运行环境
Edit Configurations
需要修改的文件有
baseurl.config.js
与vue.config.js
配置相关内容,可以参考 webpack 官方文档
主要内容如下:
1 | exports.BASE_URL = { |
1 | devServer: { |
Node.js 版本兼容问题导致,详细问题可查看:issues、stackoverflow
解决方法:
package.json
文件,在 "devDependencies"
下添加一行,然后执行npm install
1 | "@babel/compat-data": "7.9.0" |
1 | npm install -D babel-loader @babel/core @babel/preset-env webpack |
baseurl.config.js
文件中配置的地址冲突所造成的跨域问题,将不需要的地址注释掉即可
详细问题原因可以查看:stackoverflow
偶发性问题,可以根据报错参数,具体查询 nodejs 的文档
]]>写的比较仓促,有问题请及时反馈。
以下仅记录付费课
以下均为专栏
addgroup friends
usermod
groups
delgroup
chown
chgrp
目录权限说明:
文件访问权限:-rw-r--r--
rw- 表明文件的所有者(此处是 oscar)对文件有读、写的权限,但是没有运行的权限。也很好理解,因为这是一个普通文件,默认没有可执行的属性。记住:如果有 w 权限(写的权限),那么表明也有删除此文件的权限;
r-- 表明文件所在的群组(此处是 oscar)的其他用户(除了 oscar 之外)只可以读此文件,但不能写也不能执行,“可远观而不可亵玩焉”;
r-- 表示其他用户(除去 oscar 这个群组的用户)只可以读此文件,但不能写也不能执行。
数字管理权限
权限 | 数字 | 计算 |
---|---|---|
—— | 0 | 0+0+0 |
r- | 4 | 4+0+0 |
-w- | 2 | 0+2+0 |
-x | 1 | 0+0+1 |
rw- | 6 | 4+2+0 |
-wx | 3 | 0+2+1 |
r-x | 5 | 4+0+1 |
rwx | 7 | 4+2+1 |
1 | #文件 file.txt 的所有者增加读和运行的权限。 |
/etc/nanorc
配置文件1 | set mouse |
源文件:/etc/apt/sources.list
更新软件包缓存:sudo apt update
更新软件包:sudo apt upgrade
查询软件包: apt-cache show package_name
安装软件包: sudo dpkg -i *.deb
卸载:sudo dpkg -r xxx
安装手册
1 | sudo apt-get install manpages-de manpages-de-dev manpages-dev glibc-doc manpages-posix-dev manpages-posix |
apropos : 查找功能
locate
sudo updatedb
find
grep 查找数据
grep -E Alias .bashrc
或 egrep
> results.txt :将标准输出重定向到 results.txt 文件中
2> errors.log :将标准错误输出重定向到 errors.log 文件中
2>&1:将标准错误输出重定向到与标准输出相同的地方
cat not_exist_file.csv > results.txt 2>&1
cat not_exist_file.csv >> results.txt 2>&1
<:从文件中读取
<<:从键盘读取
sort -n << END
END:结束符管道符号 | 可以将命令连接起来,好像一个个对接的管道一样,前一个命令的输出成为后一个命令的输入
ps -aux --sort -pcpu | less
根据 CPU 使用率来降序排列ps -aux --sort -pmem | less
根据内存使用率来降序排列ps -aux --sort -pcpu,+pmem | head
将 CPU 和 内存 参数合并到一起,并通过管道显示前 10 个结果原因:系统资源不足、进程运行推进的顺序不合适、资源分配不当等
数据库中解决死锁:
协程的优势,协程的轻量性体现在哪里?
线程与堆栈的关系
★☆☆ 进程状态
★☆☆ 线程实现的方式(Java),优劣
ln file1 file2
ln -s file1 file2
什么是linux的daemon进程?和一般进程有什么区别?
通过free命令查看内存时,看到的buffer和cache各表示什么含义?
apache和nginx这两个web服务器有哪些区别?
应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。
传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
数据链路层 :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
物理层 :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异
表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。
会话层 :建立及管理会话。
TCP/IP : 只有四层,数据链路层和物理层合并为网络接口层
★★★ 三次握手以及四次挥手具体过程、原因、TIME_WAIT
★★★ 可靠传输原理,并设计可靠 UDP 协议
★★☆ 路由选择协议及特点
★★☆ DNS 的端口号;TCP 还是 UDP;作为缓存、负载均衡
★★☆ 浏览器访问页面(输入网址后发生了什么)
★★☆ 集线器、交换机、路由器的作用,以及所属的层次
★★☆ 以太网的特点,以及帧结构
★★★ GET 与 POST 比较:作用、参数、安全性、幂等性、可缓存
★★★ Cookie 作用、安全性问题、和 Session 的比较
★★★ 长连接与短连接原理以及使用场景,流水线
★★★ HTTP 存在的安全性问题,以及 HTTPs 的加密、认证和完整性保护作用
★★☆ 缓存 的Cache-Control 字段、Expires 和 max-age 的区别、ETag 验证原理
★★★ HTTP/1.1 的特性
★★☆ HTTP/1.x 的缺陷,以及 HTTP/2 的特点
★★☆ HTTP 与 FTP 的比较
★☆☆ 状态码
http协议中的keeplive是做什么的?它的适应场景是什么?
http请求有多少种?
查看linux系统中tcp连接的状态和连接数量统计
netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
bash shell 里$0.$?.$$
各表示什么含义
★★★ select、poll、epoll 的原理、比较、以及使用场景;epoll 的水平触发与边缘触发
★★☆ 五种 IO 模型的特点以及比较
多路复用
Java NIO
★★☆ 手写 SQL 语句,特别是连接查询与分组查询
★★☆ 连接查询与子查询的比较
★★☆ drop、delete、truncate 比较
★★☆ 视图的作用,以及何时能更新视图
★☆☆ 理解存储过程、触发器等作用
MySQL主键
事务
答: Python有一个multi-threading包,但是如果你想让multi-thread加速你的代码,那么使用它通常不是一个好主意。
Python有一个名为Global Interpreter Lock(GIL)的结构。 GIL确保只有一个“线程”可以在任何时候执行。一个线程获取GIL,做一点工作,然后将GIL传递到下一个线程。
这种情况很快发生,因此对于人眼看来,您的线程似乎并行执行,但它们实际上只是轮流使用相同的CPU核心。
所有这些GIL传递都增加了执行的开销。这意味着如果您想让代码运行得更快,那么使用线程包通常不是一个好主意。
我们用*args
当我们不确定将多少个参数传递给函数时,或者我们是否要将存储的列表或参数元组传递给函数时。**kwargs
当我们不知道将多少关键字参数传递给函数时,或者它可以用于将字典的值作为关键字参数传递时使用。标识符args和kwargs是一个约定,你也可以使用*bob
和**billy
,但这不是明智之举.
计算出从你生日之日起到今天一共过了多少天?(python、go、shell均可)
逆序输出偶数的平方 [1,2,3,4,5,6,7,8,9]
1 | #列表切片 |
+=
或者 ++
运算符会执行隐式类型转换static块
-> 普通成员和非static
块 -> 构造函数equal()
与 ==
的区别主要记录一下最近在服务器上遇到的问题及解决办法,以便事后查找,以免忘记。
一把梭:
1 | sudo useradd -r -m -s /bin/bash username |
正常方式:
1 | sudo adduser username |
这种方式创建的用户,登陆以后只要一个$,没有显示用户名和路径。
查看 /etc/passwd
后发现,新建的用户未指定 shell,需要指定一下
1 | sudo usermod -s /bin/bash username |
编辑 /etc/sudoers
文件,root 用户可以直接编辑,其他用户使用以下命令授权
1 | + sudo chmod u+w /etc/sudoers 授权 |
然后增加以下行(按需添加)
1 | youuser ALL=(ALL) ALL |
username
sudo userdel username
sudo rm -rf /home/username
/etc/sudoers
中关于要删除用户的配置。sudo deluser --remove-home username
sudo deluser -r username
1 | sudo apt install zsh |
参考 : https://github.com/nianxiongdi/oh-my-zsh
1 | zhs的主题 |
zsh-autosuggestions
与zsh-syntax-highlighting
需手动安装
地址:zsh-autosuggestions、zsh-syntax-highlighting
计划中。。。
nohup: 加在一个命令的最前面,表示不挂断的运行命令
&: 加载一个命令的最后面,表示这个命令放在后台执行
例:ps -aux|grep python
kill %pid
本文系统全部以Ubuntu18.04 Service为例
最近在服务器上部署应用,使用docker比较多,毕竟管理起来方便,腾讯云官方镜像已经默认换了腾讯的源,安装起来还可以,华为云的还是默认的源,下载速度非常不稳定。
最先试的是把腾讯云的源直接拷贝到华为的机器这边,然后发现更不更新不了,直接就断开链接了,推测是腾讯那边作了鉴权啥的,然后换网上搜到的源,发现好多文章的源列表并不是完全的(或者更新不及时),只是一部分,安装docker
的时候会提示找不到包。
这里附上清华的开源镜像站
安装教程建议使用官方文档,以免出问题。
首先放上官方文档
因为某些原因,国内速度比较慢,运气不好的时候还会直接失败,以下为镜像地址:
地址来自DaoCloud
1 | curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose |
这里选用阿里云的容器镜像加速器:点击进入
按照操作文档配置就可以了
下面为Ubuntu的配置方式
安装/升级Docker客户端
推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce
配置镜像加速器
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon
配置文件/etc/docker/daemon.json来使用加速器
1 | sudo mkdir -p /etc/docker |
因每个人的加速地址不同,所以上文中用xxxxx代替。
最近折腾的web应用比较多,在nginx使用中踩了不少坑,记录一下,以便以后查询
1 | apt update |
/etc/nginx/conf.d
建议每个站点单独建一个 ***.conf
放在此目录
默认相对目录为 /etc/nginx ,建议新建一个目录来存放,如 /etc/nginx/cert,
则在配置中填写为: cert/证书名
亦可将证书放在其他地方,配置文件中使用绝对路径
1 | server { |
1 | server { |
1 | location / { |
rewrite ^ https://$http_host$request_uri? permanent;
nginx -t
service nginx restart
]]>物理层: RJ45 、 CLOCK 、 IEEE802.3 (中继器,集线器,网关) -
数据链路: PPP 、 FR 、 HDLC 、 VLAN 、 MAC (网桥,交换机) -
网络层: IP 、 ICMP 、 ARP 、 RARP 、 OSPF 、 IPX 、 RIP 、 IGRP 、 (路由器) -
传输层: TCP 、 UDP 、 SPX -
会话层: NFS 、 SQL 、 NETBIOS 、 RPC -
表示层: JPEG 、 MPEG 、 ASII -
应用层: FTP 、 DNS 、 Telnet 、 SMTP 、 HTTP 、 WWW 、 NFS
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
一个网络协议至少包括三要素:
语法 用来规定信息格式;数据及控制信息的格式、编码及信号电平等。
语义 用来说明通信双方应当怎么做;用于协调与差错处理的控制信息。
时序(定时 )详细说明事件的先后顺序;速度匹配和排序等
网际(络)层协议:包括:IP协议、ICMP协议、ARP协议、RARP协议。
传输层协议:TCP协议、UDP协议。
应用层协议:FTP、Telnet、SMTP、HTTP、RIP、NFS、DNS。
使用TCP协议的常见端口主要有以下几种:
(1)
FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。
(2)
Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。
(3)
SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。
(4)
POP3:它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Foxmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮箱来收信)。
使用UDP协议端口常见的有:
(1)
HTTP:这是大家用得最多的协议,它就是常说的"超文本传输协议"。上网浏览网页时,就得在提供网页资源的计算机上打开80号端口以提供服务。常说"WWW服务"、“Web服务器"用的就是这个端口。
(2)
DNS:用于域名解析服务,这种服务在Windows
NT系统中用得最多的。因特网上的每一台计算机都有一个网络地址与之对应,这个地址是常说的IP地址,它以纯数字+”."的形式表示。然而这却不便记忆,于是出现了域名,访问计算机的时候只需要知道域名,域名和IP地址之间的变换由DNS服务器来完成。DNS用的是53号端口。
(3)
SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
另外代理服务器常用以下端口:
(1). HTTP协议代理服务器常用端口号:80/8080/3128/8081/9080
(2). SOCKS代理协议服务器常用端口号:1080
(3). FTP协议代理服务器常用端口号:21
(4). Telnet协议代理服务器常用端口:23
WIN2003远程登陆,默认的端口号为3389;
DHCP server的端口号是67
端口号的范围是从1~65535。其中1~1024是被RFC 3232规定好了的,被称作“众所周知的端口”(Well Known Ports);从1025~65535的端口被称为动态端口(Dynamic Ports),可用来建立与其它主机的会话,也可由用户自定义用途。
一些常见的端口号及其用途如下:
TCP 21端口:FTP 文件传输服务
TCP 23端口:TELNET 终端仿真服务
TCP 25端口:SMTP 简单邮件传输服务
UDP 53端口:DNS 域名解析服务
TCP 80端口:HTTP 超文本传输服务
TCP 110端口:POP3 “邮局协议版本3”使用的端口
TCP 443端口:HTTPS 加密的超文本传输服务
TCP 1521端口:Oracle数据库服务
TCP 1863端口:MSN Messenger的文件传输功能所使用的端口
TCP 3389端口:Microsoft RDP 微软远程桌面使用的端口
TCP 5631端口:Symantec pcAnywhere 远程控制数据传输时使用的端口
UDP 5632端口:Symantec pcAnywhere 主控端扫描被控端时使用的端口
TCP 5000端口:MS SQL Server使用的端口
UDP 8000端口:腾讯QQ
同步传输方式中发送方和接收方的时钟是统一的、字符与字符间的传输是同步无间隔的。
异步传输方式并不要求发送方和接收方的时钟完全一样,字符与字符间的传输是异步的。
区别点
1,异步传输是面向字符的传输,而同步传输是面向比特的传输。
2,异步传输的单位是字符而同步传输的单位是帧。
3,异步传输通过字符起始和停止码抓住再同步的机会,而同步传输则是在数据中抽取同步信息。
4,异步传输对时序的要求较低,同步传输往往通过特定的时钟线路协调时序。
5,异步传输相对于同步传输效率较低。
简单形容
同步传输就是,数据没有被对方确认收到则调用传输的函数就不返回。
接收时,如果对方没有发送数据,则你的线程就一直等待,直到有数据了才返回,可以继续执行其他指令
异步传输就是,你调用一个函数发送数据,马上返回,你可以继续处理其他事,
接收时,对方的有数据来,你会接收到一个消息,或者你的相关接收函数会被调用。
形象形容
异步传输: 你传输吧,我去做我的事了,传输完了告诉我一声
同步传输: 你现在传输,我要亲眼看你传输完成,才去做别的事
注
:RIP 使用应用层520端口。
CLOSED
: 表示初始状态。
LISTEN
: 表示服务器端的某个SOCKET处于监听状态,可以接受连接。
SYN_RCVD
: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。
SYN_SENT
: 这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。
ESTABLISHED
:表示连接已经建立。
FIN_WAIT_1
: FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET即进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
FIN_WAIT_2
:FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,还有数据需要传送,稍后再关闭连接。
TIME_WAIT
: 表示收到了对方的FIN报文,并发送出了ACK报文,就等2MSL后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
CLOSING
: 属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。
CLOSE_WAIT
: 这种状态的含义表示在等待关闭。当对方close一个SOCKET后发送FIN报文,你系统毫无疑问地会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。
LAST_ACK: 它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,也即可以进入到CLOSED可用状态了。
https://blog.csdn.net/az9996/article/details/88621028
1 | jt -t oceans16 -lineh 140 -tf ptmono -f firacode -ofs 12 -fs 13 -nfs 12 -T -N |
按原文中的方法安装 jupyter_contrib_nbextensions
和jupyter_nbextensions_configurator
时,会报以下错误
1 | (jupyter) λ conda install jupyter_contrib_nbextensions |
然后按照提示去官网查询,找到响应的包,会看到 Info: This package contains files in non-standard labels.
就是不在标准标签中的意思。
然后需要用以下命令安装
1 | conda install -c conda-forge jupyter_contrib_nbextensions |
安装时候注意网络环境,不正确的网络异常的慢
]]>首先吐槽一下win10的权限管理,个人感觉及其混乱,尤其是在重装系统以后,有些文件的权限就会莫名其妙的没有了,还有一些从网上下载的文件也会出现没有权限的情况,造成不能删除等问题。
以前出现这样的问题,去文件属性里面的安全选项卡,然后高级,启用一下继承,权限就来了,没有深究原因(又不是不能用) 实在不行还能进PE强行删文件嘛
这次是因为搞了个无损的原声带,想拷贝一下,结果有权限保护,一个一个的点属性太麻烦了,就上网找了一下,各种折腾半天没成功,最后花了点时间研究了下win10的权限管理,特此记录。
想获取整个文件夹内及其子文件的权限时,右键文件夹属性、安全选项卡,这个页面看一下那个组或用户名对文件具有完全控制的权限,然后高级、更改所有者,将所有者改为具有完全控制权限的用户(勾选替换子容器和对象的所有者),更改完成后登录具有权限的用户进行操作。
粗暴简单,推荐使用此方法
cmd命令行(管理员模式),执行类似如下命令:
1 | icacls "H:\音乐\五月天\步步自選作品輯 The Best of 1999-2013 [一路有你版] Disc 2\*.*" /grant Users:(F) |
"目录名"
*.*
正则表达式
Users
用户组或者用户名
(F)
完全控制
这样修改完权限以后就可以随便怎么用了
]]>1、HTML技术
HTML(HyperText Markup Language,超文本标记语言)是一种用于表示网上信息的符号标记语言。
2、CSS技术
CSS(Cascading Style Sheets,层叠样式表)技术是一种定义样式结构(如字体、颜色、位置等)的语言,用于描述网页上的信息格式和显示的方式。
3、JavaScript技术
JavaScript是一种广泛应用于客户端的脚本语言,通过嵌入到HTML中来实现自身的功能;通过控制网页元素的行为和CSS代码中的样式定义,为网页增添了诸如表单内容验证、动画显示效果等交互能力,可以使静态网页具备一定的动态效果。
服务器端开发技术
1、Servlet技术
Servlet是以Java技术为基础的服务器端应用程序组件,与运行在浏览器端的Applet相对应。Serv」et是被Web服务器(如Tomcat)加载和执行,而Applet则是被浏览器加载和执行。Servlet通过Web服务器接收客户端浏览器发来的请求,执行预定的功能,然后将执行结果返回给客户端的浏览器。Servlet可以使用服务器端的所有Java 类库资源,所以理论上其功能可以无限扩展。
2、JSP技术JSP(Java Server Page)是建立在Servlet规范提供的功能之上的一种动态网页技术。
3、JavaBean技术JavaBean是Java组件技术的核心,它是Java平台上实现重用的软件组件模型。JavaBean是一种特殊的Java类,需要满足一定的规范要求。
4、JDBC技术JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API (Application Programming Interface,应用编程接口),由一组Java语言编写的类和接口组成。
处理过程包括以下步骤:
HTTP主要有以下特点:
1 | <!-- 无序列表 --> |
CSS是Cascading Style Sheets(层叠样式表)的缩写,是一种美化网页的技术。它的引入使HTML网页美工设计不再烦琐。
1、标记选择器:直接针对HTML标记定义样式。
1、嵌入式:将样式表嵌入到HTML标记的属性中,把样式的定义直接作为标记的style属性值。格式如下:
1 | <HTML 标记 style = "属性名:属性值"> |
(2)头部式:把样式定义在HTML页面的头部,用<style>标记进行声明。这样定义的样式在整个页面中都可以使用。基本格式如下:
1 | <style> |
(3)外部式:当在很多网页里都要使用相同的样式时,可以使用外部样式表的形式。
1 | < link href= "" rel= "stylesheet" type= "text/css" /> |
可以使用DIV+CSS 来实现网页布局,实现路是先用<div>标记对整个页面进行分块,然后再利用CSS样式对每个div分块进行布局设置,最后在各个div分块中添加内容。
JavaScript是一种简单的脚本语言,由浏览器解释执行,简单、易学、易用。其最基本的两个特点是基于对象和事件驱动。
所谓基于对象,是指JavaScript支持使用对象,但是没有提供面向对象语言的所有功能,不是完全的面向对象编程语言。
事件驱动指JavaScript程序的运行机制。它把GUl(图形用户界面)中的用户动作封装为各种事件,例如单击按钮、移动鼠标、按下键盘等都是事件,当某个事件发生时,就会触发相应的事件处理程序运行。
JavaScript代码可以直接嵌入到HTML文件中使用,嵌入方式主要有三种:嵌入标记事件属性、使用脚本语句块、链接独立的脚本文件。
JavaScript中的对象由属性和方法构成,主要有三种类型:内置对象、浏览器提供的对象和自定义对象。
document对象的常用方法如下:
略
当浏览器向服务器发出请求访问一个JSP页面时,所请求的JSP文件会被服务器端的JSP引擎转化为一个Java类,并被编译成一个字节码文件,再装载到Java虚拟机中运行,最后把运行产生的输出作为对本次请求的响应返回给浏览器。
按照Java EE规范的规定,一个典型的Java Web应用包含四个部分:
jap脚本代码:Java代码片段,可以实现业务逻辑处理,也可以产生输出。例如:
1 | <% |
jsp声明:在声明中定义的变量和方法都会成为转义后的Java类的成员变量及类成员方法,声明的类则成为内部类。语法格式如下:
1 | <%! 变量或方法、类的声明 %> |
jsp表达式:一种简单的输出形式。
1 | <% = 表达式 %> |
page指令称为页面指令,用来定义JSP页面的全局属性,该配置会作用于整个页面。
用法示例:
1 | <%"java" %> language= |
include指令:在JSP中,可以使用include指令来包含其他jsp文件。
taglib指令:声明用户使用自定义的标签,将标签库描述符文件导入到jsp页面。
1 | <%@ taglib (uri="tigLibURL" 或 tagDir="tagDir") prefix="tagPrefix" %> |
属性:
<jsp:include>用于将HTML或者jsp动态内容插入到当前的jsp页面中。
<jsp:param>用于向被包含的页面传递参数。
<jsp:forward>用于实现页面请求的转发,可以把对当前jsp页面的请求转发到同一web应用中的另一个资源。
1 | <%"文件的URL"%> file= |
内置对象名称 | 类型 | 作用域 | 用途 |
---|---|---|---|
request | javax.servlet.httpServletRequest | Request | 代表了客户端的请求信息,接受通过HTTP协议传送到服务器的数据。(乱码处理) |
response | javax.servlet.http.HttpServletResponse | Page | 对客户端的响应,将JSP容器处理过的对象传回到客户端。(页面重定向) |
session | javax.servlet.http.HttpSession | Page | 在第一个JSP页面被装载时自动创建,完成会话期管理。(存取属性值,保存用户的信息) |
out | javax.servlet.jsp.jspWriter | Page | 在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。 |
方法声明 | 功能简介 |
---|---|
setAttribute(String name,Object) | 设置名字为name的request的參数值 |
getAttribute(String name) | 返回由name指定的属性值 |
getAttributeNames() | 返回request对象全部属性的名字集合,结果是一个枚举的实例 |
getCookies() | 返回client的全部Cookie对象,结果是一个Cookie数组 |
getCharacterEncoding() | 返回请求中的字符编码方式 |
getContentLength() | 返回请求的Body的长度 |
getHeader(String name) | 获得HTTP协议定义的文件头信息 |
getHeaders(String name) | 返回指定名字的request Header的全部值,结果是一个枚举的实例 |
getHeaderNames() | 返回所以request Header的名字,结果是一个枚举的实例 |
getInputStream() | 返回请求的输入流,用于获得请求中的数据 |
getMethod() | 获得client向server端传送数据的方法 |
getParameter(String name) | 获得client传送给server端的有name指定的參数值 |
getParameterNames() | 获得client传送给server端的全部參数的名字,结果是一个枚举的实例 |
getParameterValues(String name) | 获得有name指定的參数的全部值 |
getProtocol() | 获取client向server端传送数据所根据的协议名称 |
getQueryString() | 获得查询字符串 |
getRequestURI() | 获取发出请求字符串的client地址 |
getRemoteAddr() | 获取client的IP地址 |
getRemoteHost() | 获取client的名字 |
getSession([Boolean create]) | 返回和请求相关Session |
getServerName() | 获取server的名字 |
getServletPath() | 获取client所请求的脚本文件的路径 |
getServerPort() | 获取server的port号 |
removeAttribute(String name) | 删除请求中的一个属性 |
方法声明 | 功能简介 |
---|---|
void setContentType(String type) | 设置响应数据的MIME类型 |
String getContentType() | 取得响应数据的MIME类型 |
void setHeader(String name, String value) | 设置指定的响应报头 |
void sendRedirect() | 重定向客户的请求到指定页面 |
void addCookie(Cookie cookie) | 给客户端添加一个Cookie对象,以保存客户端的信息 |
PrintWriter getWriter() | 返回一个输出字符流 |
void flushBuffer() | 清空缓冲区,强行把Buffer的内容写到客户端浏览器 |
方法声明 | 功能简介 |
---|---|
getAttribute(String name) | 获取session对象中名为name的属性值,不存在则为null |
removeAttribute(String name) | 删除session对象中名为name的属性 |
setAttribute(String name, Object value) | 设置session对象属性,属性名为name,属性值为value |
getCreationTime() | 获取session对象的创建时间,返回1970年1月1日至今的毫秒数(Unix时间戳) |
getLastAccessTime() | 获取session对象对应客户端的最近发送请求的时间,返回1970年1月1日至今的毫秒数 |
invalidate() | 销毁session对象中的信息,session本身不会被销毁 |
getMaxInactiveInterval() | 获取会话超时时间,单位为秒 |
setMaxInactiveInterval(int interval) | 设置会话超时时间,单位为秒 |
Cookie是Web服务器产生并嵌入在HTTP响应报头中的一小段文本。浏览器在收到一个Cookie后会把它保存到特定的文件夹下,并在接下来再次访问同一个Web服务器时,自动在请求报头中携带该Cookie,供服务器读取使用,从而弥补HTTP无状态的不足。基于这一工作机制,可以实现用户识别、应用定制等功能。
一个Cookie包含一个名称和值,以及一些可选的属性,如路径、最长存活时间等。Java提供了javax.servlet.http.Cookie类来支持Cookie机制的实现。可以使用response 对象的addCookie()方法向浏览器发送Cookie,使用request对象的getCookie()方法获取请求中的所有Cookie。
方法声明 | 功能简介 |
---|---|
String geyName() | 获取cookie的名称 |
String getValue() | 获取cookie的值 |
void setValue(String value) | 在cookie创建后,为cookie赋予新的值 |
int getMaxAge() | 获取cookie的有效时间,以秒为单位,-1表示cookie将一直持续下去,直到浏览器关闭 |
String getPath() | 返回cookie适用的路径 |
void setPath(String uri) | 设置cookie的适用路径。如不指定,则当前页面的同目录与子目录下所有RRL都返回cookie |
1、jsp页面间的流程控制
2、jsp页面间的数据传递
1 | <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> |
Java语言访问数据库的一种规范,是一套API
JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。比如建立数据库连接、执行SQL语句进行数据的存取操作。
处理驱动程序的加载和建立新数据连接。
1 | connection.getConnection(String url, String user, String password) |
代表Java程序与数据库间的连接,用于提供创建语句以及管理连接及其属性方法。
方法声明 | 功能简介 |
---|---|
Statement createStatement() | 创建一个Statement对象,用于将SQL语句发送到数据库,通常在执行无参数的SQL语句时创建该实例 |
PrepareStatement prepareStatement() | 通常在执行包含参数的SQL语句时创建该实例,并对SQL语句进行预编译处理 |
void close() | 关闭数据库连接 |
1 | Statement st = con.createStatement(); |
用于执行静态SQL语句并返回它所生成结果的对象。
方法声明 | 功能简介 |
---|---|
ResultSet executeQuery(String sql) | 执行指定的静态select语句,并返回一个永远不为null的ResultSet实例 |
int executeUpdate(String sql) | 执行指定的静态INSET、UPDATE或DELETE语句,并返回一个int型数值,未同步更新记录的条数 |
1 | ResultSet rs = st.executeQuery(sql); |
继承自Statement,表示预编译的SQL语句的对象,预编译SQL效率高且支持参数查询
用于表示数据库结果集的数据表,通常由执行查询数据库的语句生成,其中存放了查询结果。
在ResultSet对象中具有指向当前数据行的游标,可以在while循环中使用next()方法来迭代处理结果集。
返回类型 | 方法名称 | 返回类型 | 方法名称 |
---|---|---|---|
byte | getByte(inc columnIndex) | byte | getByte(String columnLabel) |
Date | getDate(inc columnIndex) | Date | getDate(String columnLabel) |
double | getDouble(inc columnIndex) | double | getDouble(String columnLabel) |
float | getFloat(inc columnIndex) | float | getFloat(String columnLabel) |
int | getInt(inc columnIndex) | int | getInt(String columnLabel) |
long | getLong(inc columnIndex) | long | getLong(String columnLabel) |
String | getString(inc columnIndex) | String | getString(String columnLabel) |
1 | while(rs.next()){ |
略
1 | <jsp:useBean id="name" class="package.class" scope="page | request | session | application" /> |
1 | //自动匹配赋值 |
1 | <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %> |
1 | <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> |
EL语法格式
${EL表达式}
运算符:略
内置对象 | 描述 |
---|---|
pageScope | 取得 page 范围的属性名称所对应的值,${pageScope.name}等同与pageContext.getAttribute(“name”); |
requstScope | 取得 request 范围的属性名称所对应的值,${requestScope.name}等同与request.getAttribute(“name”); |
sessionScope | 取得 session 范围的属性名称所对应的值,${sessionScope.name}等同与session.getAttribute(“name”); |
applicationScope | 取得 application 范围的属性名称所对应的值,${applicationScope.name}等同与application.getAttribute(“name”); |
param | 可以用来获取参数,${param.username} 等同于request.getParameter(“username”); 返回 Slring[] 类型的值 |
paramValues | ${paramValues.hobby} 如同 ServletRequest.getParameter Values(String name), 返回 string[] 类型的值 |
在JSP中使用JSTL的步骤如下
1. 首先需要到http://tomcat.apache.org/taglibs/standard/ 下载JSTL标记库的jar包。
2. 然后将获取到的JSTL标记库的jar包,复制到Web应用中的WEB-INF\lib文件夹下。
3. 最后在JSP页面中用taglib指令设置标记前缀,即可使用JSTL标记。
1 | <c:out value="<string>" default="<string>" escapeXml="<true|false>"/> |
1 | <c:set var="<string>" value="<string>" target="<string>" property="<string>" scope="<string>"/> |
1 | <c:if test="<boolean>" var="<string>" scope="<string>"> |
1 | <c:choose> |
1 | <c:forEach items="<object>" begin="<int>" end="<int>" step="<int>" var="<string>" varStatus="<string>"> |
对于Web应用而言,Servlet主要是用于处理HTTP请求,所以更一般的编写Servlet方法是继承javax.servlet.http.HttpServlet类。
HttpServlet类是GeniricServle类的子类,通过调用指定到HTTP请求的方法来实现service()方法。对于HTTP中定义的DELETE、HEAD、GET、POST、PUT等方法,分别调用doDelete(),doHead()、doGet()、doPost()、doPut()等方法来处理相应的请求。
方法声明 | 功能简介 |
---|---|
void doGet(httpServletRequest request, HttpServletResponse, response) | 用来处理Http Get请求 |
void doPost(httpServletRequest request, HttpServletResponse, response) | 用来处理Http Post请求 |
void service(httpServletRequest request, HttpServletResponse, response) | 根据请求的类型,将请求导向doGet(),doPost()方法 |
编写Servlet的一般步骤如下:
1. 导入javax.servlet包、javax.servlet.http包及其他必要的包。
2. 继承HttpServlet类,并重写doPost()和doGet()方法。
3. 在doPost()和doGet()方法中依次实现获取请求参数、创建输出对象、设置响应类型、输出响应内容等功能。
1 | <?xml version="1.0" encoding="UTF-8"?> |
所谓设计模式,是针对典型问题所提供的一套成熟的解决方案。MVC就是一种流行的程序设计模式,它把程序理解为由模型层(Model)、视图层(View)和控制器层(Controller)三个部分组成。其中,模型层表示程序的业务逻辑和状态,包括业务模型和数据模型;视图层是程序的用户界面,用于显示模型数据;控制器层响应用户请求,根据请求内容来操作模型层并控制程序的流程,决定要向用户显示的视图。
Java Web应用开发也可以采用MVC设计模式,用JSP作为视图层,Servlet作为控制器层,JavaBean作为模型层。这样的开发形式实现了程序的分层结构,将功能实现、用户界面和流程控制分别由不同的模块来实现,并在各个模块之间实现了良好的解耦。(jsp Model2)在基于MVC的Web应用中,一次用户请求的处理过程如下:
1. 浏览器发出请求;
2. 作为控制器的Servlet接收请求,并将请求以适当的方式分发给对应的业务模型JavaBean来处理;
3. 如果该业务需要与数据库交互,由JavaBean来访问数据库;
4. 模型层JavaBean将处理结果返回给控制器Servlet;
5. Servlet以适当的方式将结果数据传递给视图层JSP页面,并将控制流程转向该JSP页面;
6. 应用服务器将JSP生成的HTML作为响应返回给浏览器。
在将java程序打包成可执行程序后,因为运行时需要jvm虚拟机,还是没有办法直接给别人用,网上查了半天没有找到解决方法。最后决定用python将整个程序重写一遍,然后打包。
在此记录一下python打包的流程。
1 | pip install pyinstaller |
如果有 ~\Scripts 文件夹的环境变量的,应该可以直接使用,没有的配置一下环境变量可以了
1 | pyinstaller -F xxxx.py |
-F 的作用是打包为单文件
更多命令参数请参阅:官方文档
]]>以idea
为例,打开项目结构
(Ctrl+Alt+Shift+S),选择Artifacts
,点击加号,选择jar from modules with dependencis…
然后选择构建
->构建项目
,便会在out文件夹下生成编译后的jar包
首先安装exe4j
软件,然后按以下步骤执行
接下来,一直点下一步,直到打包完成。
然后测试是否能够正常运行。
exe4j :下载地址 (官方)
exe4j,未注册版本会在程序开始提示程序由exe4j打包生成。
exe4j注册码
1 | 用户名和公司名可随便填 |
1 | { |
可以将配置放在用户设置中,实先全局调用,如下:
1 | "launch": { |
推荐安装 Java Extension Pack ,一共5个插件,一次安装到处使用
Code Runner :安装完成后会在右上角出现一个运行按钮,支持多种语言的直接运行,不需要配置文件,缺点是不能调试。
如果只需要简单的运行调试功能,安装以下两个插件就好
Debugger for Java
Language support for Java(TM)by Red Hat
电脑上安装g++、gcc、gdb等编译调试环境,并配置环境变量
因为launch.json需要调用tasks.json进行预编译,所以无法将配置写入setting.json中实现全局配置,需要在工作空间中配置.vscode目录
1 | { |
1 | { |
C/C++ :提供语言支持,debugging等功能。
C++ Intellisense :提供智能分析提示等。
为了不违背轻量化的本质,只实现单文件执行,及简单的项目运行。复杂项目还是用IDE。如果啥IDE干的事儿啥都能干,和直接装一个IDE又有何区别???
Launch.json attributes
Writing Java with Visual Studio Code
Variables Reference
快速使用 vscode 进行 Java 编程
Ubuntu18.04国内版默认的源地址为 cn.archive.ubuntu.com , ping结果显示归属地为英国,速度较慢,需要更换为国内的镜像地址。
使用如下命令:
1 | //得到系统版本代号,防止更换错误 |
清华大学镜像站: https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/
阿里源
1 | deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse |
更换完成后执行
1 | sudo apt-get update |
桌面客户端下载:地址
参考:教程
安装libsodium,用来支持chacha20系列加密方式
1 | wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/libsodium.sh && chmod +x libsodium.sh && bash libsodium.sh |
脚本来源:逗比根据地
注意:装完libsodium后需要重启系统
国外公司对Linux系统的支持还是比较好的,vscode、chrome等去官网下载deb包安装就行了
国内的一些常用软件,微信,QQ等对Ubuntu的支持并不友好,Ubuntu版维护停止在多年以前,大多数已经不能使用,网上多数解决办法是通过网页版,网页版界面不友好操作麻烦,在此使用deepin深度定制的wine安装包。
github地址: https://github.com/wszqkzqk/deepin-wine-ubuntu
教程及演示: https://www.lulinux.com/archives/1319
打开终端,查看shell版本
1 | gnome-shell --version |
如无gnome shell 使用下面命令安装
1 | sudo apt install gnome-shell |
然后安装 gnome-tweak 中文名为 优化
使用下面命令安装,或者在Ubuntu软件搜索gnome-tweak安装
1 | sudo apt install gnome-tweak-tool |
之所以要单独写一个网易云,实在是因为坑太多了,记录一下,以防万一
去官网下载安装包,通过sudo dpkg -i安装
1 | sudo dpkg -i netease-cloud-music_1.1.0_amd64_ubuntu.deb |
上面的操作可能会出错,一般来说就是依赖的软件环境不完整,执行以下命令
1 | sudo apt-get -f install |
在软件中能看到网易云音乐的图标,可是点击运行之后却没有任何窗口出现。
通过终端进行启动
1 | netease-cloud-music |
发现报错并卡住
1 | Gtk-Message: 12:02:46.607: Failed to load module "canberra-gtk-module" |
安装相应依赖,不安装依赖通过 sudo netease-cloud-music 也能启动,但是控制台会有报错信息
1 | sudo apt-get install libcanberra-gtk* |
结果安装依赖后还是得通过 sudo netease-cloud-music 启动,并且不能关闭终端窗口
以上方法虽然能够使网易云音乐运行,但每次都需要打开一个终端不能关闭,让有轻微强迫症的我看了觉得很不舒服。
方法2(请自行测试):
在~目录下新建一个脚本.netease.sh,该脚本的内容如下(注意更换password):
1 |
|
编辑~/.bashrc,在末尾增加了一行:
alisa netease=". .netease.sh"
双击打开安装
通过命令 sudo dpkg -i 安装
通过win系统重启进入ubuntu系统
执行以下命令,记得加磁盘分区号(如果执行前已挂载磁盘需要先卸载,执行完毕重新挂载即可)
1 | sudo ntfsfix /dev/sda or sudo ntfsfix /dev/nvmeOn |
1 | # 安装 pppoeconf |
注意:不适用于需要客户端的登陆方式,因为客户端一般都有二次验证
]]>保留字
abstract | delete | goto | null | throws |
---|---|---|---|---|
as | do | if | package | transient |
boolean | double | implements | private | true |
break | else | import | protected | try |
byte | enum | in | public | typeof |
case | export | instanceof | return | use |
catch | extends | int | short | var |
char | false | interface | static | void |
class | final | is | super | volatile |
continue | finally | long | switch | while |
const | float | namespace | synchronized | with |
debugger | for | native | this | |
default | function | new | throw |
使用 const
声明的变量称为“常量”。它们不能被修改。
let
– 新时代的变量声明方式。Chrome(V8)中代码必须开启严格模式以使用 let。var
– 旧时代的变量声明方式。const
– 类似于let,但是变量的值无法被修改。七种基本的类型:
number
用于任何类型的数字:整数或者浮点数。string
用于字符串。一个字符串可以包含一个或多个字符,所以没有单独的单字符类型。boolean
用于 true
和 false
。null
用于未知的值 —— 只有一个 null
值的独立类型。undefined
用于未定义的值 —— 只有一个 undefined
值的独立类型。object
用于更复杂的数据结构。symbol
用于唯一的标识符。typeof 运算符可以查看变量的类型。
typeof x
或者 typeof(x)
。"string"
。null
返回 "object"
—— 这是语言中的一个错误,实际上它并不是一个对象。JavaScript 中的 null
不是一个“对不存在对象的引用”或者 “null 指针”。
仅仅是一个含义为“无”、“空”或“值未知”的特殊值。
有三种常用的类型转换:转换为 string 类型、转换为 number 类型和转换为 boolean 类型。
ToString —— 输出内容时 ToString 发生转换,或通过 String(value) 进行显式转换。原始类型值的 string 类型转换通常是可预见的。
ToNumber – 进行算术操作时发生 ToNumber 转换,或通过 Number(value) 进行显式转换。
ToNumber 转换遵循以下规则:
值 | 变成… |
---|---|
undefined | NaN |
null | 0 |
true / false | 1 / 0 |
string | 字符串“按原样读取”,两端的空白被忽略。空字符串变成 0。出错变成 NaN。 |
ToBoolean – 进行逻辑操作时发生 ToBoolean 转换。或通过 Boolean(value) 进行显式转换。
ToBoolean 遵循以下规则:
值 | 变成… |
---|---|
0, null, undefined, NaN, “” | false |
其他值 | true |
示例:
1 | let a = 0; |
对于 JavaScript 而言这种现象蛮正常的,因为它会把待比较的值转为数字后再做比较(因此 “0” 变成了 0 )。若只是将一个变量转为 Boolean,则会使用其他的类型转换规则。
普通的相等性检查 == 存在一个问题,它不能区分出 0 和 false:
alert( 0 == false ); // true
也同样无法区分空字符串和 false:
alert( ‘’ == false ); // true
这是因为在比较不同类型的值时,处于相等判断符号 == 两侧的值会被转换为数字的原因。空字符串和 false 也是如此,转换后它们都等于 0。
undefined
和 null
在相等性检测 ==
中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外不会等于任何其他的值。
==
下,null
和 undefined
相等且各自不等于任何其他的值。>
或 <
进行比较时,需要注意变量可能为 null/undefined
的情况。比较好的方法是单独检查变量是否等于 null/undefined
。alert 弹出显示信息。
prompt 要求用户输入文本,确定返回文本,取消返回null
。
confirm 显示信息等待确定或取消,确定返回true
取消返回false
。
1 | let result = condition ? value1 : value2 |
计算条件结果,如果结果为真,则返回 value1
,否则返回 value2
。
Java中同样适用
使用一系列问号 ? 运算符可以返回一个取决于多个条件的值。
例如:
1 | let age = prompt('age?', 18); |
2009 年 ECMAScript 5 (ES5) 的出现。ES5 规范增加了新的语言特性并且修改了一些已经存在的特性。为了保证旧的功能能够使用,大部分的修改是默认不生效的。需要一个特殊的指令 —— "use strict"
来明确地使用这些特性。
"use strict"
出现在脚本的最顶部,否则严格模式可能无法启用。"no use strict"
这样的指令,这会返回原来的默认模式。undefined
undefined
return
和 return undefined
一样一种普遍的做法是用动词前缀来开始一个函数,这个前缀模糊地描述了这个动作。团队内部必须就前缀的含义达成一致。
"get…"
—— 返回值,"calc…"
—— 计算"create…"
—— 创建,"check…"
—— 检查并返回 boolean 值,等。使用 ‘?’ 或者 ‘||’ 重写函数
1 | function checkAge(age) { |
1 | function checkAge(age) { |
1 | function checkAge(age) { |
写一个函数 pow(x,n),在 n 中返回 x。或者换句话说,将 x 与自身相乘 n 次,然后返回结果。
1 | function pow(x,n){ |
result = value1 || value2 || value3;
例1:获取变量列表或者表达式的第一个真值
1 | let currentUser = null; |
例2:短路取值
1 | let x; |
result = value1 && value2 && value3;
1 | alert( 1 && 2 && null && 3 ); // null |
与运算 &&
的优先级比或运算 ||
要高
1 | alert( 5 || 1 && 0 ); // 5 |
1 | alert( null || 2 && 3 || 4 ); //3 |
克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。
实现Serializable序列化的作用
实现 Serializable接口的作用就是可以把对象存到字节流,然后可以恢复。所以你想如果你的对象没有序列化,怎么才能进行网络传输呢?要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化。如果你不需要分布式应用,那就没必要实现实现序列化。
Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代的过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object Obj)删除,可以通过迭代器的remove()方法删除。
]]>网络安全泛指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭到破坏、更改和泄漏,系统能够连续可靠正常地运行,网络服务不被中断。
网络安全的内容包括系统安全和信息安全两部分。
从内容看,网络安全大致包括4个方面 :
1. 物理实体安全 :设备安全;存储介质安全;环境安全
2. 软件安全:
3. 数据安全
4. 安全管理
1. 被动攻击
2. 主动攻击
网络可用性是指网络可以提供正确服务的能力,它是为可修复系统提出的,是对系统服务正常和异常状态交互变化过程的一种量化,是网络可以被使用的概率。系统可靠性越高,可维护性越好则可用性越高。
可靠性:提供正确服务的连续性,描述为系统在一个特定时间内能持续执行特定任务的概率,侧重分析服务正常运行的连续性。
A=MTBF/(MTBF+MTTR)x100%
MTBF:平均无故障时间,反映网络系统的可靠性,取决于网络设备硬件和软件本身的质量,可靠性越高设备成本越高
MTTR:平均修复时间,反映网络系统的可维护性,在MTBF一定的情况下,MTTR越小网络的可用性越大
如果平均无故障时间(MTBF)远大于平均修复时间(MTTR),那么系统的可用性将很高。
如果平均修复时间很小,那么可用性也将很高。
如果可靠性下降(MTBF变小),那么就需要减小MTTR (提高可维护性)才能达到同样的可用性。
对一定的可用性,如果可靠性增长了,可维护性就不那么重要了。
所以可以在可靠性和可维护性之间做出平衡来达到同样的可用性目的。
设网络串联系统是由n个网络设备串联而成的,只要有一个设备不可用系统就是不可用的。
假设整个系统的可用性是A,每个设备的可靠性为Ai,整个系统可用是指系统中的每个设备都必须可用,其计算公式如下:
n个设备串联的可用性会随着设备串联结构的增多越来越低,例如,假设每个设备可用性值是0.99,5个设备串联后的可用性接近0.95,10 个设备串联后的可用性就已经接近0.9。
为增加系统的可用性,将多个设备并联起来,n个网络设备并联的可用性是指:
在并联系统中,多个并联设备同时运行工作,只要有一个设备正常工作系统就是可用的。
在并联系统中只有一个子系统是真正需要的,其余n-1个子系统都被称为冗余子系统。
系统随着冗余子系统数量的增加,其平均无故障时间(MTBF)也随着增加。这样的并联结构的冗余的代价也是很高的。
整个系统的可用性是A,每个设备的可靠性为Ai,计算公式如下:
防火墙:在两个网络之间执行访问控制策略的一个或一组安全系统,可对整个网络进行访问控制。是一种计算机硬件和软件系统集合,是实现网络安全策略的有效工具之一。
常说的防火墙通指硬件防火墙
硬件防火墙:路由器、计算机或二者的组合配上具有过滤功能的软件形成,软硬件结合打到隔离内外部网络的目的。价格较贵,效果较好
软件防火墙:用纯软件的方式实现防火墙功能,价格便宜,但只能通过一定的规则来打到限制一些非法用户访问内部网的目的。
防火墙技术
防火墙基本技术包括包过滤技术、代理服务技术和NAT技术。
1.包过滤:通过拦截数据包过滤掉不应入网的信息。在网络的出入口(如路由器上)对通过的数据包进行检测,满足条件的数据包才允许通过,否则抛弃。优点:用一个放在重要位置的包过滤路由器即可保护整个网络;不需用户软件支持,也不要对客户机进行特殊设置。缺点:配置包过滤规则比较困难,常会忽略建立一些必要规则,或错误配置了已有的规则,且易产生难以发现的冲突。
2.代理服务技术:又称应用级网关,建立协议过滤和转发功能。包过滤只是在网络层拦截所有的信息流,代理服务可以进行身份认证等包过滤没有的控制功能,能力强,缺点是对用户不透明,速度慢。
3.NAT:网络地址转换技术:通过有限的全球唯一的IP地址(外部地址)作为中继,使计算机网内部使用的非全球位移的IP地址(内部地址)可以对Internet进行透明访问。打到屏蔽内部地址的作用,提高网络安全性,解决地址紧缺的问题。外部主机对内部主机的内部地址进行直接访问是不可能的,因此提高了网络安全性。
防火墙体系结构一般有四种,安全程度递增的:过滤路由器结构、双穴主机结构、主机过滤结构、子网过滤结构。
1. 过滤路由器结构:最简单的防火墙结构,可以由厂家专门生产的过滤路由器来实现,也可由安装了具有过滤功能软件的普通路由器实现。过滤路由器防火墙作为内外连接的唯一通道,要求所有的报文都必须在此通过检查。
2. 双穴主机结构:围绕具有双重宿主的主机而构筑的。计算机至少有两个网络接口,同时连接两个不同的网络,这样的主机可以充当与这些接口相连的网络之间的路由器,并能够从一个网络到另一个网络发送IP数据包。防火墙内部的网络系统能与双重宿主主机通信,同时防火墙外部在Internet上的网络系统也能与双重宿主主机通信。通过双重宿主主机进行控制和代理,防火墙内外的计算机便可进行通信。
3. 主机过滤结构:由内部网中提供安全保障的主机(堡垒主机),加上一台单独的过滤路由器,一起构成该结构的防火墙。它既有主机控制又有路由器过滤,因此称为主机过滤结构。又分为单宿堡垒主机和双宿堡垒主机,单宿堡垒主机只有一个网卡连接在内部网上,双宿堡垒主机有两个网卡:一个连接在内部网上,另一个连接在路由器上,具有更好的安全性。
4. 子网过滤结构:添加了额外的安全层到主机过滤体系结构中,即通过添加一个称为参数网络的网络,更进一步地把内部网络与Internet隔离开。
1.访问控制的方式:分为自主访问控制和强制访问控制。
自主访问控制:允许用户可以自主地在系统中规定谁可以存取它拥有的资源实体。有权访问且可以授权或收权其他用户。可以非常灵活地对策略进行调整。由于其易用性与可扩展性,自主访问控制机制经常被用于商业系统。
强制访问控制:用户权限和文件安全属性都是固定的,由系统决定一个用户对某个客体能否实行访问。
2.访问控制的主体:分为基于用户的访问控制和基于角色的访问控制。
基于用户:指每个用户都分配其权限,缺点是用户太多,可扩展性差。
基于角色:是在用户和访问许可权之间引入角色的概念,用户与特定的一个或多个角色相联系,角色再与一个或多个访问许可权相联系,从而实现对用户的访问控制。角色可以根据实际的工作需要生成或取消。
数据保密性在网络安全中,数据的保密性是指为了防止网络中各个系统之间交换的数据被未授权的实体截获或被非法存取造成泄密而提供的加密保护。
替换加密:明文消息的字符换成另一个字符、数字、符号。不一定替换成原字符集,同时也可以一对多替换。
置换加密:对明文字幕重新进行排列,字母本身不变。
1. 按密码体制:对称密钥、非对称密钥
对称密钥:同一个密钥加密解密,应用:数据加密标准DES、高级加密标准AES。优点:速度快;缺点:用户必须让接收人知道自己用的密钥,需双方共同保密密钥。密钥发布时还需防止任何攻击者发现或窃听密钥。
非对称密钥:用公钥加密的结果只能用私钥解密,用私钥加密的结果只能用公钥解密,公钥不能推导出来私钥。优点:加密解密能力分开,实现多个用户加密的消息只能由一个用户解读,或一个用户加密的消息可由多个用户解读。可扩展性强。目前应用最多的公开密钥系统有RSA
2.按加密方式分类:序列(流)加密法、分组(块)加密法
序列加密:使用一次只对明文中的单个位或字节进行运算的算法。有点:产生流密钥序列简单、加密解密过程均不需复杂算法;缺点:明文、密文和密钥流任意两者可以很容易求得第三者,且很难得到完全随机的密钥流。密钥变换过于频繁,密钥分配较难。目前应用最广泛的序列密码:RC4
分组加密法:是将明文按一定的位长分组,这个固定长度叫块大小。一次加密明文中的一个块。具有较强的抗攻击能力。块越大保密性越好,但加解密算法和设备越复杂,块大小一般64或128字节。应用:DES、IDEA、AES、TEA。
DES:是一个分组加密算法,以64位为分组对数据加密;是一个对称算法,加密解密是同一个密钥。
6步:
1. 输入64位明文(56位密钥+8位奇偶校验)
2. 64位明文块送入初始置换函数进行初始置换
3. 置换后的内容分为两块,左明文和右明文,各32位
4. 两块明文都要经过16轮加密,每一轮都进行替换与置换操作
5. 将左右明文重新连接起来,对组成的块进行最终置换
6. 输出64位明文
加密解密过程的唯一差别是密钥部分倒过来。
具有极高的安全性,目前为止,出了穷举搜索法对算法进行攻击,没有发现更有效的方法。通过利用多种加密思想实现安全性:替换机制、置换机制、进行多轮反复加密、在替换和置换中同时揉进了压缩与扩展操作、使用了异或的加密操作、算法不公开S盒的设计准则、算法具有雪崩效应。
雪崩效应:明文的一点点变动就会引起密文发生大的变化。
DES密钥发布问题也是决定DES安全程度的重要问题,基本解决方法:
1. 根据密钥交换协议/算法来实现密钥的发布问题,双方可以用这个方法确定对称密钥,然后用这个密钥进行加密解密;
2. 结合非对称密钥,先利用接收方得公钥对DES使用的密钥进行加密,然后再利用DES进行加密。
算法本身简单,关键选择正确密钥。不存在密钥的发布问题。可扩展性比DES好,信息有效率没有DES高。RSA算法比DES算法速度慢很多
1. 性能和信息有效率得到改善:用对称密钥加密算法和一次性会话密钥加密明文:速度快、明文小
2. 解决了密钥的发布问题
3. RSA的中间人攻击:指中间人不需要知道发送方和接收方的思瑶就可以非法查看双方的内容。主要漏洞是公钥被非法替换和调包。
数据完整性是防止非法实体对交换数据的修改、插入、替换和删除,或者如果被修改、插入、替换和删除时可以被检测出来。
在常规的网络安全中,可以通过消息认证模式来保证,基本思路是通过增加额外的信息验证码来对数据完整性验证。
碰撞:对于两个不同的消息,如果它们的验证码值相同,则发生了碰撞。
哈希函数是生成消息摘要常用的算法。
常用算法:MD4,MD5,SHA-1
如果两个消息得到相同的消息摘要,则称为冲突。
优点:双方不需要共享密钥;消息摘要与信息密切关联,接受者能够确信信息为被篡改过;信息有效率较高。
缺点:若攻击者修改网络传输的信息部分同时也根据哈希函数重新计算消息摘要并替换,这时验证机制检测不出消息是否是伪造的,只知道是否完整。
假设A是发送方,B是接收方,A要发送的消息是M0,A与B共享密钥K,产生摘要的函数为H。
优点:
缺点与改进:
MD5是计算机安全领域广泛使用的一种哈希函数,用以提供消息的完整性保护,把一个任意长的信息变化产生一个128位的消息摘要。除了满足能满足完成完整性验证必须的要求外,还效率高,提高了完整性验证的性能。
步骤:
MD5将消息分为若干个512位分组(大块)来处理输入的消息,且每一分组又被划分为16个32位子分组(子块),经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个分组链接生成一个128位的消息摘要。
对于每个大块,信息从512位压缩为128位,位数变为1/4,每一轮前初始化四个32位的固定值的链接量,四个组合在一起正好是128位。
MD5以32位运算为基础,加密有四轮,每轮运算16次。每一轮中每个小块按不同顺序都参与运算,四轮的第一步进行不同的P处理,其他步骤相同。
每一轮的操作也称压缩操作。如下所示:
评价:
MD5的核心处理是重复进行位逻辑运算,使得最终输出的摘要中的每一位都与输入消息中所有位相关,达到很好的混淆效果,具有雪崩现象。
用户身份可鉴别性:指用户在使用网络资源时,通过对用户身份信息的交换对用户身份的真实性进行确认的过程。
涉及对象:①提供身份信息的被验证者;②检验身份信息正确性和合法性的认证服务器;③提供仲裁和调解的可信第三方;④企图进行窃听和伪装身份的攻击者;⑤认证设备。
用户身份鉴别一般通过多个因素来共同鉴别用户身份的真伪,称为多因子鉴别, 最常见的是以下三因子:
1. 用户所知道的东西,如口令、密码等:
2. 用户所拥有的东西,如信用卡或U盾等:
3. 用户所具有的东西,如声音、指纹、视网膜、签字或笔迹等。
最简单的证书至少包括三项基本内容:公钥、用户名(也称主体名)和证书机构的数字签名。
一般情况下证书中还包括序号、起始日期、 终止日期、签发者名等信息。
证书的内容和格式遵循X.509国际标准,它于1993和1995年做了两次修订。这个标准的最新版本是X.509V3。在数字证书中用户名被称为主题名,这是因为数字证书不仅可以发给个体用户,还可以发给组织,最后一个字段是证书机构的签名。
生成数字证书的参与方至少需要两方参与,即主体(最终用户)和签发者(证书机构CA)。证书生成与管理还可能涉及第三方——注册机构RA。
1. 主体:申请数字证书的人或者组织,主要任务是产生公/私钥密钥对、提出申请和提供与申请者相关的证明材料等。
2. 注册机构及作用:从最终用户角度看,证书机构与注册机构差别不大。注册机构是用户与证书机构之间的中间实体,帮助证书机构完成日常工作
注册机构通常提供下列服务:
好处:
证书机构成为被隔离的实体,更不容易受到安全攻击。最终用户只能通过注册机构与证书机构通信,因此可以将注册机构与证书机构通信高度保护,使这部分连接很难攻击。但注册机构主要为了帮助证书机构与最终用户间交互,不能签发证书,只能由证书机构签发。
3. 证书机构及作用:证书机构是公钥基础设施的核心机构,它的作用包括:
① 证书的数字签名与发放,用户相信证书的真假主要看是不是经过可信的CA签名,因此CA对证书的签名很重要。为了防止数字凭证的伪造,证书机构的公共密钥必须是可靠的,证书机构必须公布其公钥。
② 证书的管理工作,如跟踪证书状态,对因故无效的证书发出吊销通知等。
证书的生成(5步)
1. 基于口令的用户身份鉴别机制:最常用的鉴别形式
优点:简单易用,在安全性要求不高的情况下易于实现
缺点:数据库存放的是明文口令;口令以明文形式传递给服务器;口令相对固定。
2. 基于口令摘要的用户身份鉴别机制:
优点:解决了基于口令的机制的两打安全隐患,在网络截获、副武器攻击和口令猜测方面都保证了用户鉴别的安全。
缺点:无法阻止重放攻击。服务器不能鉴别出登录请求来自合法用户还是攻击者。
3. 基于随机挑战的用户身份鉴别机制:用户用口令摘要加密随机挑战
优点:解决了基于口令摘要的重放攻击,增加了随机性,提高了安全性。
缺点:比基于摘要的用户鉴别机制多了一次交互,同时需要客户本地计算机计算口令摘要,并用计算出来的口令摘要加密从服务器收到的随机挑战,存在密钥的分发问题。
不可抵赖性:旨在生成、手机、维护有关已声明的事件或动作的证据,并使该证据可得和缺人,一次来解决关于此事件或动作发生或未发生而引起的争议。
主要通过数字签名来保证。
包括两个方面:发送信息方不可抵赖;信息的接收方不可抵赖。
一个完整的抗抵赖性机制包括两部分:签名部分+验证部分:
签名部分密钥必须秘密、独有,只有签名人掌握;
验证部分的密钥应当公开,以便于他人进行验证。
数字签名:附加在数据单元上的一些数据,或是对数据单元所做的密码变换,这种数据或变换允许数据单元的接收者用于确认数据单元的来源和数据单元的完整性,并保护数据,防止被他人伪造。
一个签名算法至少应满足三个条件:
1. 签名者时候不能否认自己的签名
2. 接收者能验证签名,而其他任何人都不能伪造签名;
3. 当双方关于签名的真伪性发生争执时,第三方能解决争执。
数字签名的作用:不可抵赖、身份认证、防假冒
什么是断点:
如何设置断点:
在哪里设置断点:
如何运行设置断点后的程序:
看哪些地方:
如何去断点:
public Stirng toString() {return name + "," + age;}
1 | class Studnet { |
* a:指示其他某个对象是否与此对象“相等”。 * b:默认情况下比较的是对象的引用是否相同。* c:由于比较对象的引用没有意义,一般建议重写该方法。
A:为什么要有包
B:包的概述
举例:
1 | 方案1:按照功能分 |
本类 | 同一个包下(子类和无关类) | 不同包下(子类) | 不同包下(无关类) |
---|---|---|---|
private | Y | ||
默认 | Y | Y | |
protected | Y | Y | Y |
public | Y | Y | Y |
A:修饰符:
B:类:
权限修饰符:默认修饰符,public
状态修饰符:final
抽象修饰符:abstract
用的最多的就是:public
C:成员变量:
权限修饰符:private,默认的,protected,public
状态修饰符:static,final
用的最多的就是:private
D:构造方法:
权限修饰符:private,默认的,protected,public
用的最多的就是:public
E:成员方法:
权限修饰符:private,默认的,protected,public
状态修饰符:static,final
抽象修饰符:abstract
用的最多的就是:public
F:除此以外的组合规则:
要求:使用已知的变量,在控制台输出30,20,10。
//内部类之所以能访问外部类,是能获取到外部类的引用:外部类名.this
1 | class Outer { |
局部内部类访问局部变量必须用final修饰
局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
但是jdk1.8取消了这个事情,所以我认为这是个bug
1 | new 类名或者接口名(){ |
1 | //这里写抽象类,接口都行 |
1 | interface Inter { |
1 | class Student { |
类的耦合性增强了。
开发的原则:高内聚,低耦合。
耦合:类与类的关系
内聚:就是自己完成某件事情的能力
A:继承的注意事项
B:什么时候使用继承
采用假设法。
如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。
因为子类会继承父类中的数据,可能还会使用父类的数据。
所以,子类初始化之前,一定要先完成父类数据的初始化。
其实:
1 | 看程序写结果1 |
a:父类中私有方法不能被重写
b:子类重写父类方法时,访问权限不能更低
c:父类静态方法,子类也必须通过静态方法进行重写
子类重写父类方法的时候,最好声明一模一样。
Override和Overload的区别?Overload能改变返回值类型吗?
overload可以改变返回值类型,只看参数列表
方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。
子类对象调用方法的时候:
方法内部或者方法声明上都演示一下(了解)
基本类型,是值不能被改变
引用类型,是地址值不能被改变,对象中的属性可以改变
A:案例演示
B:给成员变量赋值:
C:输出成员变量值的方式:
A:案例演示
B:画图演示
把今天的知识点总结一遍。
]]>A:在类中的位置不同
B:在内存中的位置不同
C:生命周期不同
D:初始化值不同
注意事项:
A:封装概述
B:封装好处
C:封装原则
1 | class Demo2_Phone { |
计算机程序设计语言可分为机器语言、高级语言和汇编语言三类。
机器语言就是把控制计算机的命令和各种数 据直接用二进制数码表示的一种程序设计语言。
优点:机器语言最直接地表示了计算机内部的基 本操作,用它编制的程序在计算机中运行的效率 最高。即运行速度最快,程序长度最短。
缺点:用二进制数表示的内容既不便于记忆又难 于阅读。
高级语言将计算机内部的操作细节屏蔽起 来,用户不需要知道计算机内部数据的传送和 处理的细节,使用类似于自然语言的一些语句 来编制程序,完成指定的任务。
特点:程序设计简单,但程序效率较机器语言低。
为了便于记忆和阅读,使用字母和符号来 表示机器语言的命令,用十进制数或十六进制 数来表示数据,这样的计算机程序设计语言就 称为汇编语言。
一条汇编语言的语句与一条机器语言指令对应, 汇编语言程序与机器语言程序效率相同。
对一台计算机来说,机器语言的执行主要取 决于该计算机的中央处理器CPU。因此熟悉计算 机内部结构主要是指CPU的功能结构。它包括:
CPU中有多少个寄存器及其作用? CPU是如何访问存储器? 输入输出操作的方式有哪些?
1. 学习和使用汇编语言可以从根本上认识、理解 计算机的工作过程。
通过用汇编语言编制程序可以更清楚地了解计 算机是如何完成各种复杂的工作。在此基础上, 程序设计人员能更充分地利用机器硬件的全部功 能,发挥机器的长处。
2. 在计算机系统中,某些功能必须用汇编语言程序 来实现。
如:机器自检、系统初始化、实际的输入输出设备的 操作等。
3. 汇编语言程序的效率高于高级语言程序
“效率”有两个方面的含义:程序的目标代码长 度和运行的速度。
在某些要求节省内存空间和提高程序运行速度的 应用场合,如实时过程控制、智能仪器仪表等, 常常用汇编语言来编制程序。
使用一定个数的数码的组合来表示数字,这种 表示方法称为进位计数制。根据所使用的数码的 个数,就产生了不同的进位计数制。
将各个位置上所表示的基本数值称为位权, 简称权。
每个数位上能使用不同数码的个数称为基数。
例:十进制有十个数码0~9,基数为10,二进制基 数为2。
B(Binary)--二进制数
O (Octal)或Q--八进制数
D (Decimal)--十进制数
H (Hexadecimal)--十六进制数
如未使用任何字母,则默认表示是十进制数
1. 减权定位法
2. 除基取余法
将十进制数除以基数2,其余数为二进制数的最低位,再用其商除2,其余数为次低位,反复做下去,直到商0。
这种转换方法同样适合于其它进制数之间的转换。(红)
1. 减权定位法
例:将十进制数0.645转换为二进制数
减权比较 | Ki | 对应二进制数 |
---|---|---|
0.645-0.5 =0.145 | k-1 | 1 |
0.145<0.25 | k-2 | 0 |
0.145-0.125=0.02 | k-3 | 1 |
0.02<0.0625 | k-4 | 0 |
0.02<0.03125 | k-5 | 0 |
0.02-0.015625 | k-6 | 1 |
所以 0.645D=0.101001B
转换时应根据程序要求的精度或计算机的字长来确 定二进制的位数.(黄框)
2. 乘基取整法
例:将0.8125D转换为二进制数
乘以基数 | Ki | 整数部分 |
---|---|---|
0.8125×2=1.625 | K-1 | 1 |
0.625×2=1.25 | K-2 | 1 |
0.25×2=0.5 | K-3 | 0 |
0.5×2=1. | K-4 | 1 |
所以 0.8125D=0.1101B
1. 按权相加法
101000101B
=1×28+1×26+1×22+1×20
=256+64+4+1
=325
2. 逐次乘基相加法
1. 按权相加法
0.101001B
= 1×2-1+1×2-3+1×2-6
= 0.5+0.125+0.0156
= 0.640625D
2. 逐次除基相加法
二进制与八进制和十六进制之间的对应关系:
三位二进制数对应一位八进制数,四位二进制数对应一位十六进制数。
用“+”或“-”表示正负的数叫真值(黄色块)
用“0”或“1”表示正负的数叫机器数
二进制数的最高位表示符号,0表示正,1表示负。数值 部分用二进制数绝对值表示
8位二进制数原码的最大数为01111111(+127) 最小数为11111111 (-127)
8位二进制数表示范围:-127≤X≤+127
0的原码有两种表示形式:00000000和10000000(+0和-0)
1. 补码的定义
带符号数X的补码表示[X]补定义为:
[X]补=M+X (Mod M)
其中模数M根据机器数的位数而定,如位数为8则M=28 用补码表示的机器数,符号位仍然表示数的符号:0为正,1为负。对于正数,补码与原码相同,对于负数需要进行变换。
2. 由真值、原码变换为补码
由于正数的原码与补码相同,下面讨论负数的变换方法。
负数的真值变换为补码的方法:将各位变反(0变1,1变0) 然后在最低位加1.
负数的原码变换为补码:保持符号位不变,其余各位变反, 最低位加1。
例:将-59变换为补码
真值 -00111011 变反 11000100 加1 11000101
原码 10111011 变反 11000100 加1 11000101
所以 [-59]补=11000101
3. 补码数的表示范围
当位数为8时,最大补码为01111111=[+127]补 最小补码为10000000=[-128]补
0的补码只有一个,[0]补=00000000,而10000000是[-128]补11111111=[-1]补
对于16位数,则补码表示范围为-32768~+32767
4. 补码的加减运算
规则:
[X+Y]补=[X]补+[Y]补
[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补
进位超出:舍去
标准ASCII码为一字节,其中用低七位表示字符编码(见附录 A),用最高位表示奇偶数验位。
标准ASCII码共有128个,可分为两类:
非打印ASCII码,共33个,用于控制操作, 如BEL(响铃07H), DEL(删除7FH),CR(回车,0DH), LF(换行,0AH)。
可打印ASCII码共有95个,如数字符0~9,大小写字母等。
1. “与”运算(AND)
“与”运算也叫逻辑乘,常用 ∧ 或 · 表示。
F=A ∧ B 或 F=A · B
“与”运算是指:仅当逻辑变量A与B都是1时, 运算结果F才为1。其它情况F为0,
即有: 0 ∧ 0 =0 , 0 ∧ 1 = 0 , 1 ∧ 0 = 0 , 1 ∧ 1 =1
2. “或”运算(OR)
“或”运算也叫逻辑加,用∨或+表示。
即有:F=A ∨B F=A +B
“或”运算是指当逻辑变量A与B中,至少有一 个为1时,结果F为1,其他情况F为0。
即有: 0 ∨ 0 = 0 , 0 ∨ 1 = 1 , 1 ∨ 0 = 1 , 1 ∨ 1 = 1
3. “非”运算
如A为1,则A=0,若A为0,则A=1
1 = 0 , 0 = 1
4. “异或”运算(XOR)
通常用 ⊕表示,即 F = A ⊕ B
“异或”运算是指:当A和B相同时(同时为1或同时为 0),运算结果F为0,而不同时,F为1。
运算规则为:1 ⊕ 1 = 0 , 1 ⊕ 0 = 1 , 0 ⊕ 1 = 1 , 0 ⊕ 0 = 0
]]>A:为什么要有数组(容器)
B:数组概念
C:数组定义格式
数据类型[] 数组名 = new 数据类型[数组的长度];
1 | int[] arr = {1,2,3}; |
1 | public static void print(int[] arr) { |
1 | public static int getMax(int[] arr) { |
1 | public static void reverseArray(int[] arr) { |
1 | public static char getWeek(int week) { |
1 | public static int getIndex(int[] arr,int value) { |
A:二维数组概述
B:二维数组格式1
C:二维数组格式1的解释
D:注意事项
int x;int y;int x,y;int[] x;int[] y[];int[] x,y[];x是一维数组,y是二维数组
E:案例演示
需求:二维数组遍历
外循环控制的是二维数组的长度,其实就是一维数组的个数。
内循环控制的是一维数组的长度。
1 | int[][] arr = {{1,2,3},{4,5},{6,7,8,9}}; |
需求:公司年销售额求和某公司按照季度和月份统计的数据如下:单位(万元)第一季度:22,66,44第二季度:77,33,88第三季度:25,45,65第四季度:11,66,99
1 | int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}}; |
看程序写结果,并画内存图解释
1 | public static void main(String[] args) { |
for(初始化表达式;条件表达式;循环后的操作表达式) {循环体;}
需求:在控制台输出所有的”水仙花数”
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 111 + 555 + 333 = 1 + 125 + 27 = 153
while循环的基本格式:while(判断条件语句) {循环体语句;}完整格式:初始化语句; while(判断条件语句) { 循环体语句; 控制条件语句;}
do {循环体语句;}while(判断条件语句);完整格式;初始化语句;do {循环体语句;控制条件语句;}while(判断条件语句);
如图:********************注意:System.out.println("*");和System.out.print("*");的区别
需求:请输出下列的形状***************
注意:'\x' x表示任意,\是转义符号,这种做法叫转移字符。'\t'tab键的位置'\r'回车'\n'换行'\"''\''
for(int x=1; x<=10; x++) {if(x%3==0) {//在此处填写代码}System.out.println(“Java基础班”);}我想在控制台输出2次:“Java基础班“我想在控制台输出7次:“Java基础班“我想在控制台输出13次:“Java基础班“
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {方法体语句;return 返回值; }
在同一个类中,方法名相同,参数列表不同。与返回值类型无关。
参数列表不同:
把今天的知识点总结一遍。
]]>A:逻辑运算符有哪些
B:案例演示
逻辑运算符的基本用法
注意事项:
C:结论:
&逻辑与:有false则false。
|逻辑或:有true则true。
^逻辑异或:相同为false,不同为true。
!逻辑非:非false则true,非true则false。
位运算符的基本用法1
&,|,^,~ 的用法
&:有0则0
|:有1则1
^:相同则0,不同则1
~:按位取反
A:案例演示
位异或运算符的特点
^的特点:一个数据对另一个数据位异或两次,该数本身不变。
B:面试题:
:右移最高位是0,左边补齐0;最高为是1,左边补齐1
* >>>:无符号右移 无论最高位是0还是1,左边补齐0
* 最有效率的算出2 * 8的结果
(关系表达式) ? 表达式1 : 表达式2;
if(比较表达式) {语句体;}
if(比较表达式) {语句体1;}else {语句体2;}
a:获取两个数据中较大的值
b:判断一个数据是奇数还是偶数,并输出是奇数还是偶数
注意事项:else后面是没有比较表达式的,只有if后面有。
if语句和三元运算符的区别
三元运算符实现的,都可以采用if语句实现。反之不成立。
什么时候if语句实现不能用三元改进呢?
if(比较表达式1) {语句体1;}else if(比较表达式2) {语句体2;}else if(比较表达式3) {语句体3;}...else {语句体n+1;}
首先计算比较表达式1看其返回值是true还是false,
如果是true,就执行语句体1,if语句结束。
如果是false,接着计算比较表达式2看其返回值是true还是false,
如果是true,就执行语句体2,if语句结束。
如果是false,接着计算比较表达式3看其返回值是true还是false,
如果都是false,就执行语句体n+1。
A:练习1
需求:键盘录入一个成绩,判断并输出成绩的等级。90-100 优80-89 良70-79 中60-69 及0-59 差
B:练习2
键盘录入x的值,计算出y的并输出。
x>=3y = 2 * x + 1;
-1<x<3y = 2 * x;
x<=-1y = 2 * x - 1;
A:switch语句的格式
switch(表达式) { case 值1:语句体1;break; case 值2:语句体2;break; … default:语句体n+1;break; }
B:switch语句的格式解释
C:面试题
char,byte,short,int以及它们的包装类都可以。JAVA SE 7以后,String 类型也可以。
C:执行流程
1 | int x = 2; |
1 | int x = 2; |
A:总结switch语句和if语句的各自使用场景
switch建议判断固定值的时候用
if建议判断区间或范围的时候用
B:案例演示
把今天的知识点总结一遍。
]]>拼命着想的事 未必带来感动
五部分:控制器,运算器,存储器,输入设备,输出设备
地址总线、数据总线、控制总线。
字长,存储容量,指令系统,运算速度,系统配置
微型计算机的五大性能指标分别是:存储容量、字长、软件配置情况、外设扩展能力、主频。
存储容量:包括内存容量和外存容量,是衡量微型计算机中存储能力的一个指标。内存容量以字节为单位,分最大容量和装机容量。
字长:
字长是计算机内部一次可以处理的二进制数的位数,有4位、8位、16位,高档微型计算机字长为32位或64位。
软件配置情况:
软件配置情况直接影响微型计算机系统的使用和性能的发挥。通常应配置的软件有:操作系统、计算机语言以及工具软件等,另外还可配置数据库管理系统和各种应用软件。
外设扩展能力:
一台微型计算机可配置外部设备的数量以及配置外部设备的类型,对整个系统的性能有重大影响。如显示器的分辨率、多媒体接口功能和打印机型号等,都是外部设备选择中要考虑的问题。
主频:
主频是指微型计算机中CPU的时钟频率,也就是CPU运算时的工作频率。主频越高,一个时钟周期里完成的指令数越多,CPU的速度越快。
EU:只负责执行指令。执行的指令从BIU的指令缓冲器中取得,执行指令的结果或执行指令所需的数据,都由EU向BIU发出请求,再由BIU在存储器或外存中进行存取。
BIU:负责完成CPU与存储器或I/O设备之间的数据传送。
BIU指总线接口单元,EU指执行单元。
BIU与EU合称为8086、8088两大独立工作单元。其中BIU负责从内存指定区域取出指令传送到指令队列中排队;执行指令时所需要的操作数也由BIU从相应的内存区域取出,传送给执行部件EU。指令执行的结果如果需要存入内存的话,也由BIU写入相应的内存区域。总之,BIU同外部总线连接为EU完成所有的总线操作,并形成20位的内存物理地址。
1.寄存器按照功能的不同可分为通用寄存器(AX,BX,CX,DX,SP,BP,SI,DI。其中的前四个寄存器可分别分成AH,AL ;BH,BL;CH,CL;DH,DL的八位寄存器)、指令指针寄存器(IP)、标志寄存器(FLAGS)、段寄存器(CS,DS,ES,SS)。它们的区别和联系体现在它们的功能上,对它们的深入了解和正确运用需要通过编写程序来实现。
2.大致功能如下:
AX,可存放一般数据,而且可作为累加器使用;
BX,可存放一般数据,而且可用来存放数据的指针(偏移地址),常常和DS寄存器连用;
CX,可存放一般数据,而且可用来做计数器,常常将循环次数用它来存放;
DX,可存放一般数据,而且可用来存放乘法运算产生的部分积,或用来存放输入输出的端口地址(指针);
SP,用于寻址一个称为堆栈的存储区,通过它来访问堆栈数据;
BP,可存放一般数据,用来存放访问堆栈段的一个数据区,作为基地址;
SI,可存放一般数据,还可用于串操作中,存放源地址,对一串数据访问;
DI,可存放一般数据,还可用于串操作中,存放目的地址,对一串数据访问;
IP,用于寻址当前需要取出的指令字节,程序员不能对它直接操作;
FLAGS,用于指示微处理器的状态并控制它的操作;
CS,代码段寄存器,代码段是一个存储区域,存放的是CPU要使用的代码,CS存放代码段的段基地址;
DS,数据段寄存器,数据段是包含程序使用的大部分数据的存储区,DS中存放数据段的段基地址;
ES,附加段寄存器,附加段是为某些串操作指令存放目的操作数而附近的一个数据段,ES中存放该数据段的段基地址;
SS,堆栈段寄存器,堆栈段是内存中一个特殊的存储区,用于暂时存放程序运行时所需的数据或地址信息。SS中存放该存储区的段基地址。
基本功能就是这些,要想透彻掌握深层的寄存器功能,必须要编写汇编源程序,可用微软的masm汇编程序进行编译,用dos系统自带的debug命令调试,直到程序正确运行,才能体会其中的奥妙。
8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字PSW(标志位),简称flag。flag和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。
ZF标志(ZeroFlag):
零位标志位,它记录相关指令执行后的结果是否为0,如果是0,那么ZF=1,如果结果不为0,那么ZF=0。
PF标志(ParityFlag):
奇偶标志位,它记录相关指令执行后,其结果的所有二进制位中1个个数是否为偶数,如果是偶数,PF=1,反之为0。
SF标志(SignFlag):
符号标志位,它记录相关指令执行后,其结果是否为负,如果结果为负,SF=1,如果非负,SF=0。
CF标志(Carry进位,Flag标志):
进位标志位,一般情况,进行无符号运算时,它记录运算结果的最高位向更高位的进位值,或从更高位的借位值,如果运算结果的最高位产生了一个进位或借位,那么其值为1,否则其值为0。
OF标志(Overflow溢出,Flag标志):
溢出标志位,在进行有符号数运算的时候,如果结果超出了机器所能表示的范围称为溢出,OF的值被置为1,否则OF的值为0。
注意:这里所说的溢出,只是对有符号运算而言。
TF标志(TrapFlag):
追踪标志位,当追踪标志被置为1时,CPU进入单步执行方式,即每执行一条指令产生一个单步中断请求,这中方式主要用于程序的调试。
IF标志(Interrupt-enable Flag):
中断允许标志位,用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求,但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。
+ 当IF=1时,CPU可以相应CPU外部的可屏蔽中断发出的中断请求。+ 当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
80386共提供7种类型的32位寄存器,如下:
通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)段寄存器(CS、SS、DS、ES、FS、GS)指令指针寄存器和标志寄存器(EIP、EFLAGS)系统表寄存器(GDTR、IDTR、LDTR、TR)控制寄存器(CR0、CR1、CR2、CR3、CR4)调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)测试寄存器(TR6、TR7) 其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。
一个完整的计算机系统由硬件系统和软件系统组成。没有软件的计算机称为“裸机”,什么事情也做不了。硬件是基础,是软件的载体,软件则使硬件具有了使用价值。两者相辅相成,缺一不可。
]]>A:什么是常量
B:Java中常量的分类
C:字面值常量的分类
D:案例演示
byte,short,char – int – long – float – double
long: 8个字节
float:4个字节
IEEE754
4个字节是32个二进制位
1位是符号位
8位是指数位
00000000 11111111
0到255
1到254
-126到127
23位是尾数位
每个指数位减去127
A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
System.out.println(‘a’);
System.out.println(‘a’+1);
通过看结果知道’a’的值是多少,由此引出ASCII码表
A:案例演示
int a = 10;int b = 10;int c = 10;a = b++;//10c = --a;//9b = ++a;//10a = c--;//9
B:案例演示
请分别计算出x,y的值?
int x = 4;int y = (x++)+(++x)+(x*10);
C:面试题
a:基本的赋值运算符:=
b:扩展的赋值运算符:+=,-=,*=,/=,%=
无论你的操作是简单还是复杂,结果是boolean类型。
“==“不能写成”=”。
下载地址: https://www.jetbrains.com/idea/download/?fromIDE=#section=windows
Community 版本为开源免费版
Ultimate 为企业版,试用期一个月
版本请自行选择,建议使用Community
然后打开安装,选择安装目录后,会出现如下界面,选择适合自己系统的版本,Java必选,后面的按需选择
完成安装后,进行配置,第三项为不采用旧设置
然后选择jdk安装路径后,进入主界面
jdk选择界面忘了截图了·······
上面这是少部分截图,有太多的主题,有兴趣的自己去看一下,总有一款适合你。
使用方式如下:
(1) 找到你喜欢的主题模版,点击右下角的下载按钮,进入如下图:
点击上图中的绿色的按钮下载。
(2)下载下来是一个很小的 Jar包,我们直接包jar包导入Android Studio 。在Android Studio 上 点击 File -> Import Settings ,选择中下载的jar 包,来到如下界面:
(3)如上图,点击确认,会提示重启 IntelliJ IDEA ,点击OK 重启 IntelliJ IDEA 就好。
(4)重启之后,主题就已经应用上了,如下图:
Color Themes 上面有很多主题模版,你自己去挑选就好了。
使用 Material Theme UI 插件主题:
通过上面的方法,就能为 IntelliJ IDEA 应用一个自己喜欢的个性化主题,但是有一个缺点:这些主题只更改了代码编辑区域,左边的包结构区域和菜单栏还是和原来是一样的,看起来和整体风格好像不是很搭,那么有没有可以使整个AS的风格都改变的主题呢?通过Google ,找到了Material Theme UI,原文地址Making Android Studio pretty,Material Theme UI 是一个 IntelliJ IDEA 插件,它提供了三种主题供选择,效果非常不错,更赞的是,它连除了代码区域之外的风格也改变了,应用了Material Theme UI 主题的效果图如下:
为避免重复造轮子,使用方法请直接查看 Material Theme 原文。
前面介绍了几种打造炫酷主题的方式,效果已经非常赞了,但是我们看一下我们的Logcat ,只有白色和红色两种Log,看起来有点Low ,与我们炫酷的主题不搭啊,因此我们还得改造一下控制台的Log输出。更改之前的效果如下:
打造花式Log的方法:
(1) 在Android Studio 菜单栏 打开** Preferences -> Editer -> Colors & Fonts -> Android Logcat**(2) 在Scheme选项后面点击Save As… 保存一个拷贝,在拷贝上面更改,总共有六项,如下图所示,选中每一项依次更改。
最终效果如下图所示
如上图所示,效果是不是好了很多!!!也与我们的整体主题风格搭配。贴一下我使用的各项颜色值:
Assert: #AA66CC
Debug: #33B5E5
Error: #FF4444
Info: #99CC00
Verbose: #FFFFFF
Warning: #FFBB33
未知之神,何时我才能在我的高处俯视,说:你们想升高时,就向上仰望。我向下俯视,因为我已升高?[1]
How long before I get in
在我抵达之前已过了多久
Before it starts before I begin
在开启旅途之前 在我启程之前
How long before you decide or
在你做决定之前已过了多久
Before I know what it feels like
在我体会到这种远行的滋味之前
Where to, where do I go?
朝着何方 我要去何方
If you never try then you'll never know
如果你从不去尝试 你将永远无法知晓
How long do I have to climb
我还得往上攀爬多久呢
Up on the side of this mountain of mine
一直沿着这座山向上爬
当我抬头仰望时,其它所有的一切都以声速在脑后消散,如飞鸟般,你也能看到吗?
Look up, I look up at night
抬头仰望 我在夜里仰望
Planets are moving at the speed of light
行星正以光速急速移动
Climb up, up in the trees
往上爬呀 爬过这片树林
Every chance that you get is a chance you seize
你赢得的每一次机会你都必须抓牢
How long am I gonna stand
我还得伫立多久呢
With my head stuck under the sand
头颅深埋进沙堆里
I start before I can stop or
我会再度启程直到我想要停下
Before I see things the right way up
直到前方事物闯入我的视野
All that noise and all that sound
所有的噪声与喧哗
All those places I got found
我途径找到的所有那些地方
And birds go flying at the speed of sound
飞鸟声速般一哄而散
To show you how it all began
为了向你预示这一切是如何开始
Birds came flying from the underground
群鸟从地底下飞掠上来
If you could see it then you'd understand
如果你见过它们你就会憬悟
我一直相信有些神奇的事物在等待着我来创造,有些神秘的谜团在等待着我来解答,群鸟正从地底飞上来,你也能看到吗?
Ideas that you'll never find
你脑子里从未闪现过的新奇想法
All the inventors could never design
所有的发明家从没有设计过
The buildings that you put up
你精心一手建造的建筑物
But you've been in China all lit up
但你到过辉煌灿烂的中国
A sign that I couldn't read
一个我辨认不出的古老符号
or a light, that I couldn't see
抑或一束我无法直视的光芒
Some things you have to believe
你不得不相信一些事情
When others are puzzles, puzzling me
当其他人就像谜团一样令我困惑不解
All that noise and all that sound
所有的噪声与喧哗
All those places I got found
我途径找到的所有那些地方
And birds go flying at the speed of sound
群鸟从地底下飞掠上来
To show you how it all began
为了向你预示这一切是如何开始
Birds came flying from the underground
群鸟从地底下飞掠上来
If you could see it then you'd understand
如果你见过它们你就会憬悟
Oh, when you see it then you'll understand
噢 当你见过你就会憬悟
一直相信,一直攀爬,再次抬头仰望时,其它所有的一切又都以声速在脑后消散,那么现在:
夫子说:“现在你应该从怠惰中
摆脱出来,因为坐在绒毛上面,
或者睡在被窝里的人是不会成名的;
没有名声而磋砣一生,
人们在人世留下的痕迹,
就像空中的烟云,水上的泡沫;
因此起来吧!用那战胜一切战役的
灵魂来战胜你的气喘,
假使灵魂不和沉重的躯壳一起下沉。
一架更长的梯子还需要爬登:
走过了这些地方还不够;你若懂得我,
那么起来吧,这对你有好处。”^[2]^
1.尼采:《查拉图斯特拉如是说》(钱春绮译),p39,《读和写》。 ↩
2.但丁:《神曲》,地狱篇,第二十四歌。 ↩
安装的插件:
npm install hexo-generator-feed --save
安装 :npm install hexo-wordcount --save
然后在主题配置文件中启用
安装:npm install hexo-symbols-count-time --save
打开 :~\blog_config.yml
添加
1 | symbols_count_time: |
然后在主题配置文件中启用
安装 hexo-generator-searchdb,在站点的根目录下执行以下命令:
npm install hexo-generator-searchdb --save
编辑 站点配置文件,新增以下内容到任意位置:
search:
path: search.xml
field: post
format: html
limit: 10000
编辑 主题配置文件,启用本地搜索功能:
# Local search
local_search:
enable: true
npm install hexo-abbrlink --save
permalink: post/:abbrlink.html
permalink_defaults:
abbrlink:
alg: crc32 # 算法:crc16(default) and crc32
rep: hex # 进制:dec(default) and hex
1 | {{ tagcloud({min_font: 13, max_font: 31, amount: 1000, color: true, start_color: '#9733EE', end_color: '#FF512F'}) }} |
修改对应参数值即可,参数说明见 Hexo 官方文档,颜色可以参考这个网站,自己去纠结……
hexo next自带版权开启
1 | #Declare license on posts |
配置文件路径:\hexo\themes\next\layout_macro\post-copyright.swig
1 | +{% if page.copyright %} |
布局文件路径:\hexo\themes\next\layout_macro\post.swig
我们都有自己的生日,都知道自己的岁数,那为什么不给博客加上,让读者知道博客的年纪呢?操作很简单,而且不是精确到年而是精确到秒,233333~
首先要加入下面代码:
1 | <div id="days"></div> |
上面Date的值记得改为你自己的,且按上面格式,然后修改:
1 | {# Blogroll #} |
这样就可以了!当然,要是不喜欢颜色,感觉不好看,就可以在上文所提的custom.styl
加入:
1 | // 自定义的侧栏时间样式 |
打开 \themes\next\source\css_variables\custom.styl
添加
1 | $main-desktop = 1200px |
以上适用于(NexT5.x版本),6.0+应该写
1 | $content-desktop-large = 830px |
~\blog\themes\next\layout_macro\post.swig
1 | - <div class="post-block"> |
~\blog\themes\next\layout_macro\post-collapse.swig
1 | {% macro render(post) %} |
~/blog/themes/next/layout/_macro/post.swig
1 | {% if theme.rating.enable %} |
然后 Ctrl + F 搜索rating,找到这段,对比我给出的,在绿色这行所示的位置,加上自己想要的说明和样式即可。
gulp.js 是基于流的自动化构建工具,我们可以使用 Gulp 为 Hexo 压缩文件
首先任意目录全局安装:
1 | npm install gulp -g |
然后到站点文件夹根目录:
1 | npm install gulp-minify-css --save |
打开 \blog\
新建 gulpfile.js
写入
1 | var gulp = require('gulp'); |
打开 \themes\next\layout_macro\
新建 passage-end-tag.swig
写入
1 | {% if theme.passage_end_tag.enabled %} |
打开 \themes\next\layout_macro\post.swig
查找 wechat
添加,如下内容
1 | {#####################} |
打开 \themes\next_config.yml
添加
1 |
|
live2d官方文档
安装 npm install --save hexo-helper-live2d
下载模型包:live2d-widget-models
解压
将packages
中的文件放到node_modules
中
打开 ~\blog_config.yml
添加
1 | live2d: |
打开 \themes\next\layout_custom\
新建 custom.swig
打开 \themes\next\layout_layout.swig
在 </body> 前添加
1 | {% include '_custom/custom.swig' %} |
下载 activate-power-mode.js
放置 activate-power-mode.js 至 CDN
打开 \themes\next\layout_custom\custom.swig
添加
1 | <!-- 打字礼花及震动特效 --> |
参考自 :emoji插件
安装
1 | npm install hexo-generator-sitemap --save |
在站点配置文件中启用
1 | # 自动生成sitemap |
打开 ~\blog\themes\next6.4\layout_partials\head\
新建 password.swig
写入
1 |
|
然后打开~\blog\themes\next6.4\layout_partials\head\head.swig
写入
1 | <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2"/> |
最后 在需要加密的文章前面增加属性 password
插件地址: https://github.com/MikeCoder/hexo-blog-encrypt
打开 ~\blog\themes\next6.4\layout_macro\post.swig
搜索: post.description
下面添加:
1 |
|
然后在文章 中写:
1 | image: |
直接在文章 中写(默认支持):
1 | photos: |
打开 \blog\node_modules\hexo-generator-index\lib\generator.js
将内容修改为
1 | ; |
使用方法
在文章中添加 sticky 值,数值越大文章越靠前,如
1 | title: hexo优化基于NexT6.4 |
计算机硬件(Computer Hardware)是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。
冯.诺依曼体系结构
计算机的硬件分成5大组成部件:运算器、控制器、存储器、输入设备和输出设备。
A:定义类
B:写main方法
C:写输出语句
D:Java程序开发运行与工作原理
E:编译和运行程序
class HelloWorld {public static void main(String[] args) {System.out.println("HelloWorld");}}
A:为什么要配置classpath
B:classpath配置的原理
C:如何配置classpath
path和classpath的区别
A:什么是注释
B:注释的分类及讲解
注释的作用
不知道你有没有这样的感受?
走在街上,感觉自己的耳膜被短视频神曲轮番轰炸:从C哩C哩到123我爱你,从Despacito到确认过眼神;
排队等餐厅叫号,公交车站等公交,90%的人都在低头刷手机,嘴角不时地浮现出蜜汁微笑;
朋友圈和微博上,无数人发出这样的感慨:“抖音有毒,不知不觉我竟然刷了一整天。”
有数据统计,玩短视频85%的用户在24岁以下,基本上都是95后,甚至是00后。
越来越多的年轻人将时间花在刷短视频上,通过手机窥见别人的生活和人生。
然后放下手机,突然觉得周边的一切都索然无味。
《双城记》中,狄更斯说:“这是一个最好的时代,这是一个最坏的时代。”
在这个时代里,摧毁一个中国年轻人,真的很容易。
看过这样一项调查:
95后最向往的新兴职业中,主播、网红占据了54%。
然而,这些主播、网红们,向年轻人们传递的都是什么样的价值观呢?
有美女网红直播撕书,高调地宣称:她们不读书照样开跑车,大学生也得给她们打工;
有17岁的女生整容、泡夜店、炫富、私生活混乱,却凭借着一段摇头晃脑的短视频走红,获得千万点赞;
有00后网红互相攀比早恋早孕,直播晒肚子、晒孩子,还分享一些“相关经验”,抱着孩子就能顺带把钱赚了。
……
这些人的走红让年轻人看到一种成功的捷径,只要红了,就有钱了。
一些人生观、价值观还未成熟的未成年人,通过网红的世界仿佛看到了另一种活法:
既然那么简单就可以赚到快钱和关注,谁还愿意头悬梁、锥刺股地寒窗苦读呢?
既然拍一条短视频就可以抵上普通白领几个月的工资,谁还愿意勤勤恳恳地工作呢?
读书太苦了,工作太累了,不如整成网红脸,发几条短视频赚取关注和流量。
最好再傍上一位有钱的金主,从此就能享受纸醉金迷,过上最光鲜亮丽的生活
……
不知道有多少人被这样的价值观荼毒,荒废了学业、堕落了青春。
细思极恐。
这个时代,毁掉一个中国年轻人,只需要一种脱轨的价值观就够了。
有人说:现代的中国年轻人,习惯于在微信运动里刷存在感,在网络小说中找爱情,在游戏里成就“王者荣耀”。
微博上的娱乐圈八卦新闻,让你沉浸在明星的绯闻琐事之中无法自拔;
短小的公众号、头条文章,控制在2000字左右,保证让你5分钟能读完;
抖音短视频15秒就给你一个刺激,你永远也不知道下一个15秒会刷到什么。
……
这些利用流量、算法机制推荐的软件,都在利用大数据慢慢掏空你的时间。
这些软件,为什么能如此让人上瘾?
因为你的每一次点击、每一次滑动,都会有实时的反馈。
这些及时的反馈刺激大脑多次产生多巴胺,并形成依赖,渴望下一个刺激到来,陷入死循环。
这些能提供短期快感的软件,就像不折不扣的精神鸦片。
你麻木地盯着手机屏幕,玩到忘情所以、看到眼睛发酸,却不知自己的深度思考能力正在逐渐被腐蚀。
到最后,除了大量的时间白白被浪费,你一无所得,留下的只会是满满的空虚。
网络段子张口就来,抖音上的梗知道得比谁都多,网红的名字如数家珍,却忘了自己有多久没有好好看过一部经典电影、一本纸质书。
……
你慢慢变成了自己曾经最鄙视的那种人,离记忆里那个朝气蓬勃的少年越来越远。
你的生活变成了简单的两点一线,自己在虚假的满足感中丧失了任何向上的动力。
这个时代,毁掉一个中国年轻人,只需要一个能获得短期快感的app就够了。
这个快节奏的时代,那些选择慢下来的“异类”,反而让人觉得可爱。
就像歌手李健,在拍《我是歌手》的时候,被曝出一直用的是老旧的诺基亚键盘手机。
他说:“没有智能手机,受干扰的机会就少了许多。”
他就像生活的旁观者,安静地听音乐、阅读、思考、观察这个世界。
他会强迫自己读一些比较难啃的经典书籍:
“童话读起来毫不费力,但人的一生不可能只是读童话,还是要强迫自己读一些看不懂、不好读的书。强迫自己读下来,一定会有收获。”
他心目中的理想生活是让自己置身于另一个空间,去旅行,带着书和一把小琴。
又像作家皮克·耶尔,逃离曼哈顿的摩天大楼,关掉电脑、抛开手机、逃离都市的喧嚣。
他喜欢上了独处和思考,让精神和身体得到彻底的放松,给自己一个留白的空间。
林语堂先生曾经说过:“一个人只拥有此生此世是不够的,他还应该拥有诗意的世界。”
你的精力分配,反映了你是什么层次的人。
从他们身上,我看到的不是浮躁的价值观、空虚的短期快感,而是一种安静的力量。
多少人嘴里说着:“垃圾游戏,毁我青春。”“短视频有毒,浪费时间。”
然而,毁掉你的,不是短视频,不是游戏,而是不够自律的你自己。
当你从脱轨的价值观、虚拟的快感中抽离,重新审视自己,审视周围。
你会发现:真正能让你获得充实感和满足感的,是那些需要长期投入的事物。
柴静在《看见》里写道:“从不假思索的愚昧里挣脱,这才是活着。”
不要让自己变成一个被浮躁的价值观、短期的快感废掉的年轻人。
你现在每一天短暂的享乐,都在透支着未来。
共勉。
]]>ADSL (Asymmetric Digital SubscriberLine) 非对称数字用户线
ARQ (Automatic Repeat reQU t)自动重传请求
CDMA (Code Division MultiplexAccess)码分多址
DHCP (Dynamic Host Configuration Protocol) 动态主机配置协议
DNS (Domain Name System) 域名系统
FDM (Frequency Division Multiplexing) 频分复用
FTP(FileTransferProtocol)文件传送协议
HTML (HyperText Markup Language) 超文本标记语言
ICMP (Internet Control Message Protocol) 网际控制报文协议
lP (Internet Protocol) 网际协议
NAT (NetworkAddress Translation) 网络地址转换
OSPF (Open Shortest Path First) 开放最短通路优先
POP(Post Office Protocol) 邮局协议
PPP (Point-to-Point Protocol) 点对点协议
RFC (Request For Comments) 请求评论
SMTP (Simple MailTransferProtocol) 简单邮件传送协议
STDM (Statistic TDM) 统计时分复用
STM (Synchronous Transfer Module) 同步传递模块
TCP (Transmission Control Protocol) 传输控制协议
TFTP (Trivial File Transfer Protocol) 简单文件传送协议
UDP (UserDatagram Protocol) 用户数据报协议
URL (Uniform Resource Locator) 统一资源定位符
WLAN (Wireless Local AreaNetwork) 无线局域网
WPAN (Wireless Personal Area Network) 无线个人区域网
WWW (World WideWeb) 万维网
ICMP (Internet Control Message Protocol)Internet控制报文协议
MTU (Maximum Transmission Unit)最大传输单元
]]>从https://www.zhihu.com/question/34415763得到问题解决办法,现做如下总结。
异常原因:VSCODE默认是UTF-8编码打开文件的。如果遇到了像GB18030 GBK等等的编码,就显示乱码了。
解决办法如下:
1,一劳永逸法:
在设置文件中加入: “files.autoGuessEncoding”:true
,自动识别字符编码。
ps:a:此设置可能需要最新版本的VScode,因为我当前用的就是最新版,所以修改后显示马上正常了。
b:设置文件打开位置:文件–.>首选项–>设置–>用户设置。
2,单个文件解决办法:
vs code界面右下角位置有显示解析当前文件所用的字符源码(默认是UTF-8),单击该处,手动更改编码
3,vscode默认文件字符编码为utf-8,可以在用户设置修改该属性,如:files.encoding":“gbk”
]]>OSI/RM包括哪些层次?
应用层、表示层、会话层、运输层、网络层、数据链路层、物理层
TCP/IP包括哪些层次?
应用层、运输层、网际层IP、网络接口层
五层协议?
应用层、运输层、网络层、数据链路层、物理层
物理层的主要任务是?
频分复用
频分复用的所有用户在同样的时间占用不同的带宽资源(请注意,这里的“带宽”是频率带宽而不是数据的发送速率)。
时分复用
统计时分复用
又称异步时分复用,常用于:集中器
波分复用:光的频分复用
码分复用:
一个码元传输速率为300Baud的信道,如果采用4元制,其信道的传输速率为( B )
A.300bit/s B.600bit/s
C.1200bit/s D.2400bit/s
采用8个相位的调相传输码元,传输速率为200Baud,则数据传输率为( B )
A.400bit/s B.600bit/s
C.800bit/s D.1600bit/s
对于带宽为50khz的信道,若用16种不同的物理状态来表示数据,信噪比为20dB,问该信道的最大数据传输率是多少?若不考虑噪声,则信道的极限传输速率是多少?
解:
根据奈奎斯特定理:
C=2Wlog2 𝑽=2*50*log216=400kbit/s
香浓定理:
因为:10log10 (S/N)=20dB,所以S/N=100
C = W log2(1+S/N)
=50*log2(1+100)kbit/s
=333kbit/s
课后习题
5、7、8、13(2)、14(1)、16
宽带接入技术有哪些?
2.6.1 ADSL 技术
2.6.2 光纤同轴混合网(HFC网)
主干部分改换为光纤,并使用模拟光纤技术
2.6.3 FTTx 技术
多种宽带光纤接入
数据链路层的信道有哪些?.
点对点信道
广播信道
帧定界的方法有哪些?
带位填充的首尾标记定界法
违法编码定界法
用控制字符进行帧定界法(SOH和EOT)
1. 要发送的数据是1101 0110 11,采用CRC校验,生成多项式是10011,那么最终发送的数据应该是( 1101 0110 1111 10 )
2. 采用生成多项式x6+x4+x+1发送的报文到达接收方为101011000110,所接收的报文是否正确?试说明理由。
多项式x6+x4+x+1对应的位串是1010011,用它来除接收到的报文,若能整除则所接收报文正确。
能够整除,所以收到的报文是正确的。
3. 一个准备发送的PPP帧的数据部分是
7E AB 15 7D 78 09 7E。试问进行字符填充后的数据是什么(用十六进制写出)
解:7D 5E AB 7D 35 7D 5D 78 7D 29 7D 5E
4. 一个PPP帧的数据部分(用十六进制写出)是7D 5E FE 27 7D 5D 7D 23 44 7D 5E。试问真正的数据是什么(用十六进制写出)
解:7E FE 27 7D 03 44 7E
5. PPP协议使用同步传输技术传送比特串01110 11111 11111 010,试问经过零比特填充后变成怎样的比特串?若接收端收到的PPP帧的数据部分是00011 10111 11011 11100 1010,问删除发送端加入的零比特后变成怎么样的比特串?
解:
01110 11111 011111 0010
00011 10111 11111 11010 10
PPP帧如何解决透明传输问题
CSMA/CD协议的要点有哪些?P88
多点接入:总线型网络,许多计算机以多点接入的方式连接在一根总线上
载波监听:发送前检测信道是否空闲,空闲则发送,若忙则继续检测,直到空闲发送。
碰撞检测:边发送变检测;在发送过程中继续检测信道,若一直未检测到碰撞,就顺利把这个帧成功发送完毕。若检测到碰撞,则终止数据的发送,并发送人为的阻塞信号
判对错:
CSMA/CD以太网是全双工通信。(错)
曼彻斯特编码是一种自同步编码。(对)
以太网中,小于64字节的帧是无效帧。(对)
循环冗余校验码的缩写为CRC。(对)
1.CSMA/CD定义的冲突检测时间是( A )
A.信号在最远两个端点之间往返传输的时间
B.信号从线路一端传输到另一端的时间
C.从发送开始到收到应答的时间
D.从发送完毕到收到应答的时间
2.CSMA/CD方法用来解决多结点如何共享共用总线传输介质的问题,在采用CSMA/CD的网络中( A )
A.不存在集中控制的结点
B.存在一个集中控制的结点
C.存在多个集中控制的结点
D.可以有也可以没有集中控制的结点
3.若10Mbps的CSMA/CD局域网的结点的最大距离为2.5km,信号在介质中的传播速度为2*108m/s。求该网的最短帧长。
解:最短帧 =2*[(2.5*103m)/(2*108m/s)]*10*106bps=250bit
4.在一个采用CSMA/CD协议的网络中,传输介质是一个完整的电缆,传输速率为1Gbps,电缆中的信号传播速度是200000km/s。若最小数据帧长度减少800比特,则最远的两个站点之间的距离至少需要( D )
A.增加160m B.增加80m C.减少160m D.减少80m
本题为2009年全国考研题
MAC帧的格式是?
哪些属于无效的MAC帧?
帧的长度不是整数个字节;
用收到的帧检验序列 FCS 查出有差错;
数据字段的长度不在 46 ~ 1500 字节之间。
网桥自学习和转发帧的步骤是?
1.点对点协议PPP
满足的需求:
组成部分:
PPP帧格式:
标志字段 F = 0x7E 7E 的二进制表示是 01111110
地址字段 A 只置为 0xFF(广播)。
控制字段 C 通常置为 0x03(无序号的帧)。
这两个字段实际上并不起作用。
帧检验序列(FCS):用CRC计算得到
PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。
PPP 有一个 2 个字节的协议字段。其值
2.CSMA/CD协议(略)
3.MAC帧 P96
4.扩展以太网(物理层、数据链路层、VLAN) P97
三个基本概念:广播 广播域 冲突域
5.高速以太网 P103
课后复习题
3、7、8、9、10、14(1、2)
1.要发送的数据比特序列为10100 01101,CRC校验生成多项式为G(x)=x5+x4+x2+1,试计算CRC校验码
2、若构造一个CSMA/CD总线网,速率为100Mbit/s,信号在电缆中传播速度为2*105km/s,数据帧的最小长度为125B。试求总线电缆的最大长度(假设总线电缆中无中继器)
答案:
1、01110
2、125*8 = 108*t --> t = 103/108=10-5
T=2s/v -> s=t*v/2=10-5*2*108/2=103
3、通过IEEE802.3局域网传送ASCII码信息”Good morning!”,若封装成一个MAC帧,请问:
(1)、该帧的数据字段有效字节为多少?
(2)、需要填充多少个字节?
4、一个准备发送的PPP帧的数据部分是
EB 7E 5D 12 7D 21 5E 7E。试问进行字符填充后的数据是什么(用十六进制写出)
答案:
3、13B、46-13=33B
4、EB 7D 5E 5D 7D 32 7D 5D 21 5E 7D 5E
4.1 网络层提供的两种服务
4.2 网际协议 IP
4.3 划分子网和构造超网
4.4 网际控制报文协议 ICMP
4.5 互联网的路由选择协议
4.6 IPv6
4.7 IP 多播
4.8 虚拟专用网 VPN 和网络地址转换 NAT
4.9 多协议标记交换 MPLS
网际协议 IP
与 IP 协议配套使用的还有三个协议:
地址解析协议 ARP (Address Resolution Protocol)
网际控制报文协议 ICMP (Internet Control Message Protocol)
网际组管理协议 IGMP (Internet Group Management Protocol)
局域网与局域网的互连
IPv4地址分为A,B,C,D,E类:
- A类:1.0.0.0~126.255.255.255,默认子网掩码/8,即255.0.0.0 (其中127.0.0.0~127.255.255.255为环回地址,用于本地环回测试等用途);- B类:128.0.0.0~191.255.255.255,默认子网掩码/16,即255.255.0.0;- C类:192.0.0.0~223.255.255.255,默认子网掩码/24,即255.255.255.0;- D类:224.0.0.0~239.255.255.255,一般于用组播- E类:240.0.0.0~255.255.255.255(其中255.255.255.255为全网广播地址),E类地址一般用于研究用途..
IPv4中还有一种私有地址,即比如内部局域网所用的地址,分别为:
10.0.0.0~10.255.255.255;172.16.0.0~172.31.0.0;192.168.0.0~192.168.255.255
一般不指派的特殊IP地址 :
- 主机号全0、全1不指派- 网络号:- A类(0…) ——全0和127(01111111)不指派 - B类(10…) ——128.0不指派 - C类(110…)——192.0.0不指派- 主机号全0——本主机所连接的单个网络地址 - 主机号全1——指定网络内的所有主机 - 网络号全0——本网络 - 网络号127——保留作为本地软件环回测试,即本主机进程之间通信时使用
网络层的主要目的是( C )
A、在邻接结点间进行数据报传输 B、在邻接结点间进行数据报的可靠传输 C、在任意结点间进行数据报传输 D、在任意结点间进行数据报可靠传输
以下协议都为网络层协议的是( C ) …
A、IP、ICMP、ARP、UDP B、 TCP、ICMP、UDP、ARP C、 IP、ICMP、ARP、RARP D、UDP、 IP、ICMP、RARP
下列地址中,属于本地回路地址的是( D )
A、10.10.10.1 B、 255.255.255.0 C、 192.168.24.59 D、127.0.0.1
以下IP地址中可以作为互联网上的IP地址的是 ( C )
A、192.46.10.0 B、127.0.0.1 C、110.47.10.0 D、211.60.256.21
解:
经过第一个网络时进行分片,分为2个分片 分片1携带1480B的数据,大小为1500B; 分片2携带520B的数据,大小为540B; 经过第2个网络时,分片1需要进一步分片 分片3携带556B数据,大小为576B 分片4携带556B数据,大小为576B 分片5携带368B数据,大小为388B 分片2大小为540B,因此无需分片 目的主机将收到4个分片,即分片2、3、4、5
解:
1. 是,校验和为3F F1,与分组头中的检验和值不同 2. 没有,分组头长5,不包含选项部分 3. 已经被分割,偏移值不等于04. 总长度84个字节(0x54),头长20,因此数据域的长 度是64个字节 5. 32(0x20) 6. 00 03(十六进制) 7. 0x00 8. 源地址:124.78.3.2 目的地址:180.14.15.2
在某个子网中给一共四台主机分配IP地址(子网 掩码均为255.255.255.224),其中一台因IP地 址分配不当存在通信故障,这一台主机IP地址是 ( A )
四个IP地址的最后一个字节为224---11100000A. 200.10.1.60 00111100B. 200.10.1.65 01000001C. 200.10.1.70 01000110 D. 200.10.1.75 01001011
例:将一个C类网络分成4个子网,若所用网络号为 192.9.200.0 ,则写出网络的子网掩码,并写出每个子网的IP地址范围
(1)求子网掩码 要划分4个子网,m=3 将11100000转换为十进制:224 子网掩码:255.255.255.224 (2)4个子网的IP地址范围(原网络号192.9.200.0) 1)当子网号=001时,二进制范围为 11000000 00001001 11001000 00100001~11000000 00001001 11001000 00111110 相应十进制范围为:192.9.200.33~192.9.200.62 2)当子网号=010时,二进制范围为 11000000 00001001 11001000 01000001 ~ 11000000 00001001 11001000 01011110 相应十进制范围为:192.9.200.65~192.9.200.94 3)当子网号=011时,二进制范围为 11000000 00001001 11001000 01100001 ~ 11000000 00001001 11001000 01111110 相应十进制范围为:192.9.200.97~192.9.200.126 4)当子网号=100时,二进制范围为 11000000 00001001 11001000 10000001 ~ 11000000 00001001 11001000 10011110 相应十进制范围为:192.9.200.129~192.9.200.158
作业:
现有一个公司需要创建内部的网络,该公司包括工 程技术部、市场部、财务部和办公室4个部门,每个部门约 有20~30台计算机。试问:
设某路由器建立了如下路由表:
现共收到5个分组,其目的地址分别为:
1. 128.96.39.10
2. 128.96.40.12
3. 128.96.40.151
4. 192.4.153.17
5. 192.4.153.90
试分别计算其下一跳
1. 128.96.39.10 m0 2. 128.96.40.12 R2 3. 128.96.40.151 R4 4. 192.4.153.17 R3 5. 192.4.153.90 R4
某单位分配到一个B类的IP地址,其Net-id为 129.250.0.0.该单位有4000台机器,分布在18个不同的网点,以后可能继续增大各网点的主机 数,试给出此网络的子网掩码。
假如正在构建一个有22个子网的B类网络,但是 几个月后该网络将增加至80个子网。每个子网 要求支持至少300个主机,应该选择下面哪个子 网掩码( B )
A 255.255.0.0 B 255.255.254.0 C 255.255.255.0 D 255.255.248.0
152.112.150.82/20所在地址块的最小最大地址 分别是?
152.112.144.0 152.112.159.255
有如下的4个/24地址块,试进行最大可能的聚合
212.56.132.0/24 212.56.133.0/24 212.56.134.0/24 212.56.135.0/24
已知地址块中的一个地址是140.120.84.24/20。试求这个地址块中最小地址和最大地址,地址掩码是什么?地址块中共有多少个地址?相当于多少 个C类地址
1.位于不同子网中的主机之间相互通信,下面说法中正确的 是( C )
A.路由器在转发IP数据报时,重新封装源IP地址和目的IP地址 B.路由器在转发IP数据报时,重新封装目的IP地址和目的硬件地址 C.路由器在转发IP数据报时,重新封装源硬件地址和目的硬件地址 D.路由器在转发IP数据报时,重新封装源IP地址和源硬件地址
2.关于IP提供的服务,下列说法中正确的是(A )
A.IP提供不可靠的数据报传送服务,因此数据报传送不能受到保障B.IP提供不可靠的数据报传送服务,因此它可以随意丢弃数据报 C.IP提供可靠的数据报传送服务,因此数据报传送可以受到保障 D.IP提供可靠的数据报传送服务,因此它不能随意丢弃数据报
3.一个主机有两个IP地址,一个地址是192.168.11.25,另一 个地址可能是(C )
A.192.168.11.0 B.192.168.11.26 C.192.168.13.25 D.192.168.11.24
4.下列地址中,属于子网86.32.0.0/12的地址是(A )
A.86.33.224.123 B.86.79.65.126 C.86.79.65.216 D.86.68.206.154
5.某单位分配了一个B类地址,计划将内部网络分成35个子网, 将来要增加16个子网,每个子网的主机数目接近800台,可 行的掩码方案是( B )
A.255.255.248.0 B.255.255.252.0 C.255.255.254.0 D.255.255.255.0
6.如果子网掩码是255.255.192.0,那么下列主机必须通过路 由器才能与主机129.23.144.16通信的是(B)
A.129.23.191.21 B.129.23.127.222 C.129.23.130.33 D.129.23.148.127
7.在子网192.168.4.0/30中,能接收目的地址为192.168.4.3 的IP分组的最大主机数是( C )
A.0 B.1 C.2 D.4 本题为2011年全国考研题
8.某一个网络地址块192.168.75.0中有5台主机A、B、 C、D和E,A主机的IP地址为192.168.75.18,B主机的 IP地址为192.168.75.146,C主机的IP地址为 192.168.75.158,D主机的IP地址为192.168.75.161, E主机的IP地址为192.168.75.173,共同的子网掩码是 255.255.255.240。 请回答以下问题,并写出解答过程。
(1)5台主机A、B、C、D、E分属几个网段?哪些主机位于 同一网段?主机D的网络地址为多少?
(2)若要加入第6台主机F,使它能与主机A属于同一网 段,其IP地址范围是多少?
(3)若在网络中另加入一台主机,其IP地址设为 192.168.75.164,它的广播地址是多少?哪些主机能 够收到?
解:
(1)A主机网络地址:192.168.75.16 B主机网络地址:192.168.75.144 C主机网络地址:192.168.75.144 D主机网络地址:192.168.75.160 E主机网络地址:192.168.75.160 5台主机A、B、C、D、E分属3个网段,B和C主机在一个网段,D和E主机在一个网段,A主机在一个网段。 D主机网络地址:192.168.75.160 (2)其IP地址范围是192.168.75.17~192.168.75.30之间,并且不能为192.168.75.18 (3)广播地址是:192.168.75.175 D和E可以收到
9.设路由器R的不完整路由表如下表所示(其中下一跳给出的 是路由器的端口)。
请回答下列问题:
(1) 表中序号1~4的目的网络属于哪类网络?它们是由什么网络划分出来的?
(2) 假如R1端口1和R2端口2的IP地址的host-id均为5(十进制),请给出它们的IP地址。
(3) 到目的主机H1~H6的下一跳是什么(如果是直接交付,则请写出转发端口)?
**解: **
(1) 表中序号1~4的目的网络属于B类网络,它们是由166.111.0.0划分的子网
(2)R1端口1和R2端口2的IP地址分别连接在网络166.111.32.0和166.111.16.0上,它们的IP地址分别为:166.111.32.5和166.111.16.5
(3)到目的主机H1~H6的下一跳分别是:
H1:166.111.16.5 H2:166.111.32.5 H3:直接交付,R的端口2 H4:直接交付,R的端口1 H5:直接交付,R的端口3 H6:166.111.16.5
传输层的主要协议有?
(1) 用户数据报协议 UDP (User Datagram Protocol)
(2) 传输控制协议 TCP (Transmission Control
UDP:一种无连接协议提供无连接服务。在传送数据之前不需要先建立连接。传送的数据单位协议是 UDP 报文或用户数据报。对方的运输层在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。TCP:一种面向连接的协议提供面向连接的服务。传送的数据单位协议是 TCP 报文段 (segment)。TCP 不提供广播或多播服务。由于 TCP 要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。
端口号分为哪几类?
(1)熟知端口:数值一般为 0~1023
(2)登记端口号:数值为 1024~49151
(3)客户端口或短暂端口号,数值为 49152~65535
套接字的表示方法?
套接字 = 主机IP地址:端口号
套接字实际是一个通信端点
一个TCP首部的数据信息为:0x 0D 28 00 15 50 5F A9 06 00 00 00 00 70 02 40 00 C0 29 00 00.
请回答:
(1)源端口号和目的端口号是多少?
(2)发送的序列号是多少?确认号是多少?
(3)TCP首部的长度是多少?
(4)这是一个使用什么协议的TCP连接?该TCP连接的状态是什么?
解:
(1)源端口号:3368,目的端口号:21(2)发送的序列号是50 5F A9 06,确认号:0(3)TCP首部的长度:28(4)这是一个使用FTP协议的TCP连接,该TCP连接的状态是建立连接状态
1.UDP数据报头部不包括( )
A.UDP源端口号B.UDP检验和C.UDP目的端口号D.UDP数据报头部长度
2.在TCP/IP网络上,用来标识主机和在主机上的应用程序的是( )
A.端口号 主机地址 B.主机地址 IP地址C.IP地址 主机地址D.IP 地址 端口号
3.TCP报文中,确认号为1000表示________
解:
(1)第一个报文段的数据序号是70到99,共30字节的数据。 (2)确认号应为100. (3)80字节。 (4)70
课本练习题:
5-39
TCP如何解决对方发送零窗口通知而死锁的情况?
TCP 为每一个连接设有一个持续计时器 (persistence timer) 。只要 TCP 连接的一方收到对方的零窗口通知,就启动该持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带 1 字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。若窗口仍然是零,则收到这个报文段的一方就重新设置持续计时器。若窗口不是零,则死锁的僵局就可以打破了。
拥塞控制方法有哪些?
四种( RFC 5681) :慢开始 (slow-start)拥塞避免 (congestion avoidance)快重传 (fast retransmit)快恢复 (fast recovery)
UDP(特点、首部、校验)
TCP(特点、首部、连接管理、可靠传输机制、流量控制、拥塞方法)
1.主机甲和乙建立了TCP连接,甲始终以MSS=1kb大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发送一个接收窗口为10KB的确认段。若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是( A ) 。
A. 10KB B. 12KB C. 14KB D. 15KB
2.以下关于TCP报头格式的描述中,错误的是( D ) 。
A.报头长度为20~60字节,其中固定部分为20字节 B.端口号字段依次表示源端口号和目的端口号 C.报头长度总是4的倍数个字节 D. TCP校验和伪首部中IP分组头的协议字段为17
3.滑动窗口的作用是 ( A ) 。
A.流量控制 B.拥塞控制 C.路由控制 D.差错控制
4.A和B之间建立了TCP连接,A向B发送了一个报文段,其中序号字段seq=200,确认号字段ACK=201,数据部分有2个字节,那么 在B对该报文段的确认报文段中( C ) 。
A.seq=202,ack=200 B.seq=201,ack=201 C.seq=201,ack=202 D.seq=202,ack=201
5.TCP的通信双方,有一方发送了带有FIN标志的数据段后表示 ( B ) 。
A.将断开通信双方的TCP连接 B.单方面释放连接,表示本方已经无数据发送,但可以接收对方的数据 C.终止数据发送,双方都不能发送数据 D.连接被重新建立
6.主机甲和乙之间建立了一个TCP连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300字节和500字节的有效载荷,第一个段的序号为200,主机乙正确收到这两个段后,发送给主机甲的确认序号是 ( D ) 。
A.500 B.700 C.800 D.1000
7.主机甲和乙之间建立了一个TCP连接,主机甲向主机乙发送了3个连续的TCP段,分别包含300字节400字节和500字节的有效载荷,第3个段的序号为900,若主机乙仅正确收到第1和第3个段,则主机乙发送给主机甲的确认序号是 ( B ) 。
A. 300 B. 500 C. 1200 D. 1400
8.主机甲向主机乙发送一个(SYN=1,seq=11220)的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段可能是( C )
A.(SYN=0,ACK=0,seq=11221,ack=11221) B.(SYN=1,ACK=1,seq=11220,ack=11220) C.(SYN=1,ACK=1,seq=11221,ack=11221) D.(SYN=0,ACK=0,seq=11220,ack=11220) 注:本题为2011年全国考研题
TCP报文段的长度必须适应于其下层IP数据报的长度,这样TCP报文段的数据部分最多为( C )个字节。
A.65535 B.65515 C. 65495 D.不确定
设TCP的拥塞窗口的慢开始门限值初始为8(单位为报文段),当拥塞窗口上升到12时网络发生超时,TCP开始慢启动和拥塞避免,那么第13次传输时拥塞窗口大小为( C )
A.4 B.6 C.7 D.8提示:拥塞窗口变化为:1,2,4,8,9,10,11,12,1,2,4,6,7,8,9……
假设某应用程序每秒产生一个60B的数据块,每个数据块被封装在一个TCP报文中,然后在封装在一个IP数据报中,那么最后每个数据报所包含的应用数据所占的百分比是(注意:TCP和IP报文的首部没有附加字段)( C )
A.20% B.40% C. 60% D.80%
TCP协议中,发送方的窗口大小取决于( C )
A.仅接收方允许的窗口 B.接收方允许的窗口和发送方允许的窗口 C.接收方允许的窗口和拥塞窗口 D.发送方允许的窗口和拥塞窗口
TCP“三次握手”过程中,第二次握手时,发送的报文段中( D )标志位被置为1
A.SYN B.ACK C. ACK和RST D.SYN和ACK
在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时收到了三个冗余ACK报文,如果在接下来的4个RTT内报文段传输都是成功的,那么当这些报文均得到确认后,拥塞窗口的大小是( D )KB
A. 8 B. 16 C. 20 D.21
主机A基于TCP向主机B连续发送3个TCP报文段,第1个报文段的序号是90,第2个报文段的序号是120,第3个报文段的序号是150.
(1)第1、2个报文段中有多少数据
(2)假设第2个报文段丢失而其他两个报文段到达B,那么在主机B发往主机A的确认报文中,确认号是多少?
- (1)30、30- (2)120
16.主机H通过快速以太网连接Internet,IP地址为192.168.0.8,服务器S的IP地址为211.68.71.80。H与S使用TCP通信时,在H上捕获的其中5个IP分组如下表所示。
(1)表1中的IP分组中,哪几个是由H发送的?哪几个完成了TCP连接建立过程?哪几个在通过快速以太网传输时进行了填充?
(2)根据表1中的IP分组,分析S已经收到的应用层数据字节数是多少?
(3)若表1中的某个IP分组在S发出时的前40个字节如表2所示,则该IP分组到达H时经过了多少个路由器?
解:
(1)1、3、4由H发送的;1、2、3完成了TCP连接建立过程;3、5通过快速以太网传输时进行了填充.(2) 846b41d6H-846b41c5H=11H=17字节(3)S发出的IP分组的标识=6811H,所以对应5号分组,S发出时TTL=40H=64,5号分组的TTL=31H=49,64-49=15,所以该IP分组到达H时经过了15个路由器
6.1 域名系统 DNS
6.2 文件传送协议
6.3 远程终端协议 TELNET
6.4 万维网 WWW
6.5 电子邮件
6.6 动态主机配置协议 DHCP
6.7 简单网络管理协议 SNMP
6.8 应用进程跨越网络的通信
6.9 P2P 应用
在服务器端不考虑负责均衡的情况下:
域名服务器的类型?
域名的解析过程有哪些?
FTP协议的两个连接分别是?
FTP使用的两种TCP连接:控制连接、数据连接
控制连接和数据连接的区别:控制连接连接的是客户端和服务器端的两个控制进程数据连接连接的是客户端和服务器端的两个数据传输进程控制连接传输的是FTP命令 端口号21数据连接传输的是文件 端口号22控制连接在整个会话期间一直打开——持久连接数据连接可能为每次传输文件重新打开一次,传输完该文件后关闭——非持久连接
HTTP 的主要特点
HTTP协议的两种连接方式是指?
DHCP 协议的工作过程
首先,DHCP客户端发送DHCP发现报文来发现DHCP服务器。DHCP服务器会选取一个未分配的IP地址,向DHCP客户端发送DHCP提供报文。此报文中包含分配给客户端的IP地址和其他配置信息。如果存在多个DHCP服务器,每个DHCP服务器都会响应。如果有多个DHCP服务器向DHCP客户端发送DHCP提供报文,DHCP客户端将会选择收到的第一个DHCP提供报文,然后发送DHCP请求报文,报文中包含请求的IP地址。收到DHCP请求报文后,提供该IP地址的DHCP服务器会向DHCP客户端发送一个DHCP确认报文,包含提供的IP地址和其他配置信息。DHCP客户端收到DHCP确认报文后,会发送免费ARP报文,检查网络中是否有其他主机使用分配的IP地址。如果指定时间内没有收到ARP应答,DHCP客户端会使用这个IP地址。如果有主机使用该IP地址,DHCP客户端会向DHCP服务器发送DHCP拒绝报文,通知服务器该IP地址已被占用。然后DHCP客户端会向服务器重新申请一个IP地址。
DHCP 协议需要配置的项目
(1) IP 地址
(2) 子网掩码
(3) 默认路由器的 IP 地址
(4) 域名服务器的 IP 地址
域名与( D )具有一一对应的关系
A. IP地址B. MAC地址C. 主机D. 以上都不是
下列说法错误的是( A ) 。
A. Internet上提供客户访问的主机一定要有域名B. 同一域名在不同时间可能解析出不同的IP地址C. 多个域名可以指向同一个主机IP地址D. IP子网中主机可以由不同的域名服务器来维护其映射
3.FTP客户和服务器之间传递FTP命令时,使用的连接是 ( A ) 。
A. 建立在TCP之上的控制连接 B. 建立在TCP之上的数据连接 C. 建立在UDP之上的控制连接 D. 建立在UDP之上的数据连接
4.从协议分析的角度,WWW服务的第一步操作是浏览器对服务器的 ( C ) 。
A. 请求地址解析 B. 传输连接建立 C. 请求域名解析 D. 会话连接建立
5.万维网上每个页面都有一个唯一的地址,这些地址统称为 ( C ) 。
A. IP地址 B. 域名地址 C. 统一资源定位符 D. WWW地址
6.使用浏览器访问某大学 Web网站主页时,不可能使用到的协议是( D ) 。
A. PPP B. ARP C. UDP D. SMTP
7.HTTP是一个无状态协议,然而Web站点经常希望能够识别用户,这时需要用到( B ) 。
A. Web缓存 B. Cookie C. 条件GET D. 持久链接
8.WWW网页文件的编写语言及相应的支持协议分别为( C )
A、HTML,HTPT B、HTTL,HTTP C、HTML,HTTP D、以上均不对
9.在因特网域名中,com通常表示( A )
A、商业组织 B、教育机构 C、政府部门 D、军事部门
9.1 无线局域网 WLAN
9.2 无线个人区域网 WPAN
9.3 无线城域网 WMAN
9.4 蜂窝移动通信网
9.5 两种不同无线上网
无线局域网 WLAN (Wireless Local Area Network) 可分为两大类:
所谓“固定基础设施”是指预先建立起来的、能够覆盖一定地理范围的一批固定基站。
固定接入 (fixed access)——在作为网络用户期间,用户设置的地理位置保持不变。
移动接入 (mobility access)——用户设置能够以车辆速度移动时进行网络通信。当发生切换时,通信仍然是连续的。
便携接入 (portable access)——在受限的网络覆盖面积中,用户设备能够在以步行速度移动时进行网络通信,提供有限的切换能力。
游牧接入 (nomadic access)——用户设备的地理位置至少在进行网络通信时保持不变。如用户设备移动了位置,则再次进行通信时可能还要寻找最佳的基站。
(1) 若站点最初有数据要发送(而不是发送不成功再进行重传),且检测到信道空闲,在等待时间 DIFS 后,就发送整个数据帧。
(2) 否则,站点执行 CSMA/CA 协议的退避算法。一旦检测到信道忙,就冻结退避计时器。只要信道空闲,退避计时器就进行倒计时。
(3) 当退避计时器时间减少到零时(这时信道只可能是空闲的),站点就发送整个的帧并等待确认。
(4) 发送站若收到确认,就知道已发送的帧被目的站正确收到了。这时如果要发送第二帧,就要从上面的步骤 (2) 开始,执行 CSMA/CA 协议的退避算法,随机选定一段退避时间。若源站在规定时间内没有收到确认帧 ACK(由重传计时器控制这段时间),就必须重传此帧(再次使用 CSMA/CA 协议争用接入信道),直到收到确认为止,或者经过若干次的重传失败后放弃发送。
数据传输速率低:10KB/秒~250KB /秒,专注于低传输
成本低:模块成本低,ZifBee协议免专利费
功耗低:低功耗待机模式下,两节5号电池可用6~24个月
时延短:通常时延都在15ms~30ms
安全: ZigBee采用AES-128加密算法
有效范围小:传输距离在1-100m的范围内,但可以继续增加
工作频段灵活:使用频段为2.4GHz、868MHz(欧洲)和915MHz(美国),均为免执照(免费)的频段
网络容量大:65535个节点
无线个人区域网 WPAN (Wireless Personal Area Network) 就是在个人工作地方把属于个人使用的电子设备用无线技术连接起来自组网络,不需要使用接入点 AP。
整个网络的范围大约在 10 m左右。
WPAN可以是一个人使用,也可以是若干人共同使用。
无线个人区域网 WPAN 和个人区域网 PAN (Personal Area Network) 并不完全等同,因为 PAN 不一定都是使用无线连接的。
蓝牙系统 (Bluetooth)
最早使用的 WPAN 是 1994 年爱立信公司推出的蓝牙系统,其标准是 IEEE 802.15.1 。蓝牙的数据率为 720 kbit/s,通信范围在 10 米左右。蓝牙使用 TDM 方式和扩频跳频 FHSS 技术组成不用基站的皮可网 (piconet)。
低速 WPAN
低速 WPAN 主要用于工业监控组网、办公自动化与控制等领域,其速率是 2 ~ 250 kbit/s。低速 WPAN 的标准是 IEEE 802.15.4。最近新修订的标准是 IEEE 802.15.4-2006。低速 WPAN 中最重要的就是 ZigBee。ZigBee 技术主要用于各种电子设备(固定的、便携的或移动的)之间的无线通信,其主要特点是通信距离短(10 ~ 80 m),传输数据速率低,并且成本低廉
高速 WPAN
高速 WPAN 用于在便携式多媒体装置之间传送数据,支持11 ~ 55 Mbit/s 的数据率,标准是 802.15.3。IEEE 802.15.3a 工作组还提出了更高数据率的物理层标准的超高速 WPAN,它使用超宽带 UWB 技术。UWB 技术工作在 3.1 ~ 10.6 GHz 微波频段,有非常高的信道带宽。超宽带信号的带宽应超过信号中心频率的 25% 以上,或信号的绝对带宽超过 500 MHz。超宽带技术使用了瞬间高速脉冲,可支持 100 ~ 400 Mbit/s 的数据率,可用于小范围内高速传送图像或 DVD 质量的多媒体视频文件。
蜂窝移动网络的发展非常迅速,到目前为止,世界上先后已有超过了 30 种不同的标准。第一代(1G)蜂窝无线通信是为话音通信设计的模拟 FDM 系统。第二代(2G)蜂窝无线通信提供低速数字通信(短信服务),其代表性体制就是最流行的 GSM 系统。2.5G 技术是从 2G 向第三代(3G)过渡的衔接性技术,如 GPRS 和 EDGE 等。第三代(3G) 移动通信和计算机网络的关系非常密切,它使用 IP 的体系结构和混合的交换机制(电路交换和分组交换),能够提供移动宽带多媒体业务(话音、数据、视频等,可收发电子邮件,浏览网页,进行视频会议等),如 CDMA2000,WCDMA 和 TD-SCDMA。从 3G 开始以后的各代蜂窝移动通信都是以传输数据业务为主的通信系统,而且必须兼容 2G 的功能(即能够通电话和发送短信),这就是所谓的向后兼容。 第四代(4G)正式名称是 IMT-Advanced (International Mobile Telecommunications-Advanced),意思是高级国际移动通信。4G的一个重要技术指标就是要实现更高的数据率。目标峰值数据率是:固定的和低速移动通信时应达到1 Gbit/s,在高速移动通信时(如在火车、汽车上)应达到100 Mbit/s。
4G 现有两个国际标准:
LTE (Long-Term Evolution): 又分为时分双工 TD-LTE 和 频分双工 FDD-LTE 两种。把带宽增加到 20 MHz,采用了高阶调制 64QAM 和 MIMO 技术。LTE-A (LTE-Advanced):LTE 的升级版,俗称为 3.9G。带宽高达 100 MHz。
1.IEEE802.11帧分为3种类型:控制帧、管理帧 和 数据帧
2.IEEE 802.11标准采用. CSMA/CA 机制,可在所有站支持竞争型异步业务,从而是信号冲突概率减少到最小。
3.无线局域网有两种类型的扫描:主动扫描 和 被动扫描
4、以下不属于WPAN的是( D )
A、Bluetooth B、ZigBee C、UWB D、WiMAX
5、以下不属于第三代移动通信采用的标准体系的是( D )
A、CDMA2000B、WCDMA C、 TD-SCDMAD、GPRS
与数学中的实数一致
带有小数点的数字
精度存在限制,常规可以忽略
取值范围数量级约-10308 至 10308,精度数量级10-16
浮点数运算存在不确定尾数,不是bug
浮点数间运算及比较用round()函数辅助
采用科学计数法表示
与数学中的复数一致
z = 1.23e - 4 + 5.6e + 89j
实部:z.real
虚部:z.imag
空间变换时常用
函数及使用 | 描述 |
---|---|
abs(x) | 绝对值,x的绝对值 abs(-10.01) 结果为 10.01 |
divmod(x,y) | 商余,(x//y, x%y),同时输出商和余数 divmod(10, 3) 结果为 (3, 1) |
pow(x, y[, z]) | 幂余,(x**y)%z,[…]表示参数z可省略 pow(3, pow(3, 99), 10000) 结果为 4587 |
round(x[, d]) | 四舍五入,d是保留小数位数,默认值为0 round(-10.123, 2) 结果为 -10.12 |
max(x1,x2, … ,xn) | 最大值,返回x1,x2, … ,xn中的最大值,n不限 max(1, 9, 5, 4 3) 结果为 9 |
min(x1,x2, … ,xn) | 最小值,返回x1,x2, … ,xn中的最小值,n不限 min(1, 9, 5, 4 3) 结果为 1 |
int(x) | 将x变成整数,舍弃小数部分 int(123.45) 结果为123; int(“123”) 结果为123 |
float(x) | 将x变成浮点数,增加小数部分 float(12) 结果为12.0; float(“1.23”) 结果为1.23 |
complex(x) | 将x变成复数,增加虚数部分 complex(4) 结果为 4 + 0j |
turtle绘图体系的python实现
绘制窗体
空间坐标体系
角度坐标体系
RGB色彩体系
方向控制函数
画笔控制函数
运动控制函数
turtle.forward(0) 简写 turtle.fd(d)
turtle.circle(r,extent=None)
import 用法
import<库名>
from<库名>import<函数名>
from<库名>import *
<函数名>(<函数参数>)
import<库名>as<库别名>
<库别名>.<函数名>
循环语句
1 | for i in range(5) |
1 | import turtle |
next主题添加about页面后,会默认显示以#开头的的文章目录界面,原因是next主题中并没有给about页面设置模板,而是使用了post也就是文章页面的模板。
这样带来的后果就是,about页面显得很丑,而精心制作的站点介绍页面没有办法直观的展示出来,解决办法有以下三个:
页面内不要使用#这种标题的形式
删除代码:
路径:hexo\themes\next\layout\post.swig
删除以下代码:
1 | {% block script_extra %} |
修改代码
路径:next/layout/_macro/sidebar.swig
1 | //line 17 |
行数不一定完全准确,可以用搜索查找字符串
]]>考试前准备突击一下,就看上了mooc的视频,视频是不错,但是官网并没有提供下载,学校也不是啥时候都有网,就想着把他下载下来,首先在电脑的浏览器里面抓了一下包,发现可以抓到视频,也可以下载,但一个一个手动下载太慢了,折腾了半天发现我水平有限,没法能批量获取到下载地址。
然后就考虑到了手机端app,也试着抓了一下包,很容易的就发现了一个post请求了一个很长的json字符串,粗略的看一下,视频下载地址来了,还有不同的清晰度。
接下来的事情就简单了,用python写一个脚本,把所有的视频下载就好了
1 |
|
需要的支持库:request模块
来看看下载好的结果
数据交换格式,看起来像python类型(列表,字典)的字符串
使用json之前需要导入
哪里会返回json数据
json.loads
json.dumps
xpath
xpath语法
xpath helper插件:帮助我们从’elements’中定位数据
1.选择节点(标签)
/html/head/meta
:能够选中html下的head下的meta标签2.//
:能够从任意节点开始选择
//li
表示当前页面上所有的li标签/html/head//link
:head下的所有的link标签3.’@符号的用途’
//div[@class='JK-main']/ul/li
a/@href
:选择a的href的值4.获取文本:
/a/text()
/a//text()
:a标签下的所有文本5.当前
./a
当前节点下的a标签lxml
1 | from lxml import etree |
- pip install requests
1 | headers = { |
1 | from retrying import retry |
1.cookie放在headers中
1 | headers = {"User-Agent":".......","Cookie":"cookie 字符串"} |
2.cookie字典传给cookies参数
先发送post请求,获取cookie,带上cookie请求登陆后的页面
模拟客户端(浏览器)发送网络请求
,获取响应,按照规则提取数据的程序模拟客户端(浏览器)发送网络请求
:照着浏览器发送一摸一样的请求获取和浏览器一样的数据python
pycharm
chrome浏览器
url地址
浏览器请求url地址
爬虫请求的url地址
elements的内容和爬虫获取的url地址不同,需要以当前url地址对应的响应为准提取数据
HTTP:超文本传输协议
HTTPS :HTTP+SSL(安全套接字层)
get请求和post请求的区别
HTTP协议的请求
HTTP协议的响应
在日常的电脑使用操作中,我们常常需要花很多的时间去做同一件事情,比如启动软件的操作:点击开始菜单->寻找软件图标->点击启动。为了方便我们快速的启动软件,我们通常还会把最常用的软件图标放到任务栏当中,你或许以为这就是启动软件的极限操作了。但是,我今天要告诉你的是一款效率神器Wox,教你如何优雅地使用windows电脑,而它的作用不仅仅在于快速启动软件。
Wox是一款windows下的免费开源软件,学习门槛低,能够通过快捷键快速地调用并完成自己想要的操作,整个过程表现的十分流畅,是一款大家普遍用完之后爱不释手的效率软件。它主要具有以下几个方面的功能:
Wox - 被誉为 Alfred 的 Windows 版最佳替代品
你可以将 Wox 看作一个高效的本地快速搜索框,通过快捷键呼出,然后输入关键字来搜索程序进行快速启动,或者搜索本地硬盘的文件,打开百度、Google 进行搜索,甚至是通过一些插件的功能实现单词翻译、关闭屏幕、查询剪贴板历史、查询编程文档、查询天气等更多功能。
Wox 最大的特点是可以支持中文拼音的模糊匹配。譬如说你想搜索“设备管理器”,那么只需输入"sheb"就能匹配得到。
增加程序的搜索目录:
一开始使用 Wox 时,你会发现,除了开始菜单里面有的程序能搜索到之外,自己的一些绿色软件或者安装到非默认目录的软件都找不到。这时你可以在 Wox 里输入 settings 回车或托盘图标右键选择 Settings 进入设置界面,然后在 程序 中按 增加 按钮添加你的软件所在的文件夹。
网页搜索功能:
Wox 的网页搜索功能是可以让用户自己为某个搜索引擎设置一个关键字。举个简单例子,如果用户经常使用百度搜索。那么用户就可以在 Wox 的设置里的 Web Search 选项中,点击 Add 增加这么一个选项(URL为 http://www.baidu.com/s?wd={q}):
搭配Everything
wox已经有everything的SDK,但如果你想更强大的搜索,可以在wox的release页面下载everything进行默认的安装。
如果在wox搜索时,下方显示everthing not runing,可以打开everything的窗口。
或者在安装时选择:为everything安装服务而不是以管理员身份运行。
其他插件:
witcheroo(多个任务之间切换)
wpm install Switcheroo for Wox
使用方法:win 窗口标题
ProcessKiller(结束进程)
wpm install Wox.Plugin.ProcessKiller
使用方法:kill 进程名
Clipboard History(剪粘板历史记录)
wpm install Clipboard History
使用方法:wox中输入:cb 就会列出历史记录
eg: cb
有道翻译
wpm install 有道翻译
使用方法:yd 要翻译的英文
(eg:yd test )
OpenCMD(当前文件夹打开CMD)
wpm install Wox.Plugin.OpenCMD
使用方法:在当前文件夹,运行wox,输入op
IP Address
wpm install IP Address
使用方法:运行wox,输入ipadr
注意:wox默认替换Win+R,如下图,不需要可以在设置中关闭
hexo插入音乐,以前用网易云音乐可以直接生成外链播放器,但版权保护了以后,好多音乐都不能生成外链播放了。
关于外链播放器,网上找了很久,好多解决方案都是把音乐放网盘,然后自己写一个播放插件加入到页面中,这个办法是不错,但它不适用于hexo这种依赖引擎自动渲染的网站。
是可以把js等放在模板中,渲染的时候调用,但不是所有的网页都要插入音乐,放在模板中无疑会拖慢渲染速度,而且为了这个小东西,自己去改模板,有点复杂了。
aplayer提供了一个不错的解决办法,hexo-tag-aplayer插件,可以绕过版权问题
1 | npm install --save hexo-tag-aplayer |
1 | {% aplayer title author url [picture_url, narrow, autoplay, width:xxx, lrc:xxx] %} |
注:此方法不支持一键调用资源,需要手动获取链接后填写,或者开启 Hexo 的 文章资源文件夹 功能,将图片、音乐文件、歌词文件放入与文章对应的资源文件夹中,然后直接引用:
1 | {% aplayer "Caffeine" "Jeff Williams" "caffeine.mp3" "picture.jpg" "lrc:caffeine.txt" %} |
MetingJS 是基于Meting API 的 APlayer 衍生播放器,引入 MetingJS 后,播放器将支持对于 QQ音乐、网易云音乐、虾米、酷狗、百度等平台的音乐播放。
(目前QQ音乐失效,因为QQ音乐屏蔽掉了歌曲ID)
虾米音乐部分失效,无法解析 (2018.8.10)
如果使用 MetingJS,请在 Hexo 配置文件 _config.yml
中设置:
1 | aplayer: |
接着就可以通过 {% meting …%} 在文章中使用 MetingJS 播放器了:
1 | <!-- 简单示例 (id, server, type) --> |
1 | <!-- 进阶示例 --> |
有关 {% meting %} 的选项列表如下:
选项 | 默认值 | 描述 |
---|---|---|
id | 必须值 | 歌曲 id / 播放列表 id / 相册 id / 搜索关键字 |
server | 必须值 | 音乐平台: netease , tencent , kugou , xiami , baidu |
type | 必须值 | song , playlist , album , search , artist |
mode | circulation | 列表播放模式, circulation , random , single , order |
autoplay | true | 自动播放,移动端浏览器暂时不支持此功能 |
mutex | true | 该选项开启时,如果同页面有其他 aplayer 播放,该播放器会暂停 |
listmaxheight | 340px | 播放列表的最大长度 |
preload | auto | 音乐文件预载入模式,可选项: none , metadata , auto |
theme | #ad7a86 | 播放器风格色彩设置 |
关于如何设置自建的 Meting API 服务器地址,以及其他 MetingJS 配置,请参考章节自定义配置
若在 Hexo 中使用了 PJAX,可能需要自己手动清理 APlayer 全局实例:
1 | $(document).on('pjax:start', function () { |
在 Hexo 配置文件 _config.yml
中配置:
1 | aplayer: |
如不需要自定义脚本,请不用在_config.yml
中配置这些内容。
在 Hexo 标签中,用户可能无法直接在标签参数中加入空格
如果遇到这类问题,请直接将参数用双引号括起来使用,如下所示:
1 | {% aplayer "Caffeine" "Jeff Williams" "caffeine.mp3" "autoplay" "width:70%" "lrc:caffeine.txt" %} |
(5.10以上版本的hexo不存在此问题)
本插件通过 after_render:html
过滤器 , 将 APlayer.js
和 Meting.js
插入到使用了本插件标签 的 HTML 文件中:
1 | <html> |
但是 after_render:html
在一些情形下可能无法被正常触发:
after_render:html
似乎在 Hexo 服务器模式默认配置中无法被调用 (hexo server
), 遇到这种情况用户可能需要使用 hexo-server
的静态文件解析模式 ( hexo server -s
) .如果在博客生成过程中,插件发现 after_render:html
没有被调用,那么插件将会通过 after_post_render
过滤器来植入脚本。但是使用 after_post_render
会有重复载入 APlayer.js
的情况(例如当一个页面中存在多篇博客时),以及一些非文章页面将无法使用本插件。
如果想完全解决这个问题,用户可能需要自己在主题文件中手动加入 Aplayer.js
与 Meting.js
,同时关闭插件的自动脚本插入功能:
1 | aplayer: |
手动插入详见:Hexo音乐播放完美支持https和多平台
建议使用插件,手动插入不利于后期维护及排错······
本文原链接:https://github.com/MoePlayer/hexo-tag-aplayer/blob/master/docs/README-zh_cn.md
基于原文,有删改。
主要是为了解决about页面的文章目录自动弹出的问题
这个问题困扰了很久,今天下雨天,正好静心看看文档,解决一下这个问题
注:本文以next主题为例
next主题采用的是Swig模板,Swig模板可以参考 Swig中文文档
创建 Hexo 主题非常容易,只要在 themes 文件夹内,新增一个任意名称的文件夹,并修改 _config.yml 内的 theme 设定,即可切换主题。一个主题可能会有以下的结构:
├── _config.yml //这个是主题配置项文件 ├── languages //这个是语言文件 ├── layout //这个是模板文件 ├── scripts └── source
1.Layout
布局文件夹。用于存放主题的模板文件,决定了网站内容的呈现方式,Hexo 内建 Swig 模板引擎,您可以另外安装插件来获得 EJS、Haml 或 Jade 支持,Hexo 根据模板文件的扩展名来决定所使用的模板引擎。
layout.ejs - 使用 EJS layout.swig - 使用 Swig
2.source
资源文件夹,除了模板以外的 Asset,例如 CSS、JavaScript 文件等,都应该放在这个文件夹中。文件或文件夹开头名称为 _(下划线线)或隐藏的文件会被忽略。
如果文件可以被渲染的话,会经过解析然后储存到 public 文件夹,否则会直接拷贝到 public 文件夹。
模板决定了网站内容的呈现方式,每个主题至少都应包含一个 index 模板,以下是各页面相对应的模板名称:
模板 | 用途 | 回调 |
---|---|---|
index | 首页 | |
post | 文章 | index |
page | 分页 | index |
archive | 归档 | index |
category | 分类归档 | archive |
tag | 标签归档 | archive |
局部模板让您在不同模板之间共享相同的组件,例如页首(Header)、页脚(Footer)或侧边栏(Sidebar)等,可利用局部模板功能分割为个别文件,让维护更加便利。举例来说:
1 | {% codeblock partial/header.ejs %} |
生成:
1 | <h1 id="logo">My Site</h1> |
知道了模板对应的具体内容,就可以着手进行修改了,next主题页面模板大多使用局部模板进行组合,只需要增加或者减少组件的引用,就可以实现页面布局的修改。
Hexo官方网站 : https://hexo.io/
]]>暂时就这么多了,具体的没深入看
eNSP模拟器(510版)
点击下载脚本:点我下载
]]>博客搭建好后,一直托管在GitHub上,由于服务器在国外的原因,访问速度一直不是很好,但是也没什么人看,就没有管,最近几天突然发现断流严重(可能是墙又加高了吧😓),就决定花点时间解决一下。
前后折腾了好久(两三天吧),尝试了不同的解决方案。费时间的原因主要还是域名解析一次最少要10分钟或更久,还有就是想找一个免费的解决方案,付费的话,这个事根本就不是事(贫穷限制了我的······😂)。
首先想到的是找一个类似GitHub的托管平台,然后就找到了本地化比较好的coding,coding可以说是完全模仿GitHub做的一个平台,由于服务器在国内,访速度很快,且支持中文。
一番折腾,把网站上传到了仓库,成功开启了pages服务,然后就遇到了很坑的事,不能绑定自己的域名,要升级一个银牌会员才能,还好不花钱,只是补全信息就行,终于,补全信息并成功解析,浏览器输入域名,秒开,嗯······什么鬼?怎么不是我的网站,竟然被插入了跳转广告,看了一下官方文档,想要除去广告,要么花钱冲会员要么在网站首页放coding的跳转链接,冲会员是不可能的,广告?也是不可能的!😌 coding被放弃······
码云也是国内的一个代码托管平台,这个平台呢,发现它每个项目的ssh公钥是可以分开设置的,直接上传一个公钥,不指定到项目的画是不能够访问的,这个地方耗费了不少时间才解决,然后更麻烦的事来了,码云的用户地址和用户名竟然是不同的,按照用户名创建的仓库,开启pages服务后,是不能用用户名.gitee.io
去访问的,只能用项目地址去访问,只有通过用户地址创建的仓库,才能用.io
的后缀去访问。
又是一通折腾,一切就绪,接下来就是访问测试,然后就是不断的404,百度了一下,原来码云不支持CNAME解析,但好在没广告啊,不就一个跳转问题嘛,没有CNAME解析,还有301/302/url隐性/rul显性
等各种跳转么,想办法搞定就是了。
看了下腾讯云的控制台,支持url跳转,显性的会改地址,改了后加独立域名的效果等于没加,选个隐性的吧,竟然要600块。不能用现成的,另外想办法啦,正好手上有一台腾讯云的服务器(最低配,做个跳转应该是足够了),上网找一下隐性跳转的原理,自己写一个跳转页面吧。
又是······ 跳转有了,成功打开网站,速度不错,嗯,貌似没有什么问题,应该可以收工了。咦?点页面怎么地址栏没变化啊?这是个大问题呀!然后查代码,不能动态实时生成跳转链接,暂时找不到什么好的解决办法(水平不够),😌 码云被放弃······
陆续又尝试了一些DNS加速啥的,效果也不是很理想,偶然看到了CDN,就尝试一下,下面谈谈CDN。
图片和音乐啥的一直都在七牛云上放着,一直一来速度也不错,然后就想到了用它家的融合CDN,一通配置调试后,速度还不错,但是七牛云的https加密认证要钱啊,本着免费为先的原则,又看到了腾讯的CDN,免费流量多呀,很迅速就转到了腾讯云的CDN节点,但那个访问速度的确是不敢恭维💔,而且还不支持https(是绑定了证书没起作用,不知道问题出在哪),最终还是又换回了七牛云······
1 | <html> |
腾讯云的免费DV证书-------最多申请20个,http强制转换https,计费0.28/GB⭐️
Google 好像没有干什么就被收录了,百度的话,GitHub拒绝了百度抓取,提交了也没什么用
国内解析到七牛云的CDN节点,CDN节点每天零点自动刷新缓存
国外直接解析到GitHub库,实时更新缓存
有段时间我看到一个选题,问:身为 90 后的你,是如何赚到人生第一个一百万的?
我想:这选题真励志。
我开始去采访我认识的每个赚过一百万的 90 后朋友,有个哥们给我留下极为深刻的印象。
他刚毕业时就出来创业,做了个没人知道的摄影类 app,烧钱烧得很厉害,所有人都以为他肯定失败了。
在绝境时,他的app连同公司被收购了,赚了 200 万。
虽然创业没有成功,但对于不少创业者来说,被大公司收购也是一种成功。
我问他:你是说服他们买你的公司的?
他说:我爸买的,把我狠狠骂了一顿。
这选题,真不励志!
我愤然终止了这个选题的操作,生怕心脏再度遭到暴击。
他并不是我们想象中的那种草包富二代,后来他像爸爸又借了笔钱,做了摄影工作室,不靠融资,仅靠做 app 时积累下的摄影师人脉和摄影技术,东山再起,月利润近十万元。
虽然这些钱在他爸爸看来根本就是浪费时间,但他还是靠自己喜欢的事情活了下去。
我有时候会很羡慕他,能有足够的资本为自己的理想试错。相比下来,我的创业是条不能回头的路,一旦失败,就几乎没了重头再来的可能性。
更糟心的是,那些富二代真给你比起专业能力,还真有可能比你强出一大截。
有个哥们吉他非常厉害,每逢他 solo 时,我们其他玩吉他的人都聚精会神听每个音,目不转睛看他的指法。
他特别穷,中学时他就想考音乐学院,可是乐器课、声乐课都太贵了,他家掏不起一节 300 元的声乐课,更买不起钢琴。
他不死心,夜里去捡破烂,捡了不知多久,凑够了 350 块,买了把入门吉他,琴弦、音质都特别差。
买回吉他的他,欣喜若狂,在电脑课时偷偷拿出纸笔,誊写吉他的六线谱,私下自学,想尽办法去练习音乐学院需要考的科目和技能。
考试时,他败在了视唱练耳上,自学成才的人,很难过这一关。
他读了大学后,把勤工俭学赚的钱都投入到学音乐上,大二时就能在酒吧卖唱赚钱,一晚上八首歌,一首歌才十五块,他依然唱得很开心。
后来他商演赚的钱多了起来,他也开始写歌,我们都觉得:他一定能在音乐这条路上走很远。
凭借天赋和努力,他申请成功了国外音乐学院的研究生,他存够了钱,打算在音乐这条路上走更远。
然后……他爸爸得了癌。
他把钱全用去救爸爸了。
包括卖掉了他攒了很久钱才买的吉他和钢琴。
他是个遇见所有绝望事情都不会哭的纯爷们,卖吉他前一晚,他抱着吉他号啕大哭,哭了一整晚。
他知道他可能再也不能出国了,如果更惨一些,他可能这辈子都当不了音乐人了。
仅仅因为穷,因为穷。
梦想就这样被轻易掠夺。
姑娘学历虽然只有专科,但是在写作上特别有天赋,大一时就跟某女频网站签了约,开了 v 文,月入四五千。
她爸妈知道时可开心了,觉得培养出一个作家女儿来。她爸妈做梦都在想:女儿成为中国著名作家,这样就在村里人面前长脸了。
可惜,女儿写的是耽美文,在净网行动时,她的小说被封了。
女儿安慰爸妈说:没关系,我写言情小说也能红的。
鲜有网络小说作者能转型成功,更何况,她也不是网文大神。
连写了两本,都人气低迷,只能拿几百块的全勤奖。
后来,她看到我做公众号好像收益还不错,于是放弃了网文,也开始做自媒体。
虽然同样是写字,但隔行如隔山,自媒体除了靠强悍的持续性创作能力外,还需要对互联网、运营、营销有足够多的了解。
她做了一年,阅读量仍然只有一两千,接不到什么好广告,能接的都是什么黑五类、性保健品这样很 low 的。
那时她已经毕业很久,坚持着日更网文和日更自媒体,钱虽不多,但养活自己没问题,她父母也很支持她的写作梦。
虽然,她如今的写作,是无意义的消耗才能。
她妈妈常常跟她念叨:以后红了,采访时带妈妈一起上电视台。
她经常跟我提起这个事,每每听到,我都觉得世界可真残忍。
我们不就是为这些明知实现不了的美好梦想活着吗?
后来,有个自称是北京影视公司的找到她,让她写剧本,说是电视剧能在湖南卫视上。
她那个高兴啊,连合同都没看仔细,一开心就跑去北京了。
她妈妈也在村里开心得逢人就说:我女儿写的剧以后是要在湖南台播的!
再后来的事,我想你们都能猜到,她被骗了,公司只是个做低俗广告的,还是为了洗钱的皮包公司,她被骗去写视频文案,拖了半年工资。
她想打官司,才发现没钱,也不知道告谁。
她妈妈再也不敢在村里提湖南台这几个字,看电视时调到湖南台立刻调开,但村民总爱拿这件事调侃她父母,她妈妈每次被人嘲笑后,就在家里抹眼泪。
抹完眼泪,打电话给女儿:
钱不够妈妈还有些存款,你要争口气,接着写下去,妈妈支持你的梦想。
她跟我说:我恨死自己了,不仅没出息,还害得我妈在村里抬不起头来。
说完,哭得上气不接下气。
梦想这个词,怎么就那么贵啊。
扎克伯格也在演讲中承认,他感谢自己生活在一个不愁吃穿能让他学习编程的家庭,如果他从小就要每天为明天有没有吃的而烦恼,为明天有口吃的去做很多无用的事,他也不敢确定自己未来会有如此的成就。
不知你感觉到没,在阶级越来越固化的时代,有钱人越来越容易实现自己的梦想,穷人却越来越追求不上自己的梦想。
在追求梦想的路上,穷人一旦失败,会跌入比以往更惨烈的绝望局面。
我们便是活在如此残忍的时代里。
可我仍觉得,穷人不是配不上梦想,只是梦想对他人而言太艰难,在中国,没有人比穷人更配得上梦想,谁也不能剥夺做梦的权利,谁都有梦想成真的可能性。
为黑暗中隐约出现的一道光奋力往前奔跑,看见光明那瞬间又会坠入深渊。
即便如此,也要为那束光,往前跑。
本文转载自:简族
程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。
要求:
通过菜单调用不同的函数组合实现不同的功能,将各个功能需求单独以一个函数实现,在实现复杂功能时,使用不同的函数进行组合,通过合理的调用实现所有的功能。
本程序主要分为3个功能模块,一个执行模块,还有几个服务支持模块。
1、随机地图生成
2、存档地图的修改
3、存档地图的编辑
游戏的运行 地图的打印
1、文件的读取与保存
2、设备输入值的获取(接收按键)
3、坐标的移动(老鼠的移动)
4、光标输入符的隐藏
5、倒计时的实现
6、地图编辑模块
7、随机数生成模块与地图初始化模块
迷宫地图的存储使用二维数组实现,在数组中使用1表示迷宫的墙,使用0表示道路;文件信息的存取,使用结构体实现,其他常用的全局量,使用#define进行数据类型定义。
1 | int map[Height + 2][Width + 2]; //存储地图数据 |
程序主要函数如下:
1 | /*执行模块函数*/ |
void create(int x, int y);函数作用:生成随机数组
void map_Initialization();函数作用:通过调用create(int x, int y)生成的随机数组,初始化地图,并存储在map数组中
void paint(int x, int y); void paint2();函数作用:打印地图
int file_read();函数功能:读取存档。类似函数:void Read_archive_map();
int file_write();函数功能:写入存档,保存地图。
void edit_map(); 函数功能:编辑地图。
void game(); 函数功能:游戏执行。
int file_list_reading();函数功能:读取文件列表,显示在屏幕上。
程序主界面:
生成随机地图并保存
游戏运行地图:
存档地图读取
修改存档地图:
本次课程设计,巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力;培养了我上网查找资料,查阅手册及文献资料的能力;培养独立思考,深入研究,分析问题、解决问题的能力。
通过实际编译系统的分析设计、编程调试,在文件的存档读取时遇到了严重的问题,查阅了各种资料,大概在一天后解决问题。
根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点:
1、认真上好专业实验课,多在实践中锻炼自己。
2、写程序的过程中要考虑周到,严密。
3、在做设计的时候要有信心,有耐心,切勿浮躁。
4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。
5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。
1严蔚敏,吴伟民编著.《数据结构》(C语言版).清华大学出版社。
2 http://blog.csdn.net/cflys/article/details/45895737
3 http://blog.csdn.net/cflys/article/details/45895737
4 http://blog.csdn.net/AllenLee1993/article/details/44814919
5 http://blog.csdn.net/hanhailong18/article/details/16907295
6 http://codebus.easyx.cn/krissi/post/maze-game
点击:下载源码
]]>eNSP模拟器(510版)
AR
1 | interface GigabitEthernet0/0/0 |
R3
1 | interface Ethernet0/0/0 |
LSW1
1 | vlan batch 10 12 20 |
eNSP模拟器(510版)
注:以下为设备的配置状态,并非配置命令
1 | # |
1 | # |
1 |
|
R3与R2配置类似,LSW2与LSW1类似
ssr (shadowsocoks-R)
openvpn
\ 为换行符参数获取可以通过抓包
如果我们需要找一个我们熟悉的东西来类比比特币的话,应该是什么?
在比特币刚出现并爆炒的时候,我的答案是:郁金香。
一个看上去没什么实际用途的东西,被炒成那样,很难不想到当年的荷兰郁金香。
但很快,我意识到这个类比可能是错的。
我后来把比特币类比成钻石。
直至今天,我依然没有改变这种类比。
钻石这个东西,其实没什么用处。
以前工业上可能还有点实际用处,但近来的发展,人们已经完全可以找到替代物:符合坚硬这种需求但成本低廉。
今天的钻石,有两个特点:1、总量的增幅被严控,确保它的稀缺性;2、通过营销,让人们树立起一个观念:钻石=爱情的见证。从而,坐实需求。
钻石非常像一个骗局,因为根本没有任何证据能够证明钻石是爱情的见证。
但正如戈培尔所说,谎言重复一千遍就是真理。只要大部分人(女性为主)认同这一点,那这一点就成立。
钻石,已然不再是一个骗局。
比特币的总量是被控制的。
挖矿越来越难,事实上也得到了一个结果:总量的增幅被限定。
但比特币还需要一个说法,这个说法如果成立,比特币就成立。如果不成立…总量被严控的东西,有什么稀奇的。
我们经常提及“挖矿”这两个字,这其实是一种比喻。所以,我们需要再想想:挖什么矿?
还记得比特币刚出来的时候,是怎么说的么?
利用计算机的冗余计算能力,一起来解决某些需要庞大算力的东西。你干了这事,不能白干,给你点网络积分吧。这个积分,就是比特币。
所以,比特币其实是有一个很美好的想象的:利用闲置的某种资源,来解决一些问题——这个说法,今天已经很少有人提了。
比特币真解决了什么了不得的问题了没?
我没听说过。
你有听说吗?
比特币还代表了一种东西,这个东西可以称之为理念。
只要能上升到理念,大抵都是高大上的。
这个理念就是:去中心化。
去中心化是一个非常高大上的词。这个词的高大上就在于:我们世界的现实是中心化的,但中心化总感觉和自由是矛盾的,于是,我们世界的期望是去中心化的。
如果要说币圈链圈扯“信仰”两个字的话,去中心化大概是绝对绕不过去的。
中本聪创造了比特币,他使用了一种叫区块链的技术。而这种技术,是去中心化的技术。
正如钻石代表爱情一样。
比特币代表一种理想。
荷兰郁金香可没有这货。荷兰郁金香只有钱。只有钱,实际上又用处不大,这个局是撑不住的。
所以有人嘲笑3点钟诸群不肯谈钱非要谈理想谈哲学谈历史,这种嘲笑是不对的。
真的是卖肉出身,不晓得这里的厉害关系。
但没有人会认为钻石是通货。
没有任何一个国家会说,我们拥有多少多少钻石储备来显示国力。
钻石就是一种可以变成财富的石头,仅此而已。档次还不够。
而黄金,则不然。
黄金不仅仅是可以变成财富的金属,它还是通货。黄金储备,这个词你肯定听说过。
比特币需要迈向黄金这个级别,才是币圈中人的梦想。
不要被“币”这个字眼迷惑。
你叫它是币就是币了么?这不行。得人认同它是币,那它才是通货。
想象一下,如果比特币被认为是通货了,持有比特币的人——而且是海量持有——那是什么?
只是土豪么?
才不仅仅是土豪。
持有一万颗钻石的人,和持有一万吨黄金的人,根本不是谁更土豪的比较。
前者,仅仅代表财富,你可以称呼他为土豪。后者,却代表了呼风唤雨的权力,你应该称他:国王陛下。
这是我一个月前在维也纳市中心街头拍的照片。
其实这没什么,无非就是一个商家接受比特币来买东西。
商家也可以接受钻石来换东西的。
不要以为有商家愿意接受比特币来购物,就说明比特币成为货币了。
要成为通货,仅仅有那么几个商家是不够的。
但比特币不是我上一篇文章里提及的ICO中的那些电子货币。你可以认为,比特币是元币,也就是说,这些ICO们,所发的币,你得拿比特币去买(或者你也可以拿一种叫以太币的东西,但以太币和比特币是有一个结算公式的),并不是人民币,或者美元。
每一次发币,都在强化比特币作为元币的地位。这些ICO们,倒了九成都没关系。只要有一些能站住,比特币就受益。
好了,你现在能理解委内瑞拉发石油币得到币圈欢呼的原因了:有一个国家,在开始认同比特币作为元币的地位了。
至于中本聪的初衷:国家铸币不可信这种想法,已经不重要了。
我们想象一下。
大多数公司IPO,都用发币的方式来ICO,比特币作为最根本的结算单位,公司们最终价值的表现,你都可以算出一个比特币来。
大多数国家,都认同比特币作为元币的地位。
你很幸运,拥有2100万枚中的21万枚。
万岁万岁万岁!我的国王陛下!
奥地利人茨威格在他的名著《人类群星闪耀时》中写过一个故事。
第一个在加利福尼亚州发现金子的人叫祖特尔(确切的说,是他手下一个农民)。
这哥们当年从墨西哥驻加利福尼亚总督手上拿下了一块足以建立一个小小王国的土地。单枪匹马赤手空拳兴建农场勤劳致富。土地上有黄金消息传出去后,全球的冒险者蜂拥而至,践踏他的庄园,一夜之间祖特尔一贫如洗。
但他不气馁,召集了三个儿子跑另外一块不那么产金的地方重整家业,又积累起一笔财富。很快,他可以打官司了。他控告在他以前的土地上的上万民农场主,要求他们滚蛋:这土地是我的!合众国法官判决如下:祖特尔对这片土地拥有完全合法和不可侵犯的权利。
成千上万人愤怒了。他们洗劫了祖特尔的新家园,长子被逼自杀,次子惨遭杀害,幼子虽然逃走但淹死在归国途中。老头最终以不断上访的乞丐身份死于国会大厦的台阶上。
这个故事相当的让人唏嘘不已。但茨威格可能有点小小搞错了。祖特尔的确一直在申诉他的权利,但他不是死在什么国会大厦的台阶上,而是死在一家旅店里。最重要的事,茨威格漏写了祖特尔的一个儿子(祖特尔一共有五个儿子):小祖特尔。这哥们还是颇有建树的,是加利福尼亚州府萨克拉门托的建立者,比他老爸晚死十七年。
只是,我们不知道,中本聪是什么样的终局故事。
想必,他是不太会走上祖特尔的道路吧。
—— 首发 扯氮集 ——
版权声明
作者执教于上海交通大学媒体与传播学院 天奇阿米巴创投基金管理合伙人
]]>Genymotion模拟器是面向开发者的一款安卓模拟器,运行速度快,功能强大,体积小,占用系统资源少,安装完成后可以集成在Android Studio 或者 Eclipse 中,一键调用进行项目调试。
去genymotion的官网注册下载,下载之前必须要注册,登录选项在注册按钮里面
然后去下载页面下载,genymotion需要依赖VirtualBox,如果没有装过VirtualBox,请下载带VirtualBox版本的(注意
VirtualBox一般不需要升级,以免出现不必要的问题)
附:VirtualBox的界面,一般不需要打开,其他软件会自己调用
下载后安装,安装路径自己指定一个,然后一路点下一步就行了
首次打开genymotion会提示许可协议,同意就好
然后会提示输入授权码,可以去官网买一个,或者点Personal Use(个人用户免费)
然后会扫描你电脑上的模拟器,没有的话就会提示添加
点击确认后,会有一个登陆账号的步骤
然后就会看到可以创建模拟器的系统选项,选一个想要的系统版本,点击next开始下载
注: 同一api的模拟器在下载了一次以后就不需要下载了,下次创建会瞬间创建成功。
完成以后点击start就可以启动模拟器了
进入AS中,安装genymotion插件
安装步骤见官网说明:https://www.genymotion.com/plugins/
打开File——Settings——Plugins——Browse Repositories界面
搜索找到genymotion,点击install安装
安装完会在主界面上多一个图标
点击打开,然后设置genymotion的安装目录,如果没有报错就正常
进入genymotion的设置中,选择ABD,然后选择使用SDK,输入电脑上的SDK存放目录
重启AS和genymotion
在AS中打开genymotion插件就能看到已经安装的模拟器了
然后就可以用了···········
ps:使用genymotion后可以将Android SDK中的system imagine文件删掉。
system imagine相当于谷歌系统镜像,genymotion也会下载系统镜像,但system imagine一个api版本5G左右,genymotion一个版本400M左右,可以节省大量空间,且genymotion模拟器的功能更加全面。
]]>Genymotion下载地址(需注册账号):https://www.genymotion.com/download/
Genymotion号称android模拟器中运行最快的,但是服务器在国外,Android镜像下载起来那个速度就不想说了。
Add new device后下载速度太慢了,容易失败
解决方法如下:
方法一:
1、设置HTTP代理,在Setting->Network,自己设置HTTP proxy和Port,
方法二:
1、找到下载链接,直接用迅雷拖下来
遇到下载失败或者下载太慢,win+R打开运行框,输入 %appdata%, 再点击上一步(Alt+↑ ),找到local文件夹里的Genymobile,打开 查看里面的genymotion.log文件,
找到类似下面的文字
[Genymotion] [Debug] Downloading file
“http://files2.genymotion.com/dists/4.1.1/ova/genymotion_vbox86p_4.1.1_151117_133208.ova”
将http://file…ova 这个虚拟镜像地址直接用迅雷极速版下载,或者使用迅雷离线下载等功能很快能完成下载
2、把下载的文件复制到C:\Users\用户主目录\AppData\Local\Genymobile\Genymotion\ova 中覆盖里面以随机数命名的对应镜像。实际上就是刚才看到genymotion软件刚刚点击下载的那个镜像,
3、重新按照刚刚下载操作GUI的下载步骤,你会发现对应的镜像已经可以使用了不需要下载了,验证安装后即会显示在设备列表中。
点击start ,启动模拟器,开始使用
提供两个下载地址:
http://files2.genymotion.com/dists/4.2.2/ova/genymotion_vbox86p_4.2.2_160608_211959.ova
http://files2.genymotion.com/dists/6.0.0/ova/genymotion_vbox86p_6.0_160608_210807.ova
]]>今天同步hexo的时候突然出现了这样的报错
1 | fatal: HttpRequestException encountered. |
这个问题困扰了很久,解决办法是更改站点配置文件
原来是
1 | deploy: |
改成
1 | deploy: |
问题解决···········出错原因表面看上去是应为https协议问题,改成ssh协议就行,不过hexo应该是支持https协议的········
]]>今天更新了Android Studio版本后,运行以前的项目时突然出现了下面的错误:Searched in the following locations: file:/G:/Android/Android Studio/gradle/m2repository/com/android/tools/build/gradle/3.0.0/gradle-3.0.0.pom file:/G:/Android/Android Studio/gradle/m2repository/com/android/tools/build/gradle/3.0.0/gradle-3.0.0.jar https://jcenter.bintray.com/com/android/tools/build/gradle/3.0.0/gradle-3.0.0.pom https://jcenter.bintray.com/com/android/tools/build/gradle/3.0.0/gradle-3.0.0.jar Required by: project : <a href="add.google.maven.repository">Add Google Maven repository and sync project</a><br><a href="openFile:C:\\Users\\dong\\AndroidStudioProjects\\PraClock-master-333c8464e4a6120e4a7c8235a11d5670005296dc\\build.gradle">Open File</a>
按照提示路径找到文件位置G:/Android/Android Studio/gradle/m2repository/com/android/tools/build/gradle
发现是没有3.0.0的gradle造成的
找到项目中的gradle文件,将下面的位置更改即可
然后点击sync或者try again刷新一下,问题解决。
]]>在使用电脑时,MySQL定时弹出一个taskeng.exe页面,过几秒后就自动关闭,页面内容如下:
1 | =================== Start Initialization =================== |
但是电脑上并没有运行任何MySQL库
这个是新版本MySQL服务自带的一个定时任务,定时执行的任务,我们只需要在本地系统的“任务计划程序”中将这个定时任务干掉就OK了。
以win10为例:
在小娜中搜索任务计划程序:
打开任务计划程序库,找到MySQLNotifierTask
禁用就行了
温馨提示:尽量不要直接删掉这个MySQL定时服务器,如果到后期需要扩张的时候,还能用到,可以仿照到这个进行定时任务的创建工作,这个是非常实用的。
]]>本文转载自: KnowYourself
公众号
礼物这个词,是很有意思的。在人类学和社会学家的眼睛里,它是一个重要的词语。在整个20世纪以及本世纪,人类学世界对于“礼物”的学术争论从未停止。
礼物,顾名思义是一种承载了“礼”的“物”。“礼”,指的是从微观到宏观的社会规则与道德;礼是精神性的。礼物,就是这样一种包含了精神性的物品。它不同于商品(商品仅仅是一种经济价值可量化的物品)。
商品,是完全独立于人的存在,它具有一种可计算的经济价值,可以在各种人中遵循等价原则流转。
礼物的价值,却只有一部分由它的商品价值所定义。礼物的另一部分价值,来自于人主观的附加,它包含一种商品价值之外的、无法量化的价值。(甚至在以诸如求雨、求战胜为目的的祭祀活动中,送给天神的“牺牲品”,也可被看成礼物的一种,包含一种由人赋予的主观价值。) (阎云翔,2000)。
1925年,法国人类学家莫斯(Marcel Mauss,大名鼎鼎的社会学家涂尔干的侄子,写出了第一本关于礼物交换的学术著作——《礼物》(the Gift)。
书中,莫斯严格区分了“馈赠礼物”与“交换商品”两件事。并从一开始就提出了这样一个问题:人为什么会习惯性回礼?
莫斯在对毛利社会的研究中发现,毛利人认为每个人送出的礼物,都包含了送礼者自身的一部分精神力——这被称为“礼物之灵”(毛利语为“hau”,意为the spirit of gift),**当我们接收到对方的这部分hau时,我们必须再把它(借由回礼)重新交还给送礼者。**否则,被我们留下的hau会给我们带来厄运。
当我读到这部分时,我想起儿时曾听到见到过父母商量,“收了对方的礼物怎么办,一定要做出回礼”,也记起了自己对“接下大人的礼物”这件事的恐惧,父母会严厉呵斥我收下本不该收的礼物,仿佛是一件了不得的大事。
然而,莫斯的这一理论,曾经在后来的几十年中受到人类学家们的持续批评。后来的大师们(例如马林诺夫斯基、列维斯特劳斯等)认为,互惠原则才是人们收礼、回礼的核心。人们在送礼时渴望得到回报;而在回礼时,害怕自己的不作为会导致对方在未来停止付出。学者们认为,人们对于“未来将收到某种不确定的好处”存在着普遍的期望。
直到上世纪80年代,人类学家们互相吵啊吵啊,又把注意力重新集中在了莫斯提出的“礼物之灵”上。更年轻一代的人类学家们认为,互惠原则不足以解释人类社会中的多种送礼行为。比如,在印度种姓社会中,社会上层会向下层民众广泛送礼。这种举动并未期许获得任何“互惠”的回报;而是作为文化统治的一种手段,以期获取某种精神意义的“功德”。而在中国社会中,富人、统治者开粮仓、接济穷人,也是为了获得某种精神性的“声望”。
美国人类学家韦纳(Annette Weiner,纽约大学教授,曾任美国人类学协会主席)提出,有一部分礼物,本身就是无法被真正意义上“送掉”的,与其说是赠送,不如说是“借贷”,这些礼物从送出开始,就等待着有一天被收回。例如,在老家(相对来说更为传统的中国社会),婚礼的份子钱,就是这样一种从送出开始就等待被收回的“礼”。
美国社会学家帕森斯提出,一个社会中,社会成员的行动受到他们内在的价值取向影响。为了衡量一个社会的价值取向,他提出了五组“模式变量(Pattern Variebles)” (Parsons,1937)。它们是:
1. 情感投入的 vs 情感中立的
“情感投入”的互动方式是指在人与人的互动中,彼此带有较多情感色彩;“情感中立”的互动方式是指人与人的互动更加依靠理性。
2. 扩散式互动的 vs 专门式互动的
“扩散式”的互动指的是,人和人的互动会设计多方面的目的,而不是单一的功能(例如在老家,医生可能和妈妈是好朋友,除了医患往来、平时还会一起逛街);“专门式”的互动指的是,人和人的互动较多情况下有着专门的、单一的目的(大城市中往往与医生的互动只有看病)。
3. 特殊主义的 vs 普遍主义的
“特殊主义”的互动方式中,“标准”是因人而异的、取决于人和人之间的亲疏关系(例如别人家的孩子在公共场合大哭是“熊孩子”,但如果是自己家的就是活泼可爱);而“普遍主义”的互动方式中,“标准”是普世的、来自通行的规则(例如合同、法律、宗教信念等)。
4. 先天赋予的 vs 后天取得的
在更看重“先天赋予”的互动方式中,人们的行动选择更注重对方的身份、与自己天然的关系;而在更看重“后天取得”的互动方式中,人们的行动选择更注重对方的行为表现、个人态度等。
5. 自我利益的 vs 公共利益的
在更看重自我利益的社会中,人们的互动中会更注重谋取自身个体的利益,而在公共利益的社会中,人们的行动会更注重不伤害整体性的公共利益(例如相信只有保证了公平的公共利益才是对个人利益的更有效的保护)。
帕森斯认为,这五组变量的前面半句,对应的是传统社会,而后面半句,对应的则是现代社会。他提出,中国的社会,就是一种典型的“特殊主义”取向的社会类型。在现代的普遍主义社会中,更常见独立(independent)的个体;而在传统的特殊主义社会中,更常见(interdependent)(人际间)相互依赖的个体。
帕森斯说:
对于普遍主义社会来说,人们普遍认为,规则应该无差别地(平等地)用来约束每一个人。而在特殊主义的社会中,人们普遍知道,法律、规则,可以被调整用来适应一些特殊的关系、会有因人而异的变化。
我们很容易理解,在特殊主义的社会中,人们可以通过调整自己与他人之间的关系,收获不同的互动方式、互动规则、以及互动结果。北大社会学系郑也夫教授有过一段关于中国社会的精彩的描述:
“ ‘朋友’ 关系的高度膨胀危害着一切制度化的秩序。从购物、交通到考学、择业、商业经营、法律裁决……一切要凭关系。货币与普遍主义标准(比如分数)的产生就是为了简化那个日益扩大化的、复杂的社会交换与社会生活。而我们却从这一文明的门坎内倒退出去。
每个人都以为自己是合算的。通过特殊主义的、熟人间面对面的 ‘交易’得到了便利和好处。而这种个体的“理性”加在一起却构成了团体行为的“非理性” 。从此,我们没有了一般媒介物。我们做任何一件事都要找熟人,我们的杜会交换受阻、流通不畅,‘成本’激增”(郑也夫,1993)。
(值得一提的是,郑也夫教授,并没有对特殊主义持有“一棍子打死”的绝对负面评价。相反他认为,特殊主义原则是不可取代的,有它独特的作用。比如它能够带来普遍主义无法带来的情感价值,而在危机真正发生的时候,也只有那些特殊主义的关系会是个体“最后的守护者”。因此他指出中国可以参照日本的发展路线,仍然维持特殊主义,但让普遍主义成为重要的组合。)
郑也夫指出,特殊主义与普遍主义,本质上只是“信任”产生的两种方式。特殊主义社会的信任发生于亲近的人际关系,人们彼此的信任是全面的(例如信任你的工作能力也信任你在情感中的人品),普遍主义的信任发生于标准化的、笼罩于每个人之上的规则,人们彼此之间的信任是单一的(例如只信任你的工作能力,对你的情感生活无法了解也不会盲目信任)。前者能够产生小规模的信任系统,后者能够产生更大规模的信任系统(郑也夫,1993)。
而送礼,在一个特殊主义的社会中,有着远比“表达祝福与情感”更复杂、更不可或缺也无法替代的目的和功能。
社会学大师费孝通曾经指出,中国的社会结构是一种“差序格局”。怎么理解差序格局?费孝通说:中国人的“人伦”,是从自己推出去,在“和自己发生社会关系”的那一群人里,所发生的一轮轮波纹的差序。中国的社会结构,是一个一个以“己”为中心的结构。每个人以自己为核心, 然后扩散出去,就像石子投入水中, 和别人所联系成的社会关系就像水的波纹一样,一圈一圈向外荡漾,愈推愈远,也愈推愈薄。
“中国的规则/道德,是有差等的次序。在差序社会里, 一切普遍的标准并不发生作用, 一定要问清了对象是谁, 和自己什么关系后, 才能决定拿出什么标准来。”郑也夫说,传统中国社会的这种差序格局完全体现了特殊主义的原则,是特殊主义的极致形式(郑也夫,1993)。
礼物,在传统中国社会中,就是“关系”的一种象征性的凝聚。通过礼物的互换,我们反复确认着彼此之间“关系”的存在(确认我们在其他人的“水轮波纹”中有着一席之地);通过向比自己有着更高社会地位的人,赠送“贵重”(可能是商品价值高、也可能是赋予的私人价值很珍贵)的礼物,我们可以拉近自己与“在社会规则中享有更大豁免权”的人之间的距离——我们更加靠近他们的差序核心(也就是他们自己),从而通过调整亲疏、调整了施加在自己身上的规则和标准。
假如,收到礼物而不还礼,我们会有被他人的“水轮”排除在外的风险。如此,我们在这个广大的社会中,会成为真正意义上“孤立无援”的人——因为特殊主义的社会并不平等地保护每一个人,甚至,某种意义上我们每个人都是他人利益对立的敌人。
不知道有多少同辈人,和我一样,曾经在人生的某个阶段收到过父母“要给领导送点东西”的“人生建议”。也不知道有多少人和我一样对这件事心怀抗拒。
为什么年轻一代不再像我们的上一辈人一样,认为送礼是生存的必备技能?为什么我们会对送礼如此反感?真的只是因为我们比他们更加“清高”么?
我们无法如此简单粗暴地总结一种价值取向,更不能如此片面地归因一种文化改变的发生。
一种更加可能的解释是:
当分工日渐精细化,人口大规模迁徙向大都市,当我们比我们的每一位父辈都更像一台巨大机器上的齿轮,我们的工作世界已经很大程度上走向了现代化。现代社会的特征是分工的精细和专业化,各种分工之间必须彼此合作、依存,无法自给自足。旧的特殊主义的信任,在大都市中难以建立。
不必说路上擦身而过的陌生人,在大都市中,即便是同事、邻里、朋友之间,我们也很难了解到一个人的全貌。**我们只能够在非常小的范围内,基于人和人之间的全方面互动与情感性交往产生信任系统。这种信任系统可能达到的规模,远比在传统的小城市中(乡土与人情社会)还要更小,也要远远更为浅薄。**我们在大都市中遇到的大部分私人关系,都尚不足以成为我们“最后的守护者”。
**礼品交换之所以能产生长期而深刻的社会功能,是基于背后持久稳定的人际关系网络。紧密、持续、稳定存在的关系网络,让人们通过赠送礼物这种方式,“预约”某种不用立即兑现的的远期回报(即“欠人情”)。**大都市中人际关系的脆弱和流动性,让我们更倾向于选择立刻、等价的“商品交换”。
我们在大都市中感到孤独,而在老家春节的走亲串友、互赠礼物的过程中感到孤独感的减轻,是因为后者正是我们确认自己处于、并经营和维护着“承载我们的人际网络”的过程。在那个人际网络中每个人的承诺度,是大都市的“繁华热闹”永远无法给予的。
与此同时,那属于普遍主义社会的、凌驾于每个个体之上的、代表着公正与平等的庇护又还没有形成(也不一定会形成,没有人知道,中国会不会走出自己独特的道路)。
而我们与此同时也心知肚明,即便是大都市中,传统中国社会的一套也始终存在。只不过,在这个竞争更加激烈的场域里,我们既没有方法辨认、更无法接近到那些真正具有特权的“差序格局”的核心。没有人情引荐的“波纹”传递,我们要送礼给谁?
当我们离开家乡,我们就真的成了浩瀚大海中的一叶扁舟。中国社会的矛盾之处在于:特殊主义带来了人们对于“自身关系网络以外的人”的不诚实与不信任;但关系网络以内的、尤其是亲密的人之间的扶持与信靠,却也是无以伦比的。(我们看到美国社会中拒绝赡养的情况远比中国常见,在中国,即便是给家庭带来很大伤害的老人也依然得到赡养)。
清华大学社会学系教授渠敬东老师,曾在一篇访谈中说,“一个人总是渺小的,抵抗不住那么大的体制,也无法适应所有的变故。而在这里(指乡村),一个人遇到困难或者人生重要阶段的时候,总有神啊、鬼啊陪伴着你,有祖先在那里守护着你,让你在生老病死中感到心安。”(渠敬东,2017)
有机会的时候,回一回老家吧。虽然某种程度上,年轻一代的我们都已经是文化上的边缘人——我们既无法真正被异乡接纳,也再也无法重新融入生我们养我们的故乡——但老家仍有我们的“根”,它是危机时,对我们最后的承接与安放。
以上,送份热闹的礼,过个俗气的年,甚好。
References:
Mauss,M. (2000). The gift: The form and reason for exchange in archaic societies.WW Norton & Company.
Parsons,T. (1937). The structure of social action. Sociology. Thought and Action, 1(1),32-46.
Weber,M., & Gerth, H. H. (1953). The Religion of China, Confucianism and Taoism.
Weiner,A. B. (1992). Inalienable possessions: the paradox of keeping-whilegiving. Univ of California Press.
渠敬东. (2017). 渠敬东访谈:乡村是一个社会文化生态系统。
阎云翔.(2000). 礼物的流动: 一个中国村庄的互惠原则与社会网络。
郑也夫.(1993). 特殊主义与普遍主义. 社会学研究, (4),110-116。
vps服务商提供的系统一般是不带图形化界面的(Ubuntu部分会有),但有时有些软件必须要图形化界面才能操作,所以需要手动安装vnc,通过vnc实现图形化界面的访问。
目前大多数的一键安装包都是基于ovz架构的vps,kvm架构的由于不能直接安装XFCE,会提示找不到数据源,需要通过其他方法实现。
本教程使用 搬瓦工的Centos 6 x86_64 系统,其他系统自测
1、安装Centos 6 64位系统,最好是自带bbr的,速度会更高。
2、使用终端模拟软件连接vps,推荐使用SecureCRT或者Xshell5。
依次执行下面代码:
1 | yum -y update |
1 | yum install tigervnc-server -y |
1 | adduser vncuser |
vncpasswd
输入后会提示输入密码,并确认。
然后输入su root
以回到root账户下,回到root账户时会要求输入root密码。
输入
1 | vi /etc/sysconfig/vncservers |
键盘上点击I键进入编辑模式,在文件最后添加(分辨率自己调节)
1 | VNCSERVERS="2:vncuser" |
然后输入:wq
保存并退出
启动vnc,重启将start改为restart即可
1 | service vncserver start |
设置开机自启
1 | chkconfig vncserver on |
打开vnc客户端,输入服务器地址:1
例如104.207.128.86:1
,然后输入密码就可以看到远程桌面了
有了远程桌面以后么,就可以干一些挂机等在终端界面无法操作的事情啦········
]]>☆Markdown是什么?
☆谁创造了它?
☆为什么要使用它?
☆怎么使用?
☆谁在用?
☆尝试一下
Markdown是一种轻量级标记语言,它以纯文本形式(易读、易写、易更改)编写文档,并最终以HTML格式发布。
Markdown也可以理解为将以MARKDOWN语法编写的语言转换成HTML内容的工具。
它由Aaron Swartz和John Gruber共同设计,Aaron Swartz就是那位于去年(2013年1月11日)自杀,有着开挂一般人生经历的程序员。维基百科对他的介绍是:软件工程师、作家、政治组织者、互联网活动家、维基百科人。
他有着足以让你跪拜的人生经历:
天才都有早逝的归途。
如果不算扩展,Markdown的语法绝对简单到让你爱不释手。
Markdown语法主要分为如下几大部分:
标题,段落,区块引用,代码区块,强调,列表,分割线,链接,图片,反斜杠 \
,符号’`’。
两种形式:
1)使用=
和-
标记一级和二级标题。
一级标题
=========
二级标题---------
效果:
一级标题
☆二级标题
2)使用#
,可表示1-6级标题。
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
效果:
一级标题
☆二级标题
☆三级标题
☆四级标题
☆五级标题
☆六级标题
段落的前后要有空行,所谓的空行是指没有文字内容。若想在段内强制换行的方式是使用两个以上空格加上回车(引用中换行省略回车)。
在段落的每行或者只在第一行使用符号>
,还可使用多个嵌套引用,如:
> 区块引用
>> 嵌套引用
效果:
区块引用
嵌套引用
代码区块的建立是在每行加上4个空格或者一个制表符(如同写代码一样)。如
普通段落:
void main()
{
printf(“Hello, Markdown.”);
}
代码区块:
void main(){ printf("Hello, Markdown.");}
注意:需要和普通段落之间存在空行。
在强调内容两侧分别加上*
或者_
,如:
*斜体*,_斜体_
**粗体**,__粗体__
效果:
斜体,斜体
粗体,粗体
使用·
、+
、或-
标记无序列表,如:
-(+*) 第一项
-(+*) 第二项
- (+*)第三项
注意:标记后面最少有一个_空格_或_制表符_。若不在引用区块中,必须和前方段落之间存在空行。
效果:
- 第一项
- 第二项
- 第三项
有序列表的标记方式是将上述的符号换成数字,并辅以.
,如:
1 . 第一项
2 . 第二项
3 . 第三项
效果:
- 第一项
- 第二项
- 第三项
分割线最常使用就是三个或以上*
,还可以使用-
和_
。
链接可以由两种形式生成:行内式和参考式。
行内式:
[younghz的Markdown库](https:😕/github.com/younghz/Markdown “Markdown”)。
效果:
参考式:
[younghz的Markdown库1][1]
[younghz的Markdown库2][2]
[1]:https:😕/github.com/younghz/Markdown “Markdown”
[2]:https:😕/github.com/younghz/Markdown “Markdown”
效果:
注意:上述的[1]:https:://github.com/younghz/Markdown "Markdown"
不出现在区块中。
添加图片的形式和链接相似,只需在链接的基础上前方加一个!
。
\
相当于反转义作用。使符号成为普通符号。
起到标记作用。如:
`ctrl+a`
效果:
ctrl+a
Markdown的使用者:
stackedit
与markdown-here
等非常方便,也不用担心平台受限。当然,最终境界永远都是笔下是语法,心中格式化 😃。
注意:不同的Markdown解释器或工具对相应语法(扩展语法)的解释效果不尽相同,具体可参见工具的使用说明。
虽然有人想出面搞一个所谓的标准化的Markdown,[没想到还惹怒了健在的创始人John Gruber]
(http://blog.codinghorror.com/standard-markdown-is-now-common-markdown/)。
以上基本是所有traditonal markdown的语法。
列表的使用(非traditonal markdown):
用|
表示表格纵向边界,表头和表内容用-
隔开,并可用:
进行对齐设置,两边都有:
则表示居中,若不加:
则默认左对齐。
代码库 | 链接 |
---|---|
MarkDown | https://github.com/younghz/Markdown |
MarkDownCopy | https://github.com/younghz/Markdown |
关于其它扩展语法可参见具体工具的使用说明。
]]>注意:Uefi启动只能使用Ubuntu引导,不能使用Win引导
Linux没有什么C盘D盘的概念,只有分区挂载目录的概念,所以你在Windows下 只需要分出一块较大的未分配空间就行,记住不要去格式化
,保证其"未分配"属性(windows系统中看是黑色的)(Linux的文件系统和Win是不一样的,NTFS和FAT32都不适用)。
用Win自带的磁盘管理不能合并不相邻的未分配空间,所以你要想C盘割一点,D盘割一点,再合在一起那是不行的, 解决办法是在 使用分区助手合并,但比较耗费时间
。
你必须要有一个U盘,然后使用软碟通或者USBWriter把iso系统镜像文件烧录进去,这是比较传统的方法, UEFI启动,不需要刻录工作了, 直接将iso里的所有文件解压至U盘即可
。
然后 关闭Windows的快速启动
,重启电脑,进入BIOS后, 关闭Security Boot
(部分电脑没有这一项,就不用管了),最后 选择UEFI下的U盘启动
选中USB启动,回车后即进入Ubuntu安装流程,按照正常的步骤, 如果你选择了安装更新和第三方软件,那么一定要记得联网,否则会卡死在最后的进度条上,所以最好不要勾选。另外,不要选择"与其它系统共存";那一项,而选择最后那个"其它选项"(创建自己的分区)。
主分区
和 空间起始位置
。如果你给Ubuntu系统分区容量足够的话,最好是能给到你 物理内存的2倍
大小逻辑分区
和 空间起始位置
,大小最好不要小于256MB,系统引导文件都会在里面,它的作用和boot引导分区一样,但是boot引导是默认grub引导的,而efi是UEFI引导的。 也就是最后的挂载点里没有"/boot"这一项 ,否则就没办法UEFI启动两个系统了。EXT4日志文件系统
,选中 逻辑分区
和 空间起始位置
,这个相当于你的个人文件夹,类似Windows里的User,总的来说, 最好不要低于8GB
。EXT4日志文件系统
,选中 逻辑分区
和 空间起始位置
,这个相当于软件安装位置,Linux下一般来说安装第三方软件你是没办法更改安装目录的,系统都会统一地安装到/usr目录下面,因此,这个分区必须要大。EXT4日志文件系统
,选中 逻辑分区
和 空间起始位置
,因为除了home和usr还有很多别的目录,但那些都不是最重要的,"/"就把除了之前你挂载的home和usr外的全部杂项囊括了, 大小也不要太小
,最好不低于16GB。安装成功后,会提示你拔掉U盘并且重启,重启后记得进入BIOS改回UEFI Security Boot On模式,也就是重新开启Security Boot,然后再重启你就可以看到选择系统的启动引导界面了,一般来说:
1 | 第一个是Ubuntu,选这个进入Ubuntu系统, |
安装windows和ubuntu双系统以后,默认启动变成ubuntu了,对那些经常要进windows的童鞋,每次开机都得按几次向下的箭头,再敲回车,非常不方便,这时就需要将默认启动改为Win10系统。
打开ubuntu系统以后,打开超级终端,输入以下命令
1 | sudo gedit /etc/default/grub #注意空格不能少 |
这时会打开cfg.文件,显示如下
1 | # If you change this file, run 'update-grub' afterwards to update |
GRUB_DEFAULT 代表的就是启动项的顺序,从数字0开始,
GRUB_TIMEOUT 代表选择界面停留时间
然后在终端依次运行命令:
1 | sudo update-grub |
重启电脑,默认启动的系统就换到windows了。
默认的Ubuntu启动引导界面可能有点丑,可以更换为第三方启动引导
如:rEFind:非常好的解决了uefi模式下win10与linux双系统引导菜单丢失的情况,它本身跨平台,有win,linux,mac版本,下载地址(官方): http://www.rodsbooks.com/refind/
教程: http://tieba.baidu.com/p/4380168027
传统BIOS引导教程(使用EasyBCD管理启动项)
]]>折腾好久,终于,博客上线了,想要实现的效果和功能也基本全部实现,在这记录一下折腾的过程,供以后参考。
Hexo是一款基于Node.js的静态博客框架,依赖少易于安装使用,可以方便的生成静态网页托管在GitHub等平台上。
Git和Node.js安装请直接百度下载安装包,进行安装,如不想改变路径,默认一直点下一步就行。
使用npm命令安装hexo(npm命令需要Node.js支持)
在任意目录打开Git(右键,选择Git Bash Here),输入
1 | npm install -g hexo-cli |
这个安装时间视网速快慢,耐心等待安装完成
然后初始化博客,在想要保存博客文件的目录打开git,输入:
1 | hexo init |
等待安装完成,然后输入:
1 | hexo g |
打开浏览器,输入localhost:4000,就可以看到博客了
登录GitHub后,点击New repository创建新仓库,仓库名称必须为:用户名/github.io
在hexo的安装目录下,找到config.yml 文件,打开,在末尾找到deploy,填入以下内容:
1 | deploy: |
打开Git Bash,设置user.name和user.email配置信息,分别输入以下内容,然后回车。
1 | git config --global user.name "GitHub用户名" |
然后,生成ssh密钥文件(一直回车就行):
1 | ssh-keygen -t rsa -C "GitHub注册邮箱" |
生成的密钥文件,默认存储在用户目录下 .ssh 文件夹中,其中 id_rsa为私钥,id_rsa.pub为公钥,将公4钥绑定到GitHub账户上(请自行百度),然后在 git bash 中输入:
1 | $ ssh -T git@github.com |
如果是第一次的会提示是否continue,输入yes就会看到:You’ve successfully authenticated, but GitHub does not provide shell access ,这就表示已成功连上github。
然后在本地的hexo目录中打开 git bash ,输入:
1 | hexo d |
博客就会同步上传到GitHub,然后在浏览器输入:GitHub用户名/github.io,就可以看到网站了。
本博客采用了next主题,以下内容均以next主题为例。
进入hexo安装目录,在git中输入以下内容便会自动下载next主题到themes/next
目录下面
1 | git clone https://github.com/iissnan/hexo-theme-next themes/next |
然后打开站点配置文件-config.yml
找到theme更改为next并保存
然后执行hexo g
和 hexo d
将更改同步
RSS的主要功能是实现订阅,让别人可以实时的订阅你博客的内容
在hexo的安装目录下,执行:
1 | npm install hexo-generator-feed --save |
然后执行hexo g
和 hexo s
,打开localhost:4000;就能看到效果了
安装插件:npm install hexo-wordcount --save
在主题配置文件中找到以下字段,按自己需要将其设置成true即可
1 | post_wordcount: |
在主题配置文件中找到以下字段,在jiathis:
后面输入true即可
1 | jiathis: true |
add_this_id:
为分享统计功能,可以去jiathis的官网注册一个账号,然后把自己的id输入,就可以在jiathis上看到详细的统计数据
如需修改想要展示的分享按钮可以编辑:themes/next/layout/_partials/share/jiathis.swig
进行修改
安装 hexo-generator-searchdb,在站点的根目录下执行以下命令:
1 | $ npm install hexo-generator-searchdb --save |
编辑 站点配置文件,新增以下内容到任意位置:
1 | search: |
编辑 主题配置文件,启用本地搜索功能:
1 | # Local search |
编辑主题配置文件,修改如下内容:
1 | busuanzi_count: |
切换到根目录下,然后运行如下代码
1 | $ npm install hexo-wordcount --save |
然后在/themes/next/layout/_partials/footer.swig
文件尾部加上:
1 | <div class="theme-info"> |
当前时间:2018年05月06日 23时55分15秒
创建js文件
在/themes/next/source/js/src下新建文件clicklove.js,接着把该链接下的代码拷贝粘贴到clicklove.js文件中。
代码如下:
1 | !function(e,t,a){function n(){c(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: fixed;}.heart:after{top: -5px;}.heart:before{left: -5px;}"),o(),r()}function r(){for(var e=0;e<d.length;e++)d[e].alpha<=0?(t.body.removeChild(d[e].el),d.splice(e,1)):(d[e].y--,d[e].scale+=.004,d[e].alpha-=.013,d[e].el.style.cssText="left:"+d[e].x+"px;top:"+d[e].y+"px;opacity:"+d[e].alpha+";transform:scale("+d[e].scale+","+d[e].scale+") rotate(45deg);background:"+d[e].color+";z-index:99999");requestAnimationFrame(r)}function o(){var t="function"==typeof e.onclick&&e.onclick;e.onclick=function(e){t&&t(),i(e)}}function i(e){var a=t.createElement("div");a.className="heart",d.push({el:a,x:e.clientX-5,y:e.clientY-5,scale:1,alpha:1,color:s()}),t.body.appendChild(a)}function c(e){var a=t.createElement("style");a.type="text/css";try{a.appendChild(t.createTextNode(e))}catch(t){a.styleSheet.cssText=e}t.getElementsByTagName("head")[0].appendChild(a)}function s(){return"rgb("+~~(255*Math.random())+","+~~(255*Math.random())+","+~~(255*Math.random())+")"}var d=[];e.requestAnimationFrame=function(){return e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame||e.oRequestAnimationFrame||e.msRequestAnimationFrame||function(e){setTimeout(e,1e3/60)}}(),n()}(window,document); |
修改_layout.swig
在\themes\next\layout_layout.swig文件末尾添加:
1 | <!-- 页面点击小红心 --> |
\hexo\themes\next\source\lib\canvas-nest\canvas-nest.min.js
修改方法
在站点配置文件中
1 | anchors: |
最近在用hexo 搭建github pages 时,遇到一个问题,
hexo安装没错,也能成功运行。启动也没错。
就是不能访问。。
原因是:
你的电脑端口被占用了。
hexo默认的端口是4000,如果你的电脑安装了福昕阅读器,,就是他,没错,坑爹吧!!!!
启动hexo s 的时候,用这个命令,换一个端口。
hexo s -p 5000
换成5000端口,果断可以访问。
当前时间:2018-05-26 21:59:48
hexo next自带版权开启
1 | #Declare license on posts |
配置文件路径:\hexo\themes\next\layout_macro\post-copyright.swig
1 | +{% if page.copyright %} |
布局文件路径:\hexo\themes\next\layout_macro\post.swig
自定义版权配置文件路径:\hexo\themes\next\layout_macro\my-copyright.swig
1 | <div> |
修改主题的index.swig:\hexo\themes\next\layout\index.swig
1 | {% block content %} |
未完待续······
]]>域名防盗链测试:
图片处理:
2018年03月22日 17时50分35秒
因更新版本再次测试图床功能
外链测试:
/outchain/2/298317/
米兰的小铁匠
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
1 | $ hexo new "My New Post" |
More info: Writing
1 | $ hexo server |
More info: Server
1 | $ hexo generate |
More info: Generating
1 | $ hexo deploy |
More info: Deployment
]]>