如何根据日期更新每个产品的不同特性的函数?

1、 用户向服务端发送一次请求,这个请求会先到前端控制器DispatcherServlet(也叫中央控制器)。

3.SqlSession实例获得Mapper对象运行Mapper映射的SQL语句完成对数据库的CRUD事务提交以及事务失败的回滚,之后关闭Session。

当一个查询发生的时候,Mybatis 会在当前会话查找是否已经有过相同的查询,有的话就直接拿缓存,不去数据库查了,线程执行完毕,缓存就被清掉了。二级缓存是进程级别的,通过在 mapper 文件中增加节点来启用,一个mapper可以含有多个会话。

#{}是预编译处理,${}是字符串替换;

Mybatis在处理${}时,就是把${}替换成变量的值;

使用#{}可以有效的防止SQL注入,提高系统安全性。

SpringBoot中有一个ControllerAdvice的注解,使用该注解表示开启了全局异常的捕获,我们只需在自定义一个方法使用ExceptionHandler注解然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理

然后在xml文件里配置拦截路径

过滤器:定义一个类实现Filter接口

这一接口含有三个过滤器必须执行的方法:

doFilter(ServletRequest, ServletResponse, FilterChain):这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的FilterChain对象提供了后续过滤器所要调用的信息。如果该过滤器是过滤器链中的最后一个过滤器,则将请求交给被请求资源。也可以直接给客户端返回响应信息。

init(FilterConfig):由Web容器来调用完成的初始化工作。它保证了在第一次doFilter()调用前由容器调用。您能获取在 web.xml 文件中指定的初始化参数。

destroy():由Web容器来调用来释放资源,doFilter()中的所有活动都被该实例终止后,调用该方法。

如果设置@Scope(“prototype”),则每次都会创建新对象,不存在线程安全问题

原理:拦截请求,将之前在服务器内存中进行 Session 创建销毁的动作,改成在 Redis 中创建。

ClassLoader即常说的类加载器,其功能是用于从Class文件加载所需的类,主要场景用于热部署、代码热替换等场景。

从java虚拟机的角度讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),由C++实现,另一种就是所有其它的加载器,是由java实现的,独立于虚拟机外部,并且全都继承自java.lang.ClassLoader。

从java开发人员来讲,类加载器还可以划分的更细致一些:

ClassLoader):这个类加载器负责将存放在\lib目录中,或者被-XbootClasspath参数所指定的路径中的,并且是虚拟机识别的(仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法直接被java程序引用,用户在编写自定义类加载器时,如果需要把加载请求委派给引导类加载器,那直接使用null代替即可。

ClassLoader):这个类加载器由sun.misc.Launcher$AppClassLoader实现。由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值,所以一般也称它为系统类加载器,它负责加载用户类路径(classpath)上指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中的默认类加载器

eureka (提供服务注册与发现功能)

ribbon(提供负载均衡功能)

Feign(整合了ribbon和Hystrix,具有负载均衡和熔断限流等功能)

Feign在ribbon的基础上进行过改进,使用起来更加方便 并且他默认集成了ribbon的负载均衡机制

Hystrix (提供了熔断限流,合并请求等功能)

Zuul (提供了智能路由的功能)

Hystrix Dashboard (提供了服务监控的功能,提供了数据监控和友好的图形化界面)

dubbo由于是二进制的传输,占用带宽会更

springCloud是http协议传输,带宽会比较,同时使用http协议一般会使用JSON报文,消耗会更大

dubbo开发难度,原因是dubbo的jar包依赖问题很多大型工程无法解决

配置Nacos监听器,监听路由配置信息的变化

添加Nacos路由配置

1、认证功能2、授权功能3、加密功能4、会话管理5、缓存支持

6、shiro 不仅仅可以使用在web中,还支持非web项目它可以工作在任何应用环境中。在集群

会话时Shiro最重要的一个好处或许就是它的会话是独立于容器的。

乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本(Version)记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。

读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

对于上面修改用户帐户信息的例子而言,假设数据库中帐户信息表中有一个version字段,当前值为1;而当前帐户余额字段(balance)为1000元。假设操作员A先更新完,操作员B后更新。

a、操作员A此时将其读出(version=1),并从其帐户余额中增加100(0)。

b、在操作员A操作的过程中,操作员B也读入此用户信息(version=1),并从其帐户余额中扣除50()。

