Linux常见操作指令
cd change directory
pwd print working directory
ls list
mkdir make directory
mkdir -pv /root/b/c/d 创建目录结构
configuration
cat 文件名catenate 查看文本内容,适合小文件
more 文件名 看大文件,内容多的时候
less -mN 文件名 比more好,能显示行数
tail -10 文件名 显示该文件末尾10行
cp 文件名1 文件名2
cp -b 文件名1 文件名2 不会覆盖原来的文件
cp -r /root/a /root/b含有目录的文件夹复制,需要**-r** recursive递归
mv 移动文件或者重命名文件
rm 文件名 删除remove会提示是否删除
rm -f 文件名 强制删除不会提示force
rm -rf强制删除目录
find /root/ name ‘in*’ 寻找在/root/根目录下含有in的文件,*是通配符
vim 文件名 进去文件里面了
i 可以插入字符了insert
I 光标在当前行插入
a在光标后插入
A在光标当前行末尾插入
o插入新的下一行
O插入新的上一行
esc 退出,一般模式
:wq 保存并退出
yy复制
p粘贴
nyy复制n行
gg文本第一行
G文本最后
dd删除一行
ndd删除n行
grep(Global regular expression print)用来过滤字符 ,经常和其他命令联合一起使用 ignore 忽略大小写
grep -i MySQL /root/install.log
ps -ef任务管理器,查看当前进程
ps -ef | grep -i MySQL /root/install.log 管道,过滤
kill -9强制终止进程
ifconfig
ping 127.0.0.1 查看本机网络通畅
Java
JRE运行平台
JDK开发工具
Eclipse是集成开发环境IDE(Integrated Development Environment)
public class HelloWorld{
public static void main(String[] args){
System.out.println(“HelloWorld!”);
}
}
jdk 的bin 下编译javac HelloWorld.java
java HelloWorld
&&和&一样的效果,区别是&&有短路效果,如果左边为false,那么右边就不再执行
import java.util.Scanner
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
import java.util.Random;
Random r=new Random();
int number=r.nextInt();
猜数字小游戏,
系统产生一个随机数
键盘录入事件
while(true){
if比较多次猜的数据,判断大小
}
int[] arr =new int[3];动态初始化
int[] arr =new int[]{};静态初始化
int[] arr={};简化版
二维数组
int[][] arr=new int[m][n];
int[][] arr={{},{}};
ArrayList arr=new ArrayList();
读取数据的2种方式:
一次读取一个字符,
一次读取一个字符串。
方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法
方法重写的应用场景:当父类的方法不能完全满足子类使用的时候,既可以保留父类的功能(沿袭、传承),还可以有自己特有的功能
方法重写的注意事项:
不可以重写父类私有的成员方法,压根就看不到父类的私有成员
子类重写父类方法,权限必须大于等于父类方法的权限
注解
@Override:方法重写,说明下面的方法是重写父类的方法
方法的重载:在一个类中,有多个重名的方法,但是其参数不一样(参数的个数,参数的类型,参数的顺序),和返回值无关
什么是xml?
xml是一种可扩展标记语言,用于描述数据,可以以轻松检索和共享的形式存储数据。
xml的特征:
1、XML(可扩展标记语言)是一种标记语言。
2、XML旨在存储和传输数据。
3、XMl的创建是为了提供一个易于使用和存储的自描述数据。
4、XML不是HTML的替代品。
5、XML旨在实现自我描述。
6、XML旨在传输数据,而不是显示数据。
7、XML标签没有预定义,因此我们必须定义好自己的标签才可以使用。
8、XML独立于平台且与语言无关。
、XML是一种独立于软件和硬件的工具,用于传输和存储数据;它侧重于数据。HTML用于显示数据并关注数据的外观。
2、XML提供了一个定义标记语言的框架。HTML 本身就是一种标记语言。
3、XML 区分大小写。HTML 不区分大小写。
4、XML既不是标签标记语言也不是编程语言。HTML是一种超文本标记语言。
5、我们可以根据需要定义自己定义XML标签。HTML 有属于自己的预定义标签,不可以用户自己定义。
6、XML 强制要求使用结束标记。在HTML中,没有必要使用结束标记。
7、XML是动态的,因为它用于传输数据。HTML是静态的,因为它用于显示数据。
8、XML 保留空格。HTML 不保留空格。
JSON是一种轻量级的数据交换格式。它不同于其他的数据存储和交换语言格式的地方在于,它存储和表示数据时的文本中完全不会涉及到编程语言。
在网络传输中,使用JSON语言代替了XML语言,会有极大的便利。首先JSON语言的语法格式较为简单,并且它的层次结构十分的清晰,这极大的方便了人们的读写,也使得机器对其的解析和生成更加容易实现。其次,在数据交换方面,由于JSON语言没有XML语言中那种元素标签,因而对于相同的内容,使用JSON记录时会比使用XML记录所使用到的字符数要少得多,所以它可以极大的节省出数据传输时所需的带宽,提高网络传输的效率。但是JSON也有其缺点,那就是它没有XML语言那么一清二楚。例如,当JSON数据很长的时候,我们要想查找某个数据,就需要在其密密麻麻的数据节点中去搜寻,这一过程是繁琐而又复杂的。但由于JSON主要用于传输数据,所以这种问题对使用带来的影响并不大。综上,JSON作为一种理想的数据交换语言可谓是名副其实的。
Http之三报文握手
seq: 序列号,表示数据第一个字节的序号
ack: 确认序列号,表示期望收到的第一个字节的序号
SYN:用作建立连接时的同步信号。
ACK:用于对收到的数据进行确认。
FIN:表示后面没有数据需要发送,连接需要关闭。
第一次握手:客户端发送数据包将SYN置1,表示希望建立连接,seq=x。发完后进入SYN_SEND状态。
第二次握手:服务器收到请求后,通过SYN确认是建立连接请求,然后发送一个响应包,将SYN=1 ACK=1 seq=y ack=x+1,然后进入SYN_RCVDz状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
客户端想要关闭连接,然后发送FIN信号并带上seq信息给服务器,
服务器应答ACK告诉客户端可以断开,但是要等我把数据发送完喽。注意这时候客户端进入FIN_WAIT_2状态。
服务器将数据发送完后发送FIN+ACK给客户端,告诉客户端OK了,然后自己进入CLOSE_WAIT状态。
客户端收到后,给服务器发送ACK确认收到,然后自己进入TIME_WAIT状态。
经过2MSL,客户端没有收到服务器传来的报文,则确定服务器已经收到最后的ACK信号,连接正式释放。
为什么要三次握手?
保持信息对等。
防止请求超时导致脏连接。
TCP面向连接,UDP面向非连接
TCP提供可靠的服务(数据传输无差错、不丢失、不重复、按序到达),UDP不可靠
TCP面向字节流,UDP面向报文
TCP数据传输慢,UDP数据传输快
TCP首部开销20字节,UDP8字节
JS基础知识
JavaScript基础number,string,Boolean,null,undefined,object
获取字符串类型 console.log(typeof 变量名)
获取字符串长度 console.log(变量名.length)
字符串拼接 +就行
alert 无提示的弹框
prompt 有提示的弹框
其他类型转换数字
转整数 parseInt();
转小数 parseFloat();
转数字 Number();
其他类型转字符串
变量有意义 .toString();
变量没意义 String();
其他类型转布尔 Boolean(值);
instanceof 判断一个变量属于什么类型,结果为Boolean类型
Math.ceil向上取整
Math.floor向下取整
Math.pow幂次方,指数
Math.sqrt开方
Math.random伪随机数[0,1)
.charAt(index) 返回值是字符串index的对应字符
String.fromCharCode 将数字转成字符,组成字符串 遵循ASCII码SOS 83 79 83
.slice(2,3) 截取字符串,开始的索引,结束的索引,返回值是截取后的字符串
.substr(2,5)开始的位置,个数,,返回值是截取的字符串
.substring()开始的索引,结束的索引,返回值是字符串
.indexof()要找的字符串,返回值是这个字符串的索引值,没有找到的话,就返回-1
.lastIndexOf()从后往前找,但是索引的位置还是从左到右
.split("",3) 去掉某个字符,
.splice(2,3)从索引为2的位置,删除3个元素
.replace(原来的字符串,要替换的字符串)
.toLocaleLowerCase()大写转小写
.toLowerCase
.toUpperCase
.toLocaleUpperCase
.trim去掉字符串两端的空格
Array.isArray()判断变量是不是数组
.filter 过滤
.push 把要添加的值放在数组最后
.pop 删除数组中最后一个元素,返回值就是删除的这个值
.shift删除数组第一个元素,返回值就是删除的这个值
.unshift 把要添加的值放在数组最前面
.forEach(函数),循环遍历数组,相当于for循环
.indexof(元素),返回值是元素所在的索引,如果没有就返回-1
.join(字符串)
.map(函数),把得到的每一个结果作为新的返回值传到数组的原来的位置
.reverse反转数组
.sort(函数)排序数组
.slice(开始索引,结束索引)截取数组,包括开始,不包括结束索引
strcat 粘贴字符串,加在后面
struct结构体
strcpy
malloc,calloc和free
typedef和#define
IO输入输出流
文件操作FILE *fp
PASCAL
&全真才真
|全假才假
^(XOR)同号为假,异号为真
C++基础知识
#include
using namespace std;
int main()
{
cout<<“Hello,World!”<<endl;
return 0;
}
虚函数,是针对多态来的,经过派生后动态绑定(虚表,指向函数的指针。)。是非静态成员函数,不是内联函数,因为内联函数是定义的静态成员函数。
一般的成员函数都是虚函数。构造函数不能是虚函数,析构函数可以是虚函数。
派生类的成员可以继承基类成员的虚函数。不需要再用virtual关键字来声明。但是为了程序的可读性,我们一般都对派生的成员用virtual关键字。
重载operate是指重新定义。
重写是针对继承来说的。成员函数可以重新覆盖基类成员。
virtual函数=0 纯虚函数,在基类中无法实现操作,在成员函数中通过动态绑定,指针指向来实现。
在派生类中定义虚函数覆盖基类虚函数。有的时候可能参数列表返回值不同。这类错误往往不容易被发现,编译器也不会报错。我们使用override去申明派生类虚函数。Override关键字是针对多态而言的。
Final关键字。不允许被继承。
template 函数模板,函数模板并非自动可以处理所有类型的数据。
template类模板
返回是引用,他是左值
返回是对象,他是右值
栈的基本操作。初始化入栈,出栈,清空站,访问栈的元素,检测站的状态(满占空占。)。
泛型程序设计。是指将数据和算法分离出来。单独抽象出来的一个程序设计模板,就像c++的stl类库。Standard template library。标准模板库。为泛型程序设计提供了逻辑基础。
STL的基本组件。容器container。迭代器interact。函数对象function object。算法。
基本容器内模板。顺序容器有,数组向量,双端队列。单链表列表。关联容器有集合。映射多种集合,
容器适配器有栈队列,优先队列。
使用容器的时候需要包含对应的头文件。
迭代器。是泛型的指针。指针本身也是迭代器。使用迭代器的时候需要包含头文件iterator
函数对象是泛化的函数。任何普通函数和任何重载了。()的运算符的类的对象。都可以作为函数对象来使用。
迭代器是算法和容器的桥梁,迭代器用作访问容器中的元素,算法不直接操作容器中的数据,而是通过迭代器去访问数据
算法和容器独立新增算法不影响容器的实现,新增容器也不影响算法的移植。
输入流迭代器和输出流迭代器都属于适配器。适配器是用来为已有的对象提供新的接口。
输入流适配器和输出流适配器。为流泪对象提供了接口。
STL
算法是通用的。独立于数据类型和容器类型。算法本身是一种函数模板,通过迭代器获得输入数据。通过函数对象对数据处理。通过迭代器将结果输出。
三个最重要的输出流:ostream,ofstream,ostringstream
三个预定义的输出流对象 cout,cerr,clong
cout标准输出
cerr标准错误输出,没有缓冲区
clog类似cerr,有缓冲区,就像错误日志
ofstream 类支持磁盘文件输出。
操纵符(manipulator)
操纵服大多都定义在iOS base 类,如hex,oct,dec
setprecision控制浮点数的精度
引用传递。
重载函数,就是有相同的功能,但是数据类型不同,编译器只是区分个数和类型,不以返回值区分
内联函数,就是只有单一语句,可以在其他地方调用该函数,不能包括switch case,while结构体,
返回值。return 1
复制构造函数
构造函数,默认构造函数初始化
析构函数没有参数,没有返回值类型。用来释放空间和资源。
基于范围的for循环。
stdafx.h
jQuery基础知识
优点:
查找元素的方法多种多样,非常灵活
隐式迭代,不需要写for循环
完全没有兼容性
动画animation效果多,功能强大
代码简单
concat?将传入的数组或非数组值与原数组合并
思想:可以用于数组合并,并且不改变原数组,返回一个新数组,
innerText低版本火狐浏览器不支持,支持textcontent,IE浏览器支持innerText,不支持textContent
jQuery入口函数:
( d o c u m e n t ) . r e a d y ( f u n c t i o n ( ) ) ; 或 者 (document).ready(function(){}); 或者(document).ready(function());或者(function(){});
js入口函数:window.οnlοad=function
js入口函数比jQuery慢,
jq等window加载完才显示 不等图片
js都要等待
什么是DOM对象?使用js方式获取的元素就是DOM对象(js对象)
什么是jQuery对象?使用jQuery方式获取的元素就是jq对象
js和jQuery对象的区别:
js对象不能调用jQuery对象的方法
jQuery和js的联系:
jQuery对象就是js对象的集合
DOM无法调用jQuery对象,因为这是2个不用的方法
DOM对象调用jQuery对象的方法,需要把DOM对象转化为jQuery对象,用$()
实 质 是 f u n c t i o n , 实质是function,实质是function,===jQuery
也可以把jQuery对象转化为DOM对象,用[]
或.get()
$的3种用法:
1,传函数,☞入口函数
2,把DOM对象转化为jQuery对象
3,传参是字符串,用来着找对象
$(“s1,s2”);并集选择器
$(“s1s2”);交集选择器
$(“s1 s2”);后代
$(“s1>s2”);子集
注册鼠标经过事件
$li.mouseenter
$li.mouseleave
mouseover mouseout
隐式迭代:
会给jQuery内部所有的样式设置相同的值
获取的时候只会返回第一个样式的值
添加类addClass
移除类removeClass
判断类hasClass
切换类toggleClass
样式在style里面写,用CSS
属性用attr(name,value)写,可以设置单个属性
多个属性用对象{}
三组动画
show hide
slide down . slide up slide toggle
fade in . fade out fade toggle
自定义动画
.animate({对象,传入需要改变的样式},speed动画持续的时间,动画效果)
.animate({left:800},speed:8000,“swing”)
动画队列
.stop().slide down() 停止当前正在执行的动画,有2个参数
clearQueue清除动画队列。true false
jumpToEnd是否跳转到动画最后
默认都是false
音乐导航播放🎵
.audio.get().load()音乐每次都重新加载,因为防止鼠标移走了音乐还没播放完
.audio.get().play()
创建节点
.append() 添加到内容前面
.appendTo()
.prepend() 把节点加到最前面
.prependTo()
.before()把元素填加到另一个元素上
.after()
清空元素的内容
$(“div”).html("")空字符串来替换了内容,但是容易造成内存泄露
$(“div”).
克隆节点
.clone() 默认不传参数就是false,深复制,不会复制事件
true浅复制,会复制事件
样式操作(写在style里面)
css(name value)设置单个样式
css(obj)设置多个样式
css(name)获取样式
addClass
removeClass
hasClass
toggleClass
属性操作
attr方法,与class方法差不多
prop操作布尔类型的属性,disabled checked selected
removeAttr 移除属性
html innerHTML和text innerText
HTML会解析标签,Text不会
jQuery获取div的width值:
$(“div”).width
$(“div”).innerWidth padding+width
$(“div”).outerWidth(false) 指的是 padding+width+border
$(“div”).outerWidth(true) 指的是 padding+width+border+margin
获取滚动条的值
.scrollTop()
.scrollLeft()
JavaScript高级
dir验证属性
工厂模式,有new,有返回值,,new对象是当前对象
自定义构造函数,首字母大写,this是当前对象,
开辟内存空间,把this设为当前对象,设置属性和方法的值,把this返回
判断对象属性的数据类型,用instanceof 和 .constructor
原型的方法解决数据共享
倒叙数组i=this.length-1;i>=0;i–;
冒泡排序sort
函数自调用,一次性函数,声明的同时,调用自己
面向对象的编程思想,万物皆对象,总结出对象的特征和行为(比如,人),抽象成属性和方法,定义构造函数,实例化对象,调用属性和方法,完成相应的需求
原型添加方法,需要共享就加到属性里,不需要共享就加到构造函数里
组合继承,就是原型继承+构造函数继承
拷贝继承,改变地址指向,也可以通过循环遍历数组for(in)的方法
预解析的时候用函数表达式,因为函数声明在IE8浏览器会报错
函数中的this指向:
普通函数中的this☞window
对象.方法中的this☞当前实例对象
定时器中的this☞window
构造函数中的this☞实例对象
原型对象中的this☞实例对象
在严格模式下"use strict"
函数是对象(因为有prototype原型),对象不一定是函数(因为有__proto__对象,就像Math是对象,不是函数,它有__proto__,没有prototype),一个东西如果既有prototype又有__proto__,说明即是函数,又是对象
所有的函数实际上都是Function的构造函数创建出来的实例对象
回调函数,函数作为参数使用
setInterval定时器
apply和call中如果没有传入参数或者传null,那么该方法调用的函数中的对象的this就是指默认window,调用的写法不一样,结果一样,apply(null,[1,2]) call(null,1,2),可以改变this的指向
方法.属性改变原型的this指向
bind是复制函数,可以在复制的时候传参数,也可以在调用的时候传参数,
案例:每隔一秒产生一个1~10的随机数
思路:先调用系统random函数Math.random()*10+1
show1函数中设置定时器,并且调用show2函数显示随机数
show2函数是显示随机数
最后调用show1,打印出来就OK
介绍下函数中的几个属性:
name:函数的名字,只读,不能修改
arguments:实参的个数
length:形参的个数
caller:调用(比如f1在f2被调用,那么f2就是调用者)
作用域链,从里到外搜索
预解析,把函数的声明,和变量的声明提前
闭包,缓存数据(把这个数据放在外层函数和里层函数中间),延长作用域链,缺点也因为缓存数据没有及时释放内存。
闭包,可以实现产生3个相同的随机数
递归的思想求一串数字的和:递归一定是函数,并且有结束条件,先判断是否大于10,<10直接返回
若>10,用x%10得个位数+function(parseInt(x/10))
递归求斐波那契
function getFib(x){
if(x=1||x=2){return 1;}
return getFib(x-1)+getFib(x-2);
}
getFib(12);
遍历数组中的属性元素用for(var key in x)
浅拷贝:将一个对象中的属性,方法复制到另一个对象中,就是把一个对象的地址指向另一个对象,两个对象有共同的属性,方法
深拷贝:把一个对象中的属性,方法都找到,在另一个对象的相应地方开辟空间,一个一个存进去
深拷贝要用到递归
比如,通过函数把a中的属性深拷贝到b中
1,先遍历a对象中每个属性的值
2,判断这个属性值是不是数组,如果是,在b中添加一个月相同类型的属性值,也就是给b对象添加空数组,
3,调用函数把a对象中的数组中每个属性值深拷贝到b对象中的数组
4,判断这个属性值是不是对象类型,如果是,在b中添加相同的属性,空对象类型,
5,调用函数把a对象中的属性值一个一个深拷贝到b对象中
6,如果这个属性值是普通数据,就直接赋值给b
遍历DOM树,用到递归函数
第一个函数,给我根结点,显示所有的子节点
第二个函数,把子节点的名字显示出来
循环遍历子节点显示名字,判断子节点下面有没有子节点,有就继续遍历
正则表达式,用来匹配姓名,身份证号码,电话号码是否一致,匹配用户名和密码是否一致
正则表达式是由元字符或者限定符组成的式子
.表示除了\n以外的所有字符
[09]表示09之间任意一个数字
[az]表示az小写字母中任意一个字母
[AZ]表示[AZ]之间任意一个大写字母
[azAZ]表示所有字母中任意一个
|或者,运算级别最低
()提升优先级,左结合性
下面这些可以叫元字符,但也可以叫限定符,因为限定了前面的元素出现的次数
*前面的表达式出现的零次或多次。
+前面的表达式出现的一次或多次。
?前面的表达式出现了零次或一次。
^表示以什么开头或者取反
$表示以什么结束
\d表示数字中的任意一个
\D表示非数字中的任意一个
\s,表示一个空白符
\S表示非空白符
\w表示非特殊符号[09azA~Z_]
\W表示特殊符号
\n换行符
\r回车符
\t水平制表符
\f换页符
邮箱📬的正则表达式:
[09azAZ_.-]+[@][09azAZ_.-]+([.][azAZ]+){1,2}
字面量的方式创建正则表达式
var reg=/\d{1,5}/;
var result=reg.text();
验证邮箱的密码强度:为文本框注册键盘抬起事件,正则表达式验证文本框中的内容,得到一个密码强度。
先用函数判断这个输入密码的强度。1,2,3级别,再显示对应的颜色
escape将中文汉字转化为编码
unescape将Unicode编码转化为中文汉子
验证表单
通过函数,验证文本框中的内容是否匹配正则表达式
str.match(/d{5}/g)可以提取字符串中的所有数字 以/g结尾全局模式/i忽略大小写。
可以用来提取字符串中的所有邮箱
区别数组和伪数组:
真数组长度可变,伪数组长度不可变。
真数组可以使用数组中的方法,伪数组不能使用数组中的方法。
解释一下数组中的方法
arguments.forEach 报错
arr.forEach 正确