1.dependencies 安装项目运行时的模块 devDependencies项目开发时运行的所依赖的模块
2.webpack四核心概念
入口(entry)webpack所依赖关系图的起点
出口(output)webpack打包应用程序的地方
加载器(loader)指定加载的需要处理的各类文件
插件(plugins) 定义项目要用到的插件
3.react声明式编程
4.create-react-app
5.组件之间通信 this.props.name
组件内部 this.state.name
父子组件通过props
子父组件通过回调函数
6.react生命周期
挂载:constructor()、componentWillMount()、componentDIdMount()
更新期:componentReceiveProps()、shouldcomponentUpdate()、、componentWillUpdate()、componentWillDidUpate()
卸载期 :componsntWillUnmount()
7.JSX语法 dom-diff监听dom节点是否变化
8.Redux状态管理 store
9.v-bind:class v-on v-model v-html
10.vue渲染函数 render
11.angular 依赖注入 注解 ngModel ngif ngSwitch ngStyle ngClass ngFor @angular/http
12.生命周期:ngOnchanges ngOnInit ngDoCheck ngAfterContentInit ngAfterContentChecked ngAfterViewInit ngAfterViewChecked ngOnDestroy
13.jsp文件->servlet文件->class文件->servlet文件
14.jsp内置对象 request response session application out page config exception pageContext
15.注册数据库驱动 Class.forName(“com.mysql.jdbc.Driver”);构建数据库url:Connection conn=DriveManager.getConnection(url,username,password);
16.hibernate实例状态
瞬时状态Transient:实体对象被实例化并没有被hibernate session纳入管理状态
持久化状态Persistent:持久化状态同session transaction绑定,事务结束更新至数据库
托管状态Detached:持久化状态的session关闭
17.hibernate缓存
缓存是数据库在内存中的临时容器
一级缓存:一级缓存属于session缓存,生命周期通session 程序使用session加载持久化对象时会先判断是否存在该实体,不存在去数据库取
二级缓存:二级缓存从sessionfactory下的session对象共享,先用session后sessionfactory下的session
18.spring依赖注入、AOP面向切面编程aspect 代理
19.SpringBoot自动装配
@SpringBootApplication @SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan,此处@ComponentScan由于没有指定扫描包,因此它默认扫描的是与该类同级的类或者同级包下的所有类
@EnableAutoConfiguration Spring会试图在你的classpath下找到所有配置的Bean然后进行装配
1)自动装配还是利用了SpringFactoriesLoader来加载META-INF/spring.factoires文件里所有配置的EnableAutoConfgruation,它会经过exclude和filter等操作,最终确定要装配的类
2) 处理@Configuration的核心还是ConfigurationClassPostProcessor,这个类实现了BeanFactoryPostProcessor, 因此当AbstractApplicationContext执行refresh方法里的invokeBeanFactoryPostProcessors(beanFactory)方法时会执行自动装配
20.springboot Actuator监控 监控系统配置、日志、URL、定时任务等信息
21.springboot Quartz定时任务
22.docker pull run exit ps start stop restart attach exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止 export rm search rmi commit
FROM 指明构建的新镜像是来自于哪个基础镜像
FROM centos:6
MAINTAINER 指明镜像维护着及其联系方式(一般是邮箱地址)
MAINTAINER disonxxx@552.com
RUN 构建镜像时运行的Shell命令
RUN yum install httpd
CMD 启动容器时执行的Shell命令
CMD /usr/sbin/sshd -D
EXPOSE 声明容器运行的服务端口
EXPOSE 80 443
ENV 设置环境内环境变量
ADD 拷贝文件或目录到镜像中 如果是URL或压缩包,会自动下载或自动解压
ADD html.tar.gz /var/www/html
COPY 拷贝文件或目录到镜像中,用法同ADD,只是不支持自动下载和解压
COPY ./start.sh /start.sh
ENTRYPOINT 启动容器时执行的Shell命令,同CMD类似,只是由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序
ENTRYPOINT /bin/bash -C ‘/start.sh’
VOLUME 指定容器挂载点到宿主机自动生成的目录或其他容器 一般不会在Dockerfile中用到,更常见的还是在docker run的时候指定-v数据卷
VOLUME ["/var/lib/mysql"]
USER 为RUN、CMD和ENTRYPOINT执行Shell命令指定运行用户
USER [:]
USER [:]
USER root
WORKDIR 为RUN、CMD、ENTRYPOINT以及COPY和AND设置工作目录
WORKDIR /data
22.k8s
apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment #该配置的类型,我们使用的是 Deployment
metadata: #译名为元数据,即 Deployment 的一些基本属性和信息
name: nginx-deployment #Deployment 的名称
labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解
app: nginx #为该Deployment设置key为app,value为nginx的标签
spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用
replicas: 1 #使用该Deployment创建一个应用程序实例
selector: #标签选择器,与上面的标签共同作用,目前不需要理解
matchLabels: #选择包含标签app:nginx的资源
app: nginx
template: #这是选择或创建的Pod的模板
metadata: #Pod的元数据
labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod
app: nginx
spec: #期望Pod实现的功能(即在pod中部署)
containers: #生成container,与docker中的container是同一种
- name: nginx #container的名称
image: nginx:1.7.9
23.Redis支持的数据类型
String字符串:
格式: set key value
Hash(哈希)
格式: hmset name key1 value1 key2 value2
List(列表)
格式: lpush name value
Set(集合)
格式: sadd name value
Redis的Set是string类型的无序集合。
zset(sorted set:有序集合)
格式: zadd name score value
24.持久化
Redis 提供了两种持久化方式:RDB(默认) 和AOF
RDB是Redis默认的持久化方式。按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二进制文件。即Snapshot快照存储,对应产生的数据文件为dump.rdb,通过配置文件中的save参数来定义快照的周期。( 快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。)
AOF:Redis会将每一个收到的写命令都通过Write函数追加到文件最后,类似于MySQL的binlog。当Redis重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。
当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。
25.Redis 有哪些架构模式
edis sentinel 是一个分布式系统中监控 redis 主从服务器,并在主服务器下线时自动进行故障转移。其中三个特性:
监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作。
26.什么是缓存穿透?如何避免?什么是缓存雪崩?何如避免?
缓存穿透
一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。一些恶意的请求会故意查询不存在的key,请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。
27.Redis事务
Redis事务功能是通过MULTI、EXEC、DISCARD和WATCH 四个原语实现的
Redis会将一个事务中的所有命令序列化,然后按顺序执行。
1.redis 不支持回滚“Redis 在事务失败时不进行回滚,而是继续执行余下的命令”, 所以 Redis 的内部可以保持简单且快速。
2.如果在一个事务中的命令出现错误,那么所有的命令都不会执行;
3.如果在一个事务中出现运行错误,那么正确的命令会被执行。
1)MULTI命令用于开启一个事务,它总是返回OK。 MULTI执行之后,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个队列中,当EXEC命令被调用时,所有队列中的命令才会被执行。
2)EXEC:执行所有事务块内的命令。返回事务块内所有命令的返回值,按命令执行的先后顺序排列。 当操作被打断时,返回空值 nil 。
3)通过调用DISCARD,客户端可以清空事务队列,并放弃执行事务, 并且客户端会从事务状态中退出。
4)WATCH 命令可以为 Redis 事务提供 check-and-set (CAS)行为。 可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行,监控一直持续到EXEC命令。
28.tcp/ip如何保证可靠传输
1)、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
2)、数据校验
3)、数据合理分片和排序:
UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.
tcp会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。
4)、流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。
5)、拥塞控制:当网络拥塞时,减少数据的发送。
29.
1.设计模式六大原则
1)、开闭原则(Open Close Principle)
对扩展开放,对修改关闭。
2)、里氏代换原则(Liskov Substitution Principle)
任何基类可以出现的地方,子类一定可以出现
3)、依赖倒转原则(Dependence Inversion Principle)
针对接口编程,依赖于抽象而不依赖于具体。
4)、接口隔离原则(Interface Segregation Principle)
使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。
一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。
6)、合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
2.工厂模式
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行
3.抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。
4.单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点
5.建造者模式(Builder Pattern)
使用多个简单的对象一步一步构建成一个复杂的对象。
6.原型模式
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
7.适配器模式
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
8.桥接模式
将抽象部分与实现部分分离,使它们都可以独立的变化。
9.过滤器模式
允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦的方式把它们连接起来
10.组合模式
用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
11.装饰器模式
允许向一个现有的对象添加新的功能,同时又不改变其结构。
12.外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
13.享元模式
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。
意图:运用共享技术有效地支持大量细粒度的对象。
14.代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能
为其他对象提供一种代理以控制对这个对象的访问
15.责任链模式
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链
16.命令模式
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
17.解释器模式
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
18.迭代器模式
迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
19.中介者模式
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
20.备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
21.观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
22.状态模式
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
23.空对象模式
在空对象模式(Null Object Pattern)中,一个空对象取代 NULL 对象实例的检查。
24.策略模式
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。
25.模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
26.访问者模式
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。