c、操作员A完成了修改工作,将数据版本号加一(version=2),连同帐户增加后余额(balance=1100),提交至数据库更新,此时由于提交数据版本大于数据库记录当前版本,数据被更新,数据库记录version更新为2。

d、操作员B完成了操作,也将版本号加一(version=2)试图向数据库提交数据(balance=950),但此时比对数据库记录版本时发现,操作员B提交的数据版本号为2,数据库记录当前版本也为2,不满足 “提交版本必须大于记录当前版本才能执行更新 “的乐观锁策略,因此,操作员B的提交被驳回。

这样,就避免了操作员B用基于version=1的旧数据修改的结果覆盖操作员A的操作结果的可能。

总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。

总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。

从上面对两种锁的介绍,我们知道两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下(多读场景),即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适

注意:里面的数字代表你传入参数的顺序,不是特别建议使用这种方法传递参数,特别是参数个数多的时候

方式二、注解@Param传递参数

注意:在xml文件中就只能以在@Param注解中声明的参数名称获取参数

方式三、使用Map集合传递参数

方式四、使用JavaBean实体类传递参数

1 对象创建: 当应用加载, 创建spring容器时, 对象就被创建了

2 对象存活: 只要容器存在, 对象一直存活

3 对象销毁: 当应用卸载, 销毁容器时, 对象被销毁

1 对象创建: 当使用对象时, 创建新的对象实例

2 对象存活: 只要对象在使用中, 对象一直存活

3 对象销毁: 当对象长时间不用时, 被java的垃圾回收器回收

包括以下两种具体方式:

用来测试批量插入的数据和服务层:

可以发现已经实现批量插入的功能了。

通过insert标签加上foreach标签,可以实现Mybatis批量插入的功能。

导入jar包 添加Test注解即可

1.把工厂假设为一个汽车制造厂

2.首先抽象出产品的父类

4.实现一个工厂类,并写一个静态方法根据参数的不同返回不同的实例

配置类上加上@EnableAsync注解,就可以在想多线程支持的方法上加上@Async该方法就可以自持多线程了

创建一个starter项目,关于项目的命名你可以参考这里

创建一个ConfigurationProperties用于保存你的配置信息(如果你的项目不使用配置信息则可以跳过这一步,不过这种情况非常少见)

打包项目,之后在一个SpringBoot项目中引入该项目依赖,然后就可以使用该starter了

根据用户名或者用户id,结合用户的ip或者设备号,生成一个token。在请求后台,后台获取http的head中的token,校验是否合法(和数据库或者redis中记录的是否一致,在登录或者初始化的时候,存入数据库/redis) 

客户端和服务器都保存一个秘钥,每次传输都加密,服务端根据秘钥解密。

文件上传的本质是IO流的从操作;客户端:

1.必须使用post,post才能携带大数据

1.超链接下载:如果文件能被浏览器解析,点击就会打开文件,如果要下载,需要使用右键另存为,不能被浏览器解析的文件,点击就下载;

2.通过服务器流回写到浏览器下载;要设置MIME,即设置setcontentType(String mimeType);浏览器能解析的直接显示,不能解析的直接下载;

在Java领域,JBPM和Activity是两个主流的工作流系统,而Activity的出现无疑将会取代JBPM(Activity的开发者就是从Jbpm开发者出来的)。

设计流程图(各种组件,如连线、用户任务、网关)

解释:以上两个只是activiti工作流的常用包,通常会配置如spring开发的java包,还有数据库jar包等进行使用,但具体要用到什么包,这个和业务开发的逻辑有关系,也没办法进行详细说明

的,所以只需要先下载常用的两个,其余的辅助包如:日志包、spring包、数据库包、hibernate包、struts包、mybatis包等根据实际需要添加即可。

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

Kafka分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据

回滚,捕捉异常,把预处理的这条数据给删除了,数据库就没有数据了,消费方就不会有消息执行。双方数据一致

1、对于需要保存到数据库的数据,我们可以设置某条数据的某个值,比如订单号之类的,设置一个唯一索引,这样的话即使重复消费也不会生效数据

2、乐观锁,也就是我们每次插入一条数据或者更新的时候判断某个版本号是不是与预期一样,如果不是,那么就不进行操作

