java复习

登录注册流程

短信验证码登录、账号密码登录、第三方登录、忘记密码、图形验证码等以及注意的一些情况。

1.前端+后端***判空***(有人使用会绕过js,所以要加后端判空)typeof obj === ‘undefined’ || obj == null || obj === ‘’—改进—>NullObject模式:不再需要进行对象的判空操作,而是可以直接使用对象,也不必担心NPE(NullPointerException)的问题。.NR Null Object插件;

Optional判空(java8新特性,如果存在值,isPresent()将返回true,get()将返回该值,使逐层判空代码变得整洁)

Kotlin科特林:与Java很好的混合使用,test1?.test2?.test3?.test4

2.防止重复提交——解决方法:前端提交方法体外定义let str=false;或者用一些js组件; 后端解决方案:1.提交后执行Redirect;2. session+subtoken+input(hiden) ,首次提交后删除该token 3. 数据库(不推荐:硬件要求高,并发不大)

3. 用户信息存储:一般存session ;double/float精度丢失——>BigDecimal; 验证码存redis;重要信息还是要存数据库;

4.密码比对(防止暴力破解or彩虹表or通过wifi获得明文和哈希值+模仿浏览器):比对密文、加盐(随机盐值or固定盐值)——这些对网络监听来说没有任何安全性可言;post是掩耳盗铃,因为js是明文;

解决办法:前端获得服务器端的唯一随机token+salt+密码+加密;每成功登录一次,改一次token;

5.错误异常反馈:要保证无帐号和密码错误的反馈信息一致性;很多黑客用这个来观察分析网站。

  1. 11位手机号的显示方式可以用「344」形式(如:000 0000 0000);
  2. 手机、验证码的验证先后顺序(验证码是否超时——Redis设置和更新Key的过期时间、验证码是否正确、手机号是否注册过等);
  3. 错误反馈的方式——弹窗
  4. 传统的session认证(服务端的开销会明显增大,cookie如果被截获,跨站请求伪造的攻击。)——因为http协议本身是一种无状态的协议,下一次请求时,用户还要再一次进行用户认证才行,无法承载更多的用户;
    1. token的鉴权机制(uuid作为源token)也是无状态的,用户名密码来请求服务器——shiro验证——发送给用户一个token——每次请求时附送上这个token值——验证token值,并返回数据
    2. JWT ——三段组成
  5. 图形验证码 cn.hutool.captcha——createCode——getCode——verify 验证
  6. 账号密码登录 帐号密码直接md5加盐加密,若系统判断手机号未注册,反馈手机号or密码错误
  7. 第三方登录
  8. 忘记密码 密码找回后直接进入页面

设计模式

工厂模式:不会对客户端暴露创建逻辑

单例模式:确保只有单个对象被创建——饿汉(*),懒汉(需要时再创建)

建造者模式:一步一步构建成一个复杂的对象

代理模式:提供访问某个对象的接口

MVC模式:(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

IO

输入、输出流

类型分为:

字节输入流(InputStream)——读取一个字节
字节输出流(OutputStream)
字符输入流(Reader)——读取一个或多个字节
字符输出流(Writer)

1)使用FileInputStream、FileOutputStream和FileReader、FileWriter分别进行拷贝
2)使用字节流拷贝时,定义一个1024长度的字节数组作为缓冲区,使用字符流拷贝使用使用BufferedReader和BufferedWriter包装流进行包装

多线程

创建多线程有3种方式,分别是继承线程类,实现Runnable接口,匿名类

当前线程暂停Thread.sleep(1000);

加入到当前线程中join

线程优先级setPriority

临时暂停yield

守护线程setDaemon

HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式
区别1:
HashMap可以存放 null
Hashtable不能存放null
区别2:
HashMap不是线程安全的类
Hashtable是线程安全的类

synchronized类似的,lock也能够达到同步的效果

sql优化

避免全表扫描

避免索引失效

尽量选择索引排序

避免查询不必要的字段

1.插入大量数据时:先关闭索引

sql 练习

用一条SQL 语句 查询出每门课都大于80 分的男生姓名

name course grade gender
张三 语文 81 man
张三 数学 75 man
李四 语文 76 woman

select name from table group by name having min(grade) > 80 where gender=man

select name from table1 inner join table2 on gender=man and chengji >80;

SELECT DISTINCT 语句用于返回唯一不同的值

两表联查

(left join、right join、inner join,full join)

select * from table1 left join table2 on table1.id=table2.id; + where limit 0,30

