BigInteger BigDecimal
#是处理预编译操作的,防止sql注入,配置参数要用#,不用 。 因 为 。因为 。因为不安全,容易被sql注入。
自己可以写代码用#
主 要 是 处 理 字 符 串 操 作 , 主要是处理字符串操作, 主要是处理字符串操作,配置参数后面加上1=1永真条件试一试
mysql 3306 oracle 1521 mongodb 27017 redis 6379 zookeeper 2181 tomcat 8080 http 80 svn 3690 https 443 sqlserver 1433
fixedThreadPool 定长线程池
SingleThreadPool 单例线程池
CachedThreadPool 缓存线程池
ScheduledThreadPool
bean注入方式有三种 :接口注入 Setter注入 构造器注入
编写一个工具类 获取getClass(),然后调用getMethods(),得到返回值类型,得到参数类型,循环输出!
实现一个自己定义的接口
RandomLoadBalance:按权重随机调用,这种方式是dubbo默认的负载均衡策略
RoundRobinLoadBalance:轮询,按公约后的权重设置轮询比率
LeastActiveLoadBalance:最少活跃次数
ConsistentHashLoadBalance:一致性hash
1、dubbo 协议 (默认)
2、rmi 协议
3、hessian 协议
4、http 协议
5、webservice 协议
6、thrift 协议
7、memcached 协议
8、redis 协议
9、rest ( 就是 RestFull)
脏读,幻读,不可重复读,SERLALIZABLE
PROPAGATION_MANDATORY 表示该方法必须运行在一个事务中。如果当前没有事务正在发生,将抛出一个异常
PROPAGATION_NESTED 表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。
PROPAGATION_NEVER 表示当前的方法不应该在一个事务中运行。如果一个事务正在进行,则会抛出一个异常。
PROPAGATION_NOT_SUPPORTED 表示该方法不应该在一个事务中运行。如果一个现有事务正在进行中,它将在该方法的运行期间被挂起。
PROPAGATION_SUPPORTS 表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。
PROPAGATION_REQUIRES_NEW 表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务在运行的话,则将在这个方法运行期间被挂起。
PROPAGATION_REQUIRES 表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。
grep -o hello test.log | wc -1
rz 弹出对话框 sz 文件名
设有两机,均为局域网,两机可相互通信无问题,中间无防火墙。
两机IP分别为:A:192.168.1.240 B:192.168.1.102
假设A,B机的SSH都允许root登录
设要把 A上的 /root/abc.zip 传到 B机并放到/abc目录,可以在A机上用命令
scp /root/abc.zip [email protected]:/abc/
若 SSH端口不是默认的22,比如,是端口1234 则加-P参数:
scp -P 1234 /root/abc.zip [email protected]:/abc/
也可以在B机上用命令:
scp [email protected]:/root/abc.zip /abc/
一开始分了两个组 然后他有扩容交给了运维人员
就是单点登录的实现说一说
增加硬盘,做镜像。让出错的概率降低。网卡与网线的单点问题。系统里面最容易物理损坏的就是网线,
网卡绑定(NIC bonding)是一个很简单、很通用的办法,建议你配置多个网卡。SSH服务器和Telnet
服务器共存。毕竟SSH和Telnet,都不是百分之百靠谱的事;IDC机房的单点。由于中国特色的“南北
互通”,所以选择IDC机房的时候,一定要有冗余。靠谱的DNS解析。
修改JVM的参数
SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。
特点:让文件配置变的相当简单、让应用部署变的简单(SpringBoot内置服务器并装备启动类代码),可以快速开启一个Web容器进行开发。
(1)一个简单的SpringBoot工程是不需要在pom.xml手动添加什么配置的,如果与其他技术合用 比如postMan(文档在线自动生成、开发功能测试的一套工具)、Swagger(文档在线自动生成、开发功能测试的一套工具),则需要在pom.xml中添加依赖,由程序自动加载依赖jar包等配置文件。
(2)我们之前在利用SSM或者SSH开发的时候,在resources中储存各种对应框架的配置文件,而现在我们只需要一个配置文件即可,配置内容也大体有 服务器端口号、数据库连接的地址、用户名、密码。这样,虽然简单 但在一定问题上而言,这也是极不安全的,将所有配置,放在一个文件里,是很危险的,但对于一般项目而言并不会有太大影响。
(3)在SpringBoot创建时会自动创建Bootdemo1Application启动类,代表着本工程项目和服务器的启动加载,在springBoot中是内含服务器的,所以不需手动配置Tomact,但注意端口号冲突问题。
通过注解,需要在pom.xml中添加依赖,由程序自动加载依赖jar包等配置文件。
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的
如果在jsp页面中,我们使用EL表达式 k e y 就 可 以 拿 到 值 了 如 果 在 h t m l 5 中 , 我 们 需 要 这 样 写 [ [ {key}就可以拿到值了 如果在html5中,我们需要这样写[[ key就可以拿到值了如果在html5中,我们需要这样写[[{key}]],经过实际验证是ok
sql注入是一种注入攻击,可以执行恶意sql语句。它通过将任意sql代码插入数据库查询,使攻击者能够完全控制web应用程序后面的数据库服务器。攻击者可以使用sql注入漏洞绕过应用程序安全措施,绕过网页或web应用程序的身份验证和授权,并检索整个sql数据库的内容,还可以使用sql注入来添加,修改和删除数据库中的记录
不要使用动态注入
不要将敏感数据保留在纯文本中
限制数据库权限和特权
避免直接向用户显示数据库错误
对访问数据库的Web应用程序使用Web应用程序防火墙(WAF)
定期测试与数据库交互的Web应用程序
将数据库更新为最新的可用修补程序
总结:SQL注入是一种流行的攻击攻击方法,但是通过采取适当的预防措施,例如确保数据加密,保护和测试Web应用程序,以及您是最新的补丁程序,您可以采取有意义的步骤来保持您的数据安全。
java.util.concurrent 包下的几个类和接口:
Executor 接口 > ExecutorService 接口 > ScheduledExecutorService 接口
ThreadPoolExecutor 类,实现了 ExecutorService 接口(意味着同时也实现Executor 接口)。一般使用 Executors 工厂方法中提供的几个线程池。
ScheduledThreadPoolExecutor 类,实现了 ScheduledExecutorService 接口(同上)。用于定期或延迟执行命令。其中,Executors 方法也提供了对应的线程池。
Executors 类 提供了几个工厂方法实现,用于创建 ExecutorService、 ScheduledExecutorService 等接口的实现。
坤是啥?
线程池是用来方便创建多个线程的一个工具,当需要创建大量线程的时候,用Thread来创建线程已经不合适了,这时就可以使用线程池,通过线程池来控制创建线程。线程池的顶级接口是Executor
iterable
hashset集合无法得到里面的第n个元素。
PS:因为hashset集合是无序集合,集合元素顺序不固定,所以无法指定获取第n个元素。
HashSet 集合:
HashSet 类是一个实现 ICollection 接口和 ICollection 泛型接口的 set 集合。从 .NET Framework 4开始,HashSet 类实现了 ISet 类。
HashSet 集合类型:
UnionWith:并集或 Set 加法
IntersectWith:交集
ExceptWith:Set 减法
SymmetricExceptWith:余集
menu 菜单表
id(主键)
menu_name(菜单名)
parent_menu_id(父菜单id)
level(菜单级别:0,一级菜单,1,二级菜单……可以无限级)
role 角色表
id(主键)
role_name(角色名)
role_menu 角色关联菜单表
id(主键),
role_id(角色id),
menu_id(菜单id)
四.user 用户表
id,
user_name
user_role用户角色表
id,
user_id(用户id),
role_id(角色id)
@aspect 定义切面
@pointcut 定义切点
@before 标注Before Advice定义所在的方法
@afterreturning 标注After Returning Advice定义所在的方法
@afterthrowing 标注After Throwing Advice定义所在的方法
@after 标注 After(Finally) Advice定义所在的方法
@around 标注Around Advice定义所在的方法
我们如何在定义切点(Pointcut)的时候指定一类Joinpoint呢?有两种方式 简单的方法名指定以及正则表达式两种方式。
常用的@AspectJ形式Pointcut表达式的标志符:
mvn install -DskipTests = true
mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false
mvn -U dependency:tree -Dverbose
dependency: tree是检查版本冲突的
enforcer:enforce是用来检查重复类的
简单地用 dependency:tree往往并不能查看到所有的传递依赖。不过如果你真的想要看所有的,必须得加一个 -Dverbose参数,这时就必定是最全的了。
全是全了,但显示出来的东西太多有时候会很烦,加上 Dincludes或者 Dexcludes,就会包含或者排除你指定的依赖了, dependency:tree就会帮你过滤出来:比如:
mvn dependency:tree -Dverbose -Dincludes=asm:asm 就会出来asm依赖包的分析信息。
a.手工合并SVN冲突文件(检查和修改文件中的冲突标志)。
b.用一个临时文件(三个中的一个)覆盖你的工作文件。
c.运行svnrevert来放弃所有的修改。
一旦解决了你的冲突,需要通过命令svnresolved让subversion知道并删除三个临时文件。这时才可以提交。
A、放弃自己的更新,使用svn revert(回滚),然后提交。在这种方式下不需要使用svn resolved(解决)
B、放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行resolved filename并提交(选择文件—右键—解决)。
C、手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行resolved filename来解除冲突,最后提交。
分布式框架系统定理: C —— 数据一致性 A —— 服务可用性 P —— 服务对网络分区故障的容错性,分布式框架很难都满足,一般符合其中两者;包括dubbo在内的其它使用zookeeper的分布式框架是满足CP,因为当客户端发送请求时,集群正在进行master选举或者半数以上的机器宕掉,服务可用性就很难做到;而对于持续集成,快速演化微服务来说,可用性就显得尤为重要,spring cloud由此诞生
分布式系统最大的特点是可扩展性,它能够适应需求变化而扩展。企业级应用需求经常随时间而不断变化,这也对企业级应用平台提出了很高的要求。企业级应用平台必须要能适应需求的变化,即具有可扩展性。比如移动互联网2C应用,随着互联网企业的业务规模不断增大,业务变得越来越复杂,并发用户请求越来越多,要处理的数据也越来越多,这个时候企业级应用平台必须能够适应这些变化,支持高并发访问和海量数据处理。分布式系统有良好的可扩展性,可以通过增加服务器数量来增强分布式系统整体的处理能力,以应对企业的业务增长带来的计算需求。
分布式系统的核心理念是让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。分布式系统由独立的服务器通过网络松散耦合组成的。每个服务器都是一台独立的PC机,服务器之间通过内部网络连接,内部网络速度一般比较快。因为分布式集群里的服务器是通过内部网络松散耦合,各节点之间的通讯有一定的网络开销,因此分布式系统在设计上尽可能减少节点间通讯。此外,因为网络传输瓶颈,单个节点的性能高低对分布式系统整体性能影响不大。比如,对分布式应用来说,采用不同编程语言开发带来的单个应用服务的性能差异,跟网络开销比起来都可以忽略不计。因此,分布式系统每个节点一般不采用高性能的服务器,而是性能相对一般的普通PC服务器。提升分布式系统的整体性能是要通过横向扩展(增加更多的服务器),而不是纵向扩展(提升每个节点的服务器性能)。
怎么用减少线程创建的次数?
首先线程是CPU调用,cpu掉高数据量,存储量达,CPU占用量特别高,创建线程池不让他重复创建线程池
Activemq有两种通信方式,点到点形式和发布订阅模式。
如果是点到点模式的话,如果消息发送不成功此消息默认会保存到activemq服务端直到有消费者将其消费,所以此时消息是不会丢失的。
1.Lambda表达式 2.函数式接口 3.方法引用和构造器调用 4.Stream API 5.接口中的默认方法和静态方法 6.新时间日期API
mybatis提供了缓存机制减轻数据库压力,提高数据库性能
mybatis的缓存分为两级:一级缓存、二级缓存
一级缓存是SqlSession级别的缓存,缓存的数据只在SqlSession内有效
二级缓存是mapper级别的缓存,同一个namespace公用这一个缓存,所以对SqlSession是共享的
a)服务发现——Netflix Eureka
b)客服端负载均衡——Netflix Ribbon
c)断路器——Netflix Hystrix 三种状态
d)服务网关——Netflix Zuul
e)分布式配置——Spring Cloud Config
a)先比较字符串长度,如果字符串长度不相等就返回false,如果相等就会把字符串转换成数组,一个一个比较
如何会导致内存溢出?内存溢出报的异常?举个场景?
a)当一直压栈且没有出口时,会导致内存溢出
b)场景:比如说递归没有出口