3、使用redis进行存储,每次操作数据的时候先去redis进行判断如果存在的话,那么这条数据就是重复消费的,然后我们可以丢弃或者做其他处理

pull一下,更新程序 同步 查看冲突代码 人工修改 保持本地最新版 提交修改 再pull一下 更新 人工合并 更新到最新版  commit提交 push

可以将excel的xlsx格式转换为易读取的csv格式进行读取

1.2 cd命令cd命令用来改变所在目录。

cd / 转到根目录中

ls命令用来查看目录的内容。

cat命令可以用来合并文件,也可以用来在屏幕上显示整个文件的内容。

分布式是指将不同的业务分布在不同的地方。分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。

而集群指的是将几台服务器集中在一起,实现同一业务,集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

这些小操作分布在不同服务器上,分布式事务需要保证这些小操作要么全部成功要么全部失败

现在的分布式事务实现方案有多种,有些已经被淘汰,如基于XA的两段式提交TCC解决方案,还有本地消息表、MQ事务消息,还有一些开源的事务中间件,如LCN、GTS。

特性:原子性,一致性,隔离性,持续性。

原子性:事物是数据库的逻辑工作单位,事物中包括的操作要么都做,要么都不做。

一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。

隔离性:一个事务的执行不能被其它事物干扰。即一个事物内部的操作及使用的数据对其它并发事物是隔离的,并发执行的各个事物之间不能互相烦扰。

持续性:也称永久性,只一个事物一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响

分布式如何保证数据一致性

当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。

模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。

3、准备对象(需要填充的数据)

1、实现了Runnable接口。run方法中,先打印一个当前系统时间,然后呢,接着执行sleep方法,休眠30秒

邮箱:用163或者腾讯邮箱的smtp服务 创建一个第三方邮件客户端的专用密码

在邮箱工具类里把专用密码 SMTP服务器的地址 和要发送的内容 以及发送对象的邮箱地址填上即可

短信 可以用阿里云的云通信服务 在控制台里的国内消息中设置一个短信模板

把模板code和个人中心的accesskey填进工具类即可

nginx是一个使用c语言开发的高性能的http服务器及反向代理服务器

反向代理方式实际上就是一台负责转发的代理 服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据

直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功

nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可

版本锁定原则:一般用在继承项目的父项目中

正常项目都是多模块的项目,如moduleA和moduleB共同依赖X这个依赖的话,那么可以将X抽取出来,同时设置其版本号,这样X依赖在升级的时候,不需要分别对moduleA和moduleB模块中的依赖X进行升级,避免太多地方(moduleC、moduleD…)引用X依赖的时候忘记升级造成jar包冲突,这也是实际项目开发中比较常见的方法。

在admin登录时,将登录时生成的token保存到vue组件。然后查询对应的角色信息,根据角色id查询role_permission表所关联的菜单权限信息,返回给vue里面控制管理系统左侧菜单栏导航的显示

后端使用自定义注解和AOP的方式实现增删改查权限的控制

可行性研究报告、需求规格说明书、项目计划、软件测试计划、概要设计说明书、详细设计说明书、编程规范、软件测试用例、软件测试报告、用户手册、安装手册、项目总结报告

传给后台的数据通过json封装起来,再用ajax将json传到后台

一般情况下数值在传给后台之前需要校验,可以在form中的onsubmit调用js方法进行校验,当js方法返回值为true时,触发action,当js方法返回值为false时,action不触发。这样处理的好处在于当用户输入不正确时,不会刷新页面,表单仍然会保留用户之前的输入

反向代理需要用到nginx

原理大体相同,但是处理的端不同,反向代理实在服务器端进行处理。首先修改hosts文件,将域名指向开发者的电脑本身,把自己伪装成服务端,再通过nginx对不同的请求进行转发,把静态资源指向开发者本地电脑的资源,将接口指向实际的服务器。

利用Session防止表单重复提交(推荐)

服务器返回表单页面时,会先生成一个subToken保存于session,并把该subToenk传给表单页面。当表单提交时会带上subToken,服务器拦截器Interceptor会拦截该请求,拦截器判断session保存的subToken和表单提交subToken是否一致。若不一致或session的subToken为空或表单未携带subToken则不通过。

首次提交表单时session的subToken与表单携带的subToken一致走正常流程,然后拦截器内会删除session保存的subToken。当再次提交表单时由于session的subToken为空则不通过。从而实现了防止表单重复提交。