select * from table1 inner join table2 on table1.id = table2.id;

三表

select * from t1 left join(t2,t3) on (t1.id=t2.id and t2.id = t3.id) where t1.id=3;

AS:别名

三表查询(只需有两个表有数据即可输出数据)

select * from content as c inner join extra as e on c.id=e.cid leftjoin images as i on c.id=i.cid

求和:

select name,sum(sum1) from {

​ select 成绩(*) as sum1 from table1 on 语文成绩 >80;

​ union all

​ select 成绩(*)as sum1 from table2 on 数学成绩>90;

}as total where table1_name =table2_name ;

select name from

ORDER BY 关键字用于对结果集进行排序。 ASC升|DESC降

INSERT INTO 语句用于向表中插入新记录。INSERT INTO *table_name* (*column1*,*column2*,*column3*,...)
VALUES (*value1*,*value2*,*value3*,...);

UPDATE 语句用于更新表中已存在的记录。

UPDATE table_name
SET column1=value1,column2=value2,…
WHERE some_column=some_value;

DELETE FROM table_name
WHERE some_column=some_value;

mysql使用复习

oracle 三层子查询

mysql -u root -p #连接数据库

show databases;

引擎:myisam和innodb

1.普通索引 2.主键索引 3.唯一索引 4.组合索引

CREATE TABLE hero (
 ``id int(11) AUTO_INCREMENT,
 ``name varchar(30) ,
 ``hp float ,
 ``damage int(11) ,
 ``PRIMARY KEY (id)
) DEFAULT CHARSET=utf8;

mybatis复习

持久层框架、定制化 SQL、

​ @insert 、@updata、@Delete、@Select、@Results( 封装多个结果集)、@Many(一对多封装)、@One、@Options(设置缓存时间,设置子增key)

@Select``(``" select * from category_ "``)
  ``@Results``({ 
        ``@Result``(property = ``"id"``, column = ``"id"``),
        ``@Result``(property = ``"products"``, javaType = List.``class``, column = ``"id"``, many = ``@Many``(select = ``"com.how2java.mapper.ProductMapper.listByCategory"``) )
      ``})
  ``public` `List<Category> list();

分页:1.sublist 2.limit 3.pagehelper插件

​ 分页公式:

(当前页数 - 1 )X 每页条数 , 每页条数

一级缓存(默认开启):存在seesion ;二级缓存(默认不开启);一级缓存的作用域是一个sqlsession内;二级缓存作用域是针对mapper进行缓存.

mybatis认为,对于两次查询,如果以下条件都完全一样,那么就认为它们是完全相同的两次查询。

如果我们配置了二级缓存就意味着:

  • 映射语句文件中的所有select语句将会被缓存。
  • 映射语句文件中的所欲insert、update和delete语句会刷新缓存。
  • 缓存会使用默认的Least Recently Used(LRU,最近最少使用的)算法来收回。

动态sql :if、where、choose、foreach、bind(做一次字符串拼接,方便后续使用)

引入两个依赖mysql-connector-java (mysql加载驱动)、mybatis

连接池c3p0/druid

spring 复习

基于IOCAOP的结构J2EE系统的框架

IOC 反转控制 是Spring的基础,spring工厂生产、管理bean;DI 依赖注入 拿到的对象的属性,已经被注入好相关值了,直接使用即可。

@ResponseBody可以把java对象转换成json

spring内置了很多消息转换器,当我们没有定义消息转换器时就会使用默认的消息转换器。

常用注解:

​ 声明bean的注解

​ @Component,@Service ,@Repository ,@Controller

​ 注入bean的注解

​ @Autowired(bytype);@Resource;

​ 配置类相关注解

​ @Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式

AOP

​ 把功能分为核心业务功能,和周边功能
所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
所谓的周边功能,比如性能统计,日志,事务管理等等

周边功能在Spring的面向切面编程AOP思想里,即被定义为切面

在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发
然后把切面功能和核心业务功能 “编织” 在一起,这就叫AOP

AOP注解

​ @Aspect 声明一个切面(类上)@PointCut 声明切点;@After、@Before、@Around(切点)作为参数

​ @Value 为属性注入值(属性上)

 @RunWith(SpringJUnit4ClassRunner.class)

表示这是一个Spring的测试类

@ContextConfiguration("classpath:applicationContext.xml")

定位Spring的配置文件

ssm复习

web.xml

