- 博客(143)
- 资源 (31)
- 收藏
- 关注
原创 内存溢出解决方案
什么是内存溢出JVM运行过程中,程序不断的申请内存空间用于保存运行时数据,当程序申请的内存空间系统无法满足时,就会抛出内存溢出错误。内存溢出发生的区域以及相应的解决方案都不相同,下面我们逐一分析内存溢出类型及解决方案。OutOfMemoryError与StackOverflowErrorJVM内存溢出分为两种情况,OutOfMemoryError和StackOverflowError。OutOfMemoryError是在程序无法申请到足够的内存的时候抛出的异常。StackOverflowErr
2022-04-09 16:15:01
914
原创 常见系统安全漏洞及解决方案
一、SQL注入漏洞漏洞说明SQL注入攻击是Web安全领域中一种最为常见的攻击方式,其本质是将用户输入的数据当做SQL语句代码一部分执行。这些攻击通常是发生在将不可信的数据作为命令或查询语句的一部分,拼接到程序代码中,作为可执行程序的一部分指令执行,从而执行了计划外的命令,或访问了未被授权的数据。要解决注入攻击,必须遵循 “数据与代码分离”的基本原则。解决方案1.对SQL调用,要求所有的SQL语句及存储过程的执行,都使用预编译语句绑定变量,禁止将参数通过字符串拼装的方式组合到SQL语句中。2.变
2022-04-09 15:42:22
6334
原创 JVM参数调优
一、HotSpot JVM 提供了三类参数现在的JVM运行Java程序(和其它的兼容性语言)时在高效性和稳定性方面做的非常出色。例如:自适应内存管理、垃圾收集、及时编译、动态类加载、锁优化等。虽然有了这种程度的自动化(或者说有这么多自动化),但是JVM仍然提供了足够多的外部监控和手动调优工具(允许命令行参数可以在JVM启动时传入到JVM中)。在有错误或低性能的情况下,JVM必须能够让调试,JVM提供了几百个这样的参数,所以如果没有这方面的知识很容易迷失。1)第一类包括了标准参数。顾名思义,标准参数中
2022-04-05 14:56:58
2976
原创 JVM内存溢出解决方案
1. Java 堆空间发生频率:5颗星造成原因无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用,对象无法被 GC 回收 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用,有时 finalizer 线程的处理能力无法跟上结束队列的增长解决方案使用 -Xmx 增加堆大小 修复应用程序中的内存泄漏2. GC 开销超过限制发生频率:5颗星造成原因Java 进程98%的
2022-04-05 14:51:23
436
转载 JVM调优参数、方法、工具以及案例总结
垃圾回收有关参数参数部分,这儿只是做一个总结,更详细更新的内容请参考Oracle官网:JVM的命令行参数参考处理器组合参数关于JVM垃圾处理器区别,参考:JVM调优之垃圾定位、垃圾回收算法、垃圾处理器对比-XX:+UseSerialGC = Serial New (DefNew) + Serial Old适用于小型程序。默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器-XX:+UseParNewGC = ParNew + SerialOld这个组合已
2022-04-05 14:41:45
412
原创 数据库之互联网常用分库分表方案
一、数据库瓶颈1、IO瓶颈2、CPU瓶颈二、分库分表1、水平分库2、水平分表3、垂直分库4、垂直分表三、分库分表工具四、分库分表步骤五、分库分表问题1、非partition key的查询问题(水平分库分表,拆分策略为常用的hash法)2、非partition key跨库跨表分页查询问题(水平分库分表,拆分策略为常用的hash法)3、扩容问题(水平分库分表,拆分策略为常用的hash法)六、分库分表总结七、分库分表示例一、数据库瓶颈↑不管是
2022-04-05 13:55:59
202
原创 Java中死锁系列问题及其解决方案
1、简介在遇到线程安全问题的时候,我们会使用加锁机制来确保线程安全,但如果过度地使用加锁,则可能导致锁顺序死锁(Lock-Ordering Deadlock)。或者有的场景我们使用线程池和信号量来限制资源的使用,但这些被限制的行为可能会导致资源死锁(Resource DeadLock)。这是来自Java并发必读佳作 Java Concurrency in Practice 关于活跃性危险中的描述。 我们知道Java应用程序不像数据库服务器,能够检测一组事务中死锁的发生,进而选择一个事务去执行;在Java
2022-04-05 13:43:47
3200
1
原创 数据库与REDIS缓存数据一致性解决方案
数据库与缓存读写模式策略写完数据库后是否需要马上更新缓存还是直接删除缓存?(1)、如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以马上更新缓存,但是如果对于那种写数据频繁而读数据少的场景并不合适这种解决方案,因为也许还没有查询就被删除或修改了,这样会浪费时间和资源(2)、如果写数据库的值与更新缓存的值不一致,写入缓存中的数据需要经过几个表的关联计算后得到的结果插入缓存中,那就没有必要马上更新缓存,只有删除缓存即可,等到查询的时候在去把计算后得到的结果插入到缓存中即可。所以一
2022-04-05 13:32:06
4785
1
原创 分布式事务解决方案
简述分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。解决方案在分布式系统中,要实现分布式事务,无外乎那几种解决方案。一、两阶段提交(2PC)两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。1. 运行过程1.1 准备阶段协调者询问参与者事务是否执行成功,参与者发回事务执行结果。
2022-04-03 18:05:52
282
原创 【高并发解决方案】如何设计一个秒杀系统
什么是秒杀秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。秒杀系统场景特点秒杀时大量用户会在同一时间同时进行抢购,网站瞬时访问流量激增。 秒杀一般是访问请求数量远远大于库存数量,只有少部分用户能够秒杀成功。 秒杀业务流程比较简单,一般就是下订单减库存。秒杀架构设计理念限流:鉴于只有少部分用.
2022-04-03 17:39:11
245
原创 高并发解决方案
1.原因由于系统都是连接数据库的,但是一般最多数据库每秒只能支撑几千的并非,如果业务量激增,会导致系统宕机;因此需要从一下几点入手设计· 系统拆分· 缓存· MQ· 分库分表· 读写分离· 搜索2.系统拆分将一个系统进行功能拆分,如现在流行的微服务,每个服务连接的数据库分开,分开部署。这样可以将压力进行拆分,缓解因为网络和数据库导致的高并发3.缓存大部分场景下,都是查询多余插入更新,也就是读多写少。因此设计时对常用的查询内容必须进行缓存,查询时先查缓存,再查数据库
2022-04-03 17:36:10
1540
转载 Redis实现分布式锁
结一下redis实现分布式锁的两种机制自旋锁和排他锁鉴于实现锁的方式不同,那么这里使用策略模式来组织代码一、自旋锁分布式锁抽象策略接口 package com.srr.lock; /** * @Description 分布式锁的接口 */ abstract public interface DistributedLock { /** * 获取锁 */ bool...
2020-12-30 11:11:25
485
转载 三种实现分布式锁的方式
一、为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图:上图可以看到,变量A存在JVM1、JVM2、JVM3三个JVM内存中(这个变
2020-12-01 16:26:07
179
原创 wsimport生成Java客户端
客户端:在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,然后用这些类文件,就可以像调用本地的类一样调用WebService提供的方。该工具可以用于非Java的服务器,如:用C#编写的WebService,通过wsimport则生成Java的客户端实现。在命令提示符中使用如下命令:wsimport -keep -p com.demo.client...
2019-12-07 23:39:56
379
转载 web开源框架大汇总
Struts 项目简介信息 Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极
2016-04-19 22:46:27
19605
转载 JAVA程序性能优化
一、避免在循环条件中使用复杂表达式在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。 例子: import java.util.vector;class cel { void method (vector vector) { for (int i = 0; i < vector
2016-04-10 12:50:48
1811
转载 数据库查询优化方案
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select
2015-09-13 01:04:17
870
转载 JAVA集合类详解
集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMap图解: 还有一张下载来的:Collection接口 Collection是最基本的集合接口,一个Collection代表一组
2015-07-12 11:16:26
1208
转载 SOCKET,TCP/UDP,HTTP,FTP
SOCKET,TCP/UDP,HTTP,FTP(一)TCP/UDP,SOCKET,HTTP,FTP简析TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层:网络层:IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议传输层:TCP协议与UDP协议应用层:FTP、HTTP、TELNET、SMTP、DNS等协议HTTP是应用层协议,其传输都是被
2015-07-04 18:59:56
956
转载 InnoDB和MyISAM区别
MySQL作为当前最为流行的免费数据库服务引擎,已经风靡了很长一段时间,不过也许也有人对于MySQL的内部环境不很了解,尤其那些针对并发性处理的机制。今天,我们先了解一下MySQL中数据表的分类,以及它们的一些简单性质。 截至目前,MySQL一共向用户提供了包括DBD、HEAP、ISAM、MERGE、MyIAS、InnoDB以及Gemeni这7种表。其中DBD、InnoDB属于事务安全类表,而
2014-01-09 10:40:03
1038
转载 Java中实现文件上传下载的三种解决方案
第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null; String fileAddre="/numUp"; try { InputStream stream = file.getInputStream();
2013-07-10 11:08:09
118595
转载 linux下如何导入导出MySQL数据库
一、导出:用mysqldump命令行命令格式mysqldump -u 用户名 -p 数据库名 > 数据库名.sql范例:mysqldump -u root -p abc > abc.sql(导出数据库abc到abc.sql文件)提示输入密码时,输入该数据库用户名的密码。二、导入:用mysql命令行命令格式mysql -u 用户名 -p 数据库名
2013-07-03 17:37:41
23272
原创 MySQL存储过程的基本函数
(1).字符串类CHARSET(str) //返回字串字符集CONCAT (string2 [,... ]) //连接字串INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0LCASE (string2 ) //转换成小写LEFT (string2 ,length ) //从string2中的左边起
2013-07-01 13:31:21
1160
转载 oracle日期时间函数大全
一、常用日期函数1. 日期和字符转换函数用法(to_date,to_char)select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串 select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年
2013-06-28 15:18:46
1007
转载 oracle函数大全
1.ASCII返回与指定的字符对应的十进制数;SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual; A A ZERO SPACE--------- --------- --------- ---------
2013-06-28 14:47:38
843
转载 mysql日期函数大全
DAYOFWEEK(date) 返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)mysql> select DAYOFWEEK('1998-02-03'); -> 3 WEEKDAY(date) 返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。 mysql> select WEEKDAY('1997-10-04
2013-06-28 14:08:31
1195
转载 MySQL函数大全及用法示例
字符串函数ASCII(str) 返回字符串str的第一个字符的ASCII值(str是空串时返回0) mysql> select ASCII('2'); -> 50 mysql> select ASCII(2); -> 50 mysql> select ASCII('dete'); -> 100 ORD(str) 如果字符串str句首是单
2013-06-28 13:57:45
3412
转载 Java反射机制详解
Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。 Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。Jav
2013-06-24 11:11:49
2718
转载 Tomcat配置文件web.xml中URL匹配规则
一个URL Pattern中的每个字符必须和URL path中的严格一致。由两个例外,在一个Pattern末尾,/* 匹配从此点以后的任何字符;*.扩展名 则匹配任何有此扩展名的文件名。例如:服务器 example.com 的路径 /examples下的匹配模式/status/* 可有如下匹配:http ://example.com/examples/status/synopsis
2013-06-20 16:20:38
7930
转载 JavaScript实现子网掩码合法性验证
一、原理 子网掩码的合法性简单来讲也就是子网掩码就类似这样一串数字,前面一段是连续的1,类似“111111111”,后面一段是连续的0,类似“00000”,这样合法的样子是“11111111000000000”,总共是32位。 一个合法的子网掩码要满足如下条件: 1、是合法的IP地址 2、二进制码要相邻,即形如111...11000...0的形式 3、与I
2013-06-19 23:18:33
5936
转载 WEB前端浏览器不兼容导致的问题及解决方案
1. HTML对象获取问题FireFox:document.getElementById("idName");ie:document.idname或者document.getElementById("idName").解决办法:统一使用document.getElementById("idName");2. const问题说明:Firefox下,可以使用const关键字或var
2013-06-19 22:23:29
9139
转载 Hibernate数据缓存
(一)hibernate数据缓存策略 缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的拷贝,位于数据库与数据访问层之间。对于查询操作相当频繁的系统(论坛,新闻发布等),良好的缓存机制显得尤为重要。 ORM在进行数据读取时,首先在缓存中查询,避免了数据库调用的性能开销。ORM的数据缓存应包含下面几个层次:1)事务级缓存 2)应用级缓
2013-06-18 11:34:31
1275
原创 Linux下重启MYSQL的命令
如何启动/停止/重启MySQL一、启动方式1、使用 service 启动:service mysqld start2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start3、使用 safe_mysqld 启动:safe_mysqld&二、停止1、使用 service 启动:s
2013-06-18 10:17:57
6644
转载 如何通过HTTPS(SSL加密)方式访问webservice
web service在企业应用中常常被用作不同系统之间的接口方式。但是如果没有任何安全机制的话,显然是难以委以重任的。比较直接的web service加密方式就是使用https方式(SSL)方式加密连接,并且只允许持有信任证书的客户端连接,即SSL双向认证。这样就保证了连接来源的可信度以及数据在传输过程中没有被窃取或篡改。而且我认为这样做的开发量最小。具体方法如下 本文适合对SSL加密
2013-05-31 11:15:30
28445
转载 Java调用使用SSL/HTTPS协议来传输的axis webservice服务
使用SSL/HTTPS协议来传输 Web服务也可以使用SSL作为传输协议。虽然JAX-RPC并没有强制规定是否使用SSL协议,但在tomcat 下使用HTTPS协议。 1、使用JDK自带的工具创建密匙库和信任库。 1)通过使用以下的命令来创建服务器端的密匙库: keytool -genkey -alias Server -keystore server.keystore -
2013-05-25 08:18:15
8296
3
原创 Linux操作系统常用命令
1、查找tomcat目录:whereis tomcat2、列出tomcat6目录下面的文件:ls /usr/share/tomcat6/3、以最高权限copy war_sql下面的war包至webapps目录下:sudo cp /home/yzhang/war_sql/*.* /usr/share/tomcat6/webapps/4、强制删除RMS文件夹:rm -
2013-05-23 15:26:05
1582
原创 Linux查看端口、进程情况及kill进程
查看端口:ps -aux | grep tomcat发现并没有8080端口的Tomcat进程。使用命令:netstat –apn查看所有的进程和端口使用情况。发现下面的进程列表,其中最后一栏是PID/Program name 发现8080端口被PID为9658的Java进程占用。进一步使用命令:ps -aux | grep java,或者直接
2013-05-21 17:27:45
10559
原创 java转换字符串的编码
package com.Alex.base;import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */ public static final String
2013-05-18 11:35:23
6592
原创 Java新建目录、新建文件、删除文件、删除文件夹、删除文件夹里面的所有文件、复制整个文件夹内容
package com.zzh.base;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.InputStream;import java.io.PrintWriter;
2013-05-13 22:23:36
6651
原创 java 一个线程执行加,一个线程执行减
package com.base;/** * * @author zzh * 一个线程执行加,一个线程执行减 */class MyThreadA implements Runnable{ private boolean flag=true; public void run(){ int i=0; while(this.flag)
2013-05-07 10:37:31
1406
webservice&client;
2012-11-28
oracle开发必备手册
2012-07-14
家校通系统解决方案
2012-07-13
oracle安装手册以及PLSQL_Developer安装使用手册
2012-07-13
JQuery验证以及使用方法
2012-07-07
dtree、JavaScript编写成的简单的树形菜单组件
2012-06-30
Spring3 MVC
2012-06-30
myeclipse svn 修改用户名和密码
2012-06-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人