生命周期:从开始创建初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。

v-if可以实现条件渲染,Vue会根据表达式的值的真假条件来渲染元素。

用v-for指令根据遍历数组来进行渲染

v-bind用来动态的绑定一个或者多个特性

3 vue的双向绑定如何实现?

vue如何实现自定义事件

跳转到指定url路径,并想history栈中添加一个记录,点击后退会返回到上一个页面

跳转到指定url路径,但是history栈中不会有记录,点击返回会跳转到上上个页面 (就是直接替换了当前页面)

向前或者向后跳转n个页面,n可为正整数或负整数

1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。

  2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。

SimpleModal是一个轻量级的jQuery插件,它提供了一个强大的界面模态对话框发展。

SimpleModal提供2个简单的方法来调用一个模式对话框。

(1)作为一个串连的jQuery函数,你可以调用一个jQuery元素modal()函数使用该元素的内容将显示一个模式对话框。

(2)作为一个独立的功能,可以通过一个jQuery对象,一个DOM元素,或者一个普通的字符串(可以包含HTML)创建一个模态对话框

用document获取输入框的value可以判断是否为空或者是否为数字

其他类型的校验 比如手机号 邮箱之类的可以用正则表达式校验

disabled属性可以作用于所有的表单元素。

readonly只对可以输入的表单元素有效

的标签内只要有几行就要写几个

在th或者td中设置rowspan属性,用于合并两行的同一列单元格

将字符串转换为Json对象

首先先遍历所有的节点数据,生成id 和parent_id的关系,然后遍历id 和parent_id的关系,因此将子节点数据放入children 这个集合当中。

通过js遍历数据对象,拼接成dom字符串,插入到html中

情况1:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,这里需要说明的是在js的严格版中this指向的不是window,但是我们这里不探讨严格版的问题,你想了解可以自行上网查找。

情况2:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象。

情况3:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象

虽然cookie可以存储一些数据,但是仍然存储下面一些缺点

  (1)cookie需要在客户端和服务器端之间来回传送,会浪费不必要的资源

  (2)cookie的存储大小有限制,对于每个域,一般只能设置20个cookie,每个cookie大小不能超过4KB

  (3)cookie的安全性,cookie因为保存在客户端中,其中包含的任何数据都可以被他人访问,cookie安全性比较低

由于sessionStorage对象是Storage的一个实例,所以存储数据时可以使用setItem()或者直接设置新的属性来存储数据

当我们要获取某个数据的时候,可以使用getItem来获取数据

页面自动刷新:把如下代码加入

HTTP无状态协议是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

1、通过Cookies保存状态信息

通过Cookies,服务器就可以清楚的知道请求2和请求1来自同一个客户端。

2、通过Session保存状态信息

Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当 程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。

服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。

当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。

2、使用URL回写来实现

URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。如果直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。

首先是重载,重载就是在同一个类当中有多个名称相同方法,但各个相同方法的参数列表不同(无关返回值类型)。如下,在test3中三个方法名相同的add方法,第一个是两个int类型的书相加,第二个是三个int相加,第三个是两个float相加,他们的参数个数不同或类型不同就构成了重载。

重写则发生在不同的类当中,并且两者要有继承关系,重写是方法名字和参数的列表是要完全一致的,重写的意义在于父类的方法已经不能满足时,子类重写为自己需要的。如下,在父类Test3中num方法是想做两数的加法运算,而在子类Test4中我想做两数的减法运算,则继承的num方法不能满足,则重写为test4中的num方法进行减法运算

1、按值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。简单来说就是直接复制了一份数据过去,因为是直接复制,所以这种方式在传递时如果数据量非常大的话,运行效率自然就变低了

2、按引用传递:引用传递其实就弥补了上面说的不足,如果每次传参数的时候都复制一份的话,如果这个参数占用的内存空间太大的话,运行效率会很底下,所以引用传递就是直接把内存地址传过去,也就是说引用传递时,操作的其实都是源数据

}
  1. --Oracle数据库中的表备份: --备份语句:在备份之后就可以将这张表的所有数据源删除了,但是之后有人对这张表的数据进行操作,但是在操作完成之后要记得将数据表恢复 CREATE TABLE DZH ...

}

我要回帖

更多关于 一元函数常见的几种特性 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信