<!-- 配置Spring的监听器,默认只加载WEB-INF目录下的applicationContext.xml配置文件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置加载类路径的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!-- 配置前端控制器:服务器启动必须加载,需要加载springmvc.xml配置文件 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置初始化参数,创建完DispatcherServlet对象,加载springmvc.xml配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 服务器启动的时候,让DispatcherServlet对象创建 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<!-- 配置解决中文乱码的过滤器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<!-- <init-param> <param-name>forceRequestEncoding</param-name> <param-value>ture</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>ture</param-value> </init-param>-->
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!--restful风格-->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

springmvc.xml

<!-- 扫描controller的注解,别的不扫描 -->
    <context:component-scan base-package="com.mgs">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <mvc:annotation-driven/>
    <!-- 配置视图解析器 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- JSP文件所在的目录 -->
        <property name="prefix" value="/WEB-INF/page/"/>
        <!-- 文件的后缀名 -->
        <property name="suffix" value=".jsp"/>
    </bean>
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/img/" mapping="/img/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>

<!-- 开启对SpringMVC注解的支持 -->
<mvc:annotation-driven/>

<!--配置拦截器-->
<mvc:interceptors>
    <!--  <bean class="cn.lzc.interceptor.CustomInterceptor"></bean>--><!--拦截所有请求-->

    <!-- <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/" /><<!–配置了mapping 这个 将不再起作用–>
        <bean class="cn.lzc.interceptor.CustomInterceptor"></bean>
    </mvc:interceptor>-->

    <!--<mvc:interceptor>-->
    <!--<mvc:mapping path="/hello" /><!–配置拦截hello结尾的–>-->
    <!--<bean class="cn.lzc.interceptor.CustomInterceptor"/>-->
    <!--</mvc:interceptor>-->

    <!--登录拦截器-->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/account/*" />
        <mvc:exclude-mapping path="/Category/*" />
        <mvc:exclude-mapping path="/user/*"/>
        <mvc:exclude-mapping path="/product/*"/>
        <bean class="com.mgs.util.mgs_mvc_interceptor.LoginInterceptor"/>
    </mvc:interceptor>
    <!--可以有多个 <mvc:interceptor>-->
</mvc:interceptors>

applicationContext.xml

<!-- 开启注解扫描,希望处理service和dao,controller不需要spring框架处理-->
<context:component-scan base-package="com.mgs">
<!-- 配置哪些注解不扫描-->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 开启spring-aop的注解识别-->
<aop:aspectj-autoproxy/>

<!--&lt;!&ndash; 配置C3P0的连接池对象 &ndash;&gt; <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///ssm?useSSL=true&amp;serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="110569"/> </bean>-->

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///mgs?useSSL=true&amp;serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="110569" />
</bean>

<!-- 配置SqlSession的工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 传入PageHelper的插件 -->
<property name="plugins">
<array>
<!-- 传入插件的对象 -->
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<props>
<prop key="dialect">mysql</prop>
<prop key="offsetAsPageNum">false</prop>
<prop key="rowBoundsWithCount">true</prop>
<prop key="reasonable">true</prop>
<prop key="pageSizeZero">true</prop>
<prop key="returnPageInfo">check</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
<!-- 配置扫描dao的包 -->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mgs.dao"/>
</bean>

<!-- 配置Spring框架声明式事务管理-->
<!-- 配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
`<tx:method name="*" rollback-for=“java.lang.Exception”/>
</tx:attributes>
</tx:advice>

aop:config
<aop:advisor advice-ref=“txAdvice”
pointcut=“execution(* com.mgs.service.impl..(…))”/></aop:config>`

\1. 首先浏览器上访问路径 localhost:8080/listCategory
\2. tomcat根据web.xml上的配置信息,拦截到了/listCategory,并将其交由DispatcherServlet处理。
\3. DispatcherServlet 根据springMVC的配置,将这次请求交由CategoryController类进行处理,所以需要进行这 个类的实例化
\4. 在实例化CategoryController的时候,注入CategoryServiceImpl。 (自动装配实现了CategoryService接口的的 实例,只有CategoryServiceImpl实现了CategoryService接口,所以就会注入CategoryServiceImpl)
\5. 在实例化CategoryServiceImpl的时候,又注入CategoryMapper
\6. 根据ApplicationContext.xml中的配置信息,将CategoryMapper和Category.xml关联起来了。
\7. 这样拿到了实例化好了的CategoryController,并调用 list 方法
\8. 在list方法中,访问CategoryService,并获取数据,并把数据放在"cs"上,接着服务端跳转到listCategory.jsp去
\9. 最后在listCategory.jsp 中显示数据

事务

​ 在Mysql中,只有当表的类型是INNODB的时候,才支持事务;spring事务回滚规则

Restful 风格

传统风格Restful风格
url methodurl method
增加/categories POST
删除/categories/123 DELETE
修改/categories/123 PUT
获取/categories/123 GET
查询/categories GET

springmvc复习

spring的一个模块,提供web层解决方案(基于mvc设计架构)

img

img

<!-- 扫描controller的注解,别的不扫描 -->
    <context:component-scan base-package="com.mgs">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>
    <mvc:annotation-driven/>
    <!-- 配置视图解析器 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- JSP文件所在的目录 -->
        <property name="prefix" value="/WEB-INF/page/"/>
        <!-- 文件的后缀名 -->
        <property name="suffix" value=".jsp"/>
    </bean>
<!-- 设置静态资源不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/>
<mvc:resources location="/img/" mapping="/img/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>

<!-- 开启对SpringMVC注解的支持 -->
<mvc:annotation-driven/>

<!--配置拦截器-->
<mvc:interceptors>
    <!--  <bean class="cn.lzc.interceptor.CustomInterceptor"></bean>--><!--拦截所有请求-->

    <!-- <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/" /><<!–配置了mapping 这个 将不再起作用–>
        <bean class="cn.lzc.interceptor.CustomInterceptor"></bean>
    </mvc:interceptor>-->

    <!--<mvc:interceptor>-->
    <!--<mvc:mapping path="/hello" /><!–配置拦截hello结尾的–>-->
    <!--<bean class="cn.lzc.interceptor.CustomInterceptor"/>-->
    <!--</mvc:interceptor>-->

    <!--登录拦截器-->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <mvc:exclude-mapping path="/account/*" />
        <mvc:exclude-mapping path="/Category/*" />
        <mvc:exclude-mapping path="/user/*"/>
        <mvc:exclude-mapping path="/product/*"/>
        <bean class="com.mgs.util.mgs_mvc_interceptor.LoginInterceptor"/>
    </mvc:interceptor>
    <!--可以有多个 <mvc:interceptor>-->
</mvc:interceptors>

在类前面加上**@Controller** 表示该类是一个控制器
在方法handleRequest 前面加上 @RequestMapping("/index") 表示路径/index会映射到该方法上

jquery复习

常见方法:val取值、html、text不包含标签

操作css:addClass ,removeClass ,toggleClass切换,css函数

**选择器: ** $(“元素id类层级”)

​ **attr()**获取一个元素的属性

事件: click(),keydown(),mousemove(),focus(),submit(),change(),

AJAX: $.get/post(

​ page,访问的页面jsp

​ {“name”:value},

​ function(result){

​ $("#checkResult").html(result);

数组操作: . e a c h ( ) , .each(), .each().unique()去除重复,$.inArray()返回元素在数组中的位置 ,如果不存在返回-1

json😒.parseJSON() 将JSON格式的字符串,转换为JSON对象;JSON.stringify

js/css复习

javascript

​ 都是放在script标签中;

声名变量: var & let ;

调试::alert(),consoe.log()

​ typeof 判断数据类型;length;

​ concat拼接字符串;substring截取一段子字符串;split;replace

​ sort对数组的内容进行排序

​ 一个 0-1 之间的随机数 : Math.random()

BOM

即 浏览器对象模型,浏览器对象包括

Window(窗口)
Navigator(浏览器)
Screen (客户端屏幕)
History(访问历史)
Location(浏览器地址)

css

**选择器:**id、元素、类

**字体:**font

**边框:**border

**内边距:**padding

**外边距:**margin

优先级:!important

**绝对/相对定位:**position/relative

浮动:float **居中:**align=“center”

linux复习

文件操作

ls   -a :列出目录下的所有文件,包括以 . 开头的隐含文件。

​   -k :以k字节的形式表示文件的大小。

​   -l :列出文件的详细信息。

pwd 显示出当前工作目录的绝对路径。

, cd ,vi/vim,wq,cp,mv,touch,mkdir,rm -rf,cat ,reboot,clear,su(切换管理员用户),whoami,ping(它通常用来测试与目标主机的连通性);kill;find-name;df(查看已挂载的文件系统);umount(卸载挂载点);exit退出脚本;

tomcat复习

.war 包 与jar 包:都是由 .class 文件及 . xml文件组成(servlrt 3.0之后支持注解,.xml可以由注解替代,故可以说完全由.class 文件组成),war 代表一个web应用程序(发布阶段),jar代表类的归档文件(开发阶段),war 部署方式:1.直接部署war到tomcat webapps目录下 2.使用数据卷将war包目录映射到tomcat 容器内部webapps目录

​ localhost:8080/user/selectOne解释;

解释tomcat接受到的请求之前先理解两个概念, http:超文本传输协议(指定了浏览器应该给服务器发送什么,以及应该得到什么响应)、dns:域名服务协议(提供域名与ip地址的转换)。接下来分析localhost:8080/user/selectOne 这个请求, localhost : 代表本机,部署到云服务器时由ip地址或者域名来替换(此时用到dns) ; 8080服务器开放的端口号:一般被隐藏(例如:mi.com 和mi.com:80都可以访问小米官网);user:代表tomcat容器内的一个应用(下面会讲到);selectOne:对应具体的servlet类

​ tomcat 主要由connector连接器和容器组成 ,有四大容器(engine 、host、context、wrapper),

List<engine>//管理域名----List<host//域名>----List<context//代表应用>----List<wrapper</*.do,wrapper对象>//存储一个servlet类的不同实例(不同用户访问同一个servlet)>----List<xxxservlet>实例.doGet(xxx)方法

Http

浏览器响应的头部信息,遵循http协议,mimeType 类型指定Content-Type ,email 的附件类型也是mime 指定,只有广泛认可的格式才会获得一个mimeType , 自定义的格式只能以application/x开头,前面大类别/后面具体种类

SpringBoot复习

@SpringBootApplication:启动动类,加载配置文件;

@RestController: controller + responsebody(将返回的对象转成json)

打包成jar——mvn install;java -jar运行jar;

创建war包——mvn clean package;

Springboot的默认视图支持是Thymeleaf;

热部署;

错误捕捉:新增加一个类GlobalExceptionHandler,用于捕捉Exception异常以及其子类。
捕捉到之后,把异常信息,发出异常的地址放进ModelAndView里,然后跳转到 errorPage.jsp

@ControllerAdvice+@ExceptionHandler(value = Exception.class``)//全局异常捕捉处理

@Mapper;

Restful风格

​ @RequestParam(value ="start", defaultValue ="0")intstart,@RequestParam(value = "size", defaultValue = "5") ``intsize)// 将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

​ form+ @PostMapping("/categories")+Category c

​ categories/${c.id} +@xxxMapping("/categories/{id}")+Category c

​ ategories/${c.id} + @GetMapping("/categories/{id}") + (@PathVariable("id")intid,Model m)

Cloud复习

父子项目

五大组件

Erueka 注册中心 :服务层被拆分成了很多的微服务,微服务的信息管理;

Feign 远程调用 :服务层被拆分成了很多的微服务,服务与服务之间用Fegin交互,集成了Ribbon实现客户端负载均衡调用;

Hystrix 融断、降级 : 处理服务的熔断防止故障扩散;融断:防止雪崩,暂停服务调用;降级:从整个系统负荷出发的,舍弃对一些非核心的接口和数据的请求,直接返回一个提前准备好的fallback(退路)错误处理信息,保证了整个系统的稳定性。

Zuul 网关 :请求和服务端端口的路由;

RabbitMQ消息队列 复习

主要应用:异步处理,流量削峰,应用解耦

erlang语言开发,使用AMQP通信协议,高并发性能好,boot默认集成;

四种常用模式:fanout广播模式、direct指定队列、topic主题模式(binding key和routing key的匹配方式来指定队列)

Nginx复习

动静分离(nginx只处理css,html)、反向代理(代理客户端)、负载均衡(by权重)、session共享

Git复习

webstrom复习

vue init webpack xxxx;

npm run dev;

vue复习

​ 最大特点:mvvn双向绑定;

​ 事件监听:v-on ; 条件语句:v-if / v-else ; v-for ;v-bind进行属性绑定; v-model 双向绑定; axios.js 就是眼下比较流行的一种 ajax 框架; vue-cli 是 vue 出来的一个脚手架,可以进行 组件式地开发;

逻辑题复习

斐波那契数列——F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*正整数)

素数(质数)——求余,2到该数的平方跟都不能整除,则为质数;

水仙花数——各位数字立方和等于该数本身:153=1的三次方+5的三次方+3的三次方;

未完待续…

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值