自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

个人专栏

交流学习!批评指正!

  • 博客(51)
  • 资源 (2)
  • 问答 (2)
  • 收藏
  • 关注

原创 JAVA多线程和并发基础问答

Java多线程问题1. 进程和线程之间有什么不同?进程:一个独立的运行环境,可看作一个程序或者一个应用。线程:在进程中执行的一个任务。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源。2. 多线程编程的好处是什么?多线程并发执行以提高程序的效率,提高CPU使用率,节省空间。由于多个线程共享堆内存(heap memory),因此创建多个线程去执行一些任务会比创建多个进程更好。3. 用户线程和守护线程有什么区别?用户线程:我们在Java程

2020-07-30 16:09:42 185

原创 Java并发编程:线程间协作

在前面讲了很多关于同步的问题,现在讲线程之间的协作。经典的生产者-消费者模型:当队列满时,生产者等待队列有空间才能继续往里面放入商品,在等待的期间,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待消费者消费了商品,然后消费者通知生产者队列有空间了。同样地,当队列空时,消费者也必须等待,等待生产者通知它队列中有商品了。这种

2020-07-29 14:34:28 168

原创 Java并发编程:Timer和TimerTask

Timer是一个调度器,TimerTask是调度器中的任务。例如:Timer timer = new Timer();timer.schedule(new TimerTask() { public void run() { System.out.println("abc"); }}, 20000 , 1000);20s后开始执行,每秒执行一次。1.常用方法publicvoidschedule(TimerTask task,..

2020-07-29 11:04:21 167

原创 Java并发编程:获取线程执行结果

创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。Java中提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。一.Callable与RunnableRunnable,是一个接口,只声明了一个run()方法,返回void类型。Callable,是一个接口,只声明了一

2020-07-28 16:04:55 629

原创 Java并发编程:辅助类

一.CountDownLatch用法实现类似计数器的功能。CountDownLatch类只提供了一个构造器:public CountDownLatch(int count) { }; //参数count为计数值主要的方法:public void await() throws InterruptedException { }; //调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行public boolean await(long timeout,

2020-07-28 15:19:43 127

原创 Java并发编程:线程池

如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。所以,在Java中可以通过线程池:使得线程可以复用,就是执行完一个任务,并不被销毁,而是继续执行其他的任务。一.ThreadPoolExecutor类线程池中最核心的一个类。在ThreadPoolExecutor类中提供了四个构造方法:public class ThreadPoolExecutor extends AbstractExecutorS

2020-07-28 13:15:15 82

原创 Java并发编程:阻塞队列

另外一类容器:阻塞队列。非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)一.几种主要的阻塞队列在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个:  ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。并且可以指定公平性与非公平性,默认情况下为非公平的,即不保证等待时间最长的队列最优先能够访问队列。(有界

2020-07-27 17:36:59 101

原创 Java并发编程:并发容器

始针对多线程并发访问,提供了并发性能较好的并发容器,引入了java.util.concurrent包。与Vector和Hashtable、Collections.synchronizedXxx()同步容器等相比,concurrent中引入的并发容器主要解决了两个问题:1)根据具体场景进行设计,尽量避免synchronized,提供并发性。2)定义了一些并发安全的复合操作,并且保证并发环境下的迭代操作不会出错。面是对并发容器的简单介绍:  ConcurrentHashMap代替同步的Map(

2020-07-27 16:01:38 73

原创 Java并发编程:同步容器

在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。在Java中,同步容器主要包括2类:  1)Vector、Stack、HashTable Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是Vector中的方法都是synchronized方法,即进行了同步措施。  Stack也是一个同步容器,它的方法也用synchronized进行了同步,它实际上是继承于Vector类。  HashTable实现了...

2020-07-27 15:19:43 146

原创 Java并发编程:深入剖析ThreadLocal

ThreadLocal,线程本地变量,或者线程本地存储。ThreadLocal为变量在每个线程中都创建了一个副本,每个线程可以访问自己内部的副本变量。ThreadLocal是如何为每个线程创建变量的副本的:  首先,在每个线程Thread内部有一个ThreadLocal.ThreadLocalMap类型的成员变量threadLocals,这个threadLocals就是用来存储实际的变量副本的,键值为当前ThreadLocal变量,value为变量副本(即T类型的变量)。  初始时,在Threa

2020-07-27 14:46:27 116

原创 Java并发编程:volatile关键字解析

1.内存模型当程序在运行过程中,会将运算需要的数据从主存(物理内存)复制一份到CPU的高速缓存当中,CPU进行计算时直接从它的高速缓存读取数据或写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。例子: i = i +1;   当线程执行这个语句时,会先从主存当中读取i的值,然后复制一份到高速缓存当中,然后CPU执行指令对i进行加1操作,然后将数据写入高速缓存,最后将高速缓存中i最新的值刷新到主存当中在Java虚拟机规范中试图定义一种Java内存模型(Java..

2020-07-23 16:57:19 115

原创 阿里云ubantu16 环境搭建

查看sudo权限vim /etc/sudoers添加管理员用户组sudo groupadd admin添加用户testsudo adduser test将用户添加到管理员组sudo vi /etc/groupadmin:x:1002:test 1.更新软件源:sudo apt-get update2.安装mysql:sudo apt-get instal...

2018-10-29 18:22:30 274

原创 你了解Linux 打开关闭端口的操作吗?

直接捞干的:以22221端口为例。打开进端口:允许外部访问服务器22221端口iptables -I INPUT -p tcp --dport 22221 -j ACCEPT打开出端口:允许服务器访问外部22221端口iptables -I OUTPUT -p tcp --dport 22221 -j ACCEPT关闭进端口:关闭外部访问服务器22221端口 sudo iptables -A IN...

2018-06-26 10:32:31 245

原创 阿里云添加MySQL监听,自动宕机重启

本人阿里云上MySQL服务和很多的应用服务全部放在一个机器上,流量大的时候,mysql会偶尔挂掉,所以这里写了一个监听MySQL的脚本,定时监听MySQL进程。直接捞干的:为了管理方便我在/home/listener/ 文件夹下新建shell文件:mysql_listener.sh,输出日志到mysql_listener.log 这里注意一下,脚本中的文件路径记得用绝对路径哦,因为shell脚本在...

2018-02-11 17:51:32 926

原创 任务调度系统

有时,我们需要程序进行不同的调度进行执行,比如每天早晨10点执行、每隔10分钟执行一次、今晚20:00执行等。所以,此处通过开源的作业调度框架Quart快速完成任务调度的工作.基本原理:   1、创建调度工厂();    //工厂模式   2、根据工厂取得调度器实例();  //工厂模式   3、Builder模式构建子组件  // builder模式, 如JobBuilder

2018-01-15 16:23:06 2239

原创 阿里云 mysql不定时down掉的解决方案

日志:1.Starting MySQL.The server quit without updating PID file (/[FAILED]e/mysql/iZ2zeeqwesqqrygb7sbvwxZ.pid).2.2017-12-01 11:35:05 32645 [ERROR] InnoDB: Cannot allocate memory for the buffer poo

2017-12-01 15:53:47 624

原创 tomcat shutdown后,进程还存在的解决办法

基本原理为启动tomcat时记录启动tomcat的进程id(pid),关闭时强制杀死该进程  第一步 :vim修改tomcat下bin/catalina.sh文件,添加点东西,主要是记录tomcat的pid,如下:#设置记录CATALINA_PID。#该设置会在启动时候bin下新建一个CATALINA_PID文件#关闭时候从CATALINA_PID文件找到pid,kill

2017-11-24 14:13:32 4835

原创 linux服务器上配置tomcat以service方式启动

1. 在/etc/init.d目录下新建文件,命名为tomcat2. 对tomcat文件进行编辑,执行 # cd /etc/init.d/ # vi tomcat将下面代码粘上去注意:下面代码java_home和catalina_home是指jdk和tomcat安装的根路径#!/bin/bash  # description: Tomcat7 S

2017-11-23 18:33:07 170

原创 阿里云部署java环境(附:自动化部署脚本)

java环境(CentOS 7.2,jdk-8,tomcat-7.0.78,nginx-1.12.0)1.安装JDK首先检查系统是否已经安装了jdkrpm -qa | grep java有则执行下面命令卸载rpm -e --nodeps 这里为上面命令查询出来的jdk去官网下载jdk:http://www.oracle.com/technetwork/java/javase/

2017-11-23 02:12:13 3487

原创 jsp中比较数值精度丢失问题

现象: version 后台传值:float 9.66jsp中${version > =9.66}  false${version 原因:1.jsp属于服务端代码,9.66默认是double类型。2.jsp中$取值是有类型的3.所以,${version > =9.66} 实际是float类型和double类型做比较时精度丢失导致的,具体是因为做比较时

2017-05-12 17:48:02 1264

原创 DateConverter

DateConverter dateConverter = new DateConverter();String[] datepattern = { "yyyy-mm-dd", "yyyy/mm/dd", "yyyy.mm.dd", "yyyy-MM-dd HH:mm:ss" }; dateConverter.setPatterns(datepattern);ConvertUtil

2017-03-13 16:47:01 2550

原创 ajaxfileupload.js bug修复

ajaxfileupload.js 作为jquery异步上传文件的插件,简单好用,但是也存在一些bug.此处记录了文件带参数上传时,参数中有特殊字符被解析错误的bug.看一下源码:当data[i]中有特殊字符,如单引号 双引号时,拼接时就会出现字符串被截取的问题。所以此处必须对特殊字符进行转义。源码中加入以下方法: //特殊符号转义 escapeHtml: functio

2016-12-27 10:08:24 950

原创 微信统一下单接口body为中文,报【签名错误】的解决办法

该处记录的是本人在开发过程中遇到的问题以及解决的方案。现象:微信支付,调微信的统一下单接口,本地jetty 和 tomcat 都可以调通,并能完成支付。但是部署到centos服务器上之后,就一直报签名错误。解决:经反复查找,确定是请求接口时发送的数据中,body是中文乱码,进而查找到xmap.toXML 方法生成xml 字符串时,中文就已经是乱码了。反复修改编码格式,无济于事。最终原因

2016-11-04 18:38:08 7494 3

原创 微信开发【坑啊】centos openjdk 不支持https方法!!

现象: 微信开发,通过用户默认授权获取到code后,程序中使用HttpClient的方式获取openId。本地测试时没有问题,部署到服务器之后,请求就报错。经查询,centos openjdk  不支持https方法!!而微信的接口链接全部都是https的。解决办法:服务器命令: yum install nss.x86_64     下载最新的nss版本然后找到 ${jre_hom

2016-10-31 23:47:29 2014

原创 jquery 去空格

var a = "   123       456   ";1.trim() 方法 只会去掉字符串  首尾的空格,其他位置的不会去掉a.trim()   输出:"123       456"2.去掉所有空格:使用 replace(/[ ]/g,"")a.replace(/[ ]/g,"")  输出: "123456"

2016-10-28 17:02:31 325

原创 java并发编程:线程安全-线程同步-synchronized和lock

多线程在提高效率的同时,必然面临线程安全的问题,Java中提供了一些机制来解决线程安全问题。当多个线程同时访问临界资源(或叫共享资源)(一个对象,对象中的属性,一个文件,一个数据库等)时,就可能会产生线程安全问题。不过,当多个线程执行一个方法,方法内部的局部变量并不是临界资源,因为方法是在栈上执行的,而Java栈是线程私有的,因此不会产生线程安全问题。解决方案:序列化访问临界资

2016-09-14 18:16:42 1481

原创 java并发编程:创建线程和进程

进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能。一. 创建线程java中如果要创建线程的话,一般有两种方式:1)继承Thread类;2)实现Runnable接口。1.继承Thread类  继承Thread类的话,必须重写run方法,在run方法中定义需要执行的任务。创建线程类:class MyThread extends Thread

2016-09-14 15:36:56 542

原创 高并发:阻塞队列 实现生产者-消费者模式

首先介绍一下非阻塞队列,比如PriorityQueue、LinkedList。在使用非阻塞队列时遇到的问题:不会对当前线程产生阻塞,在面对类似消费者-生产者的模型时,必须额外地实现同步策略以及线程间唤醒策略,这个实现起来非常麻烦。所以,阻塞队列恰恰不一样,阻塞队列会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。当队列中有元素后,被阻塞的线程

2016-09-12 11:32:16 6932

原创 高并发-数据埋点,统计延时入库

背景:在活动运营时,通常我们会统计一下数据,比如 页面访问次数,按钮点击次数等等数据,当访问用户过多,高并发情况下,这些数据实时入库必然给数据库造成巨大的压力。所以,对高并发情况的下的数据统计,可采取延时入库的方案。这里举个例子:1.定义 实体类/** * * 日活统计表 * * */public class SaleDailyLogModel extends Bas

2016-09-09 16:41:30 2095

原创 while循环-简化分页查询

当数据量过大时,通常会采用分页查询的方式,循环处理数据。比较常用的就是sql 中使用 limit 进行分页查询,然后for循环处理数据。但是这样的方式虽说可行,但是代码未免有些繁琐。比如说:sql 语句 要写两个方法  一个count 查询所有数据数量,第二个 limit 分页查出list 为了简化分页查询,可采用如下方式:1.sql语句:user表  每次查询1000条,

2016-09-09 12:50:06 2623

原创 java定时任务

该处介绍的是 ScheduledExecutorService定时周期性执行指定任务ScheduleExecutorService接口中有四个重要的方法,实现定时任务常用的方法是:scheduleAtFixedRate和scheduleWithFixedDelay。1.接口scheduleAtFixedRate原型定义及参数说明public ScheduledFutur

2016-09-06 14:11:56 941

原创 jquery replace字符串-全部替换

例如:var a='12,13,14,15';现在想把字符串替换,号为-我们发现,jquery中的replace方法:a.replace(",","-");只能替换掉第一个,号。即,结果为12-13,14,15jquery中是没有对字符串进行replaceAll的方法,通常这个时候,全部替换采用正则表达式的方式替换。如下:var reg = new RegExp(",","g");//

2016-08-31 18:26:30 66368

原创 java 中try catch finally执行顺序

1.finally实在try  catch结束后执行的。2.try catch 有return 时,在执行完return后面的表达式之后,执行finally,最后执行return;   try catch 没有有return 时,在执行完try catch,执行finally3.finally 中最好不能有return。try catch 还没return ,就先执行了finall

2016-08-31 14:57:13 539

原创 个性化设置table的td宽度

很多时候,我们在用到table时,都希望随意设置 每个单元格的宽度,而不希望单元格被内容撑开table的样式。1.首先,设置table的宽度 width=“1000” 或者 width=“100%”。注意:如果width固定为1000,当每个单元格的宽度相加大于1000 时,table的宽度是以所有单元格的宽度相加为准的。2.table的样式 设置style=“table-

2016-08-26 18:40:49 5998

原创 jquery 1.6之前的版本不支持attr方法

看标题!

2016-08-26 17:43:52 623

原创 文件上传-队列多线程读取文件内容

队列多线程读取文件内容为什么采用多线程队列的方式呢?主要是如果文件一行一行读取处理的话,页面上传文件后,需要等待服务器响应。如果文件的内容数据量很大的话,页面就一直等待服务器响应,毕竟服务器处理这些数据是花费很多时间的,我们都知道,页面是有响应时间的,一旦响应超时了,程序就终止了。所以,当我们需要处理大批的文件时,可以采用队列多线程的方式异步去处理,页面的响应时间只是上传文件的时间,一般在几秒

2016-08-22 18:25:59 6045

原创 jqgrid 设置某个字段只能添加,禁止修改

在编辑的方法中,设置beforeShowForm方法 如下:beforeShowForm:function(frm){frm.find('#chineseName').attr('readOnly',true);//把编辑框中的字段设置为只读的。},开发过程中与遇到了这样的需求,调查过程中觉得上边的方案还不错。不知道有没有其他更简单的方案,求分享!

2016-07-06 12:51:33 3263

原创 loadonce:true后trigger("reloadGrid")无效

loadonce:true后,jqGrid只会加载一次数据,并把datatype改为local,以后不再请求后台。当我们进行增删改查操作时,直接使用trigger("reloadGrid")无效,原因是:datatype改为local了,全部数据都是提取的本地的。解决方案:1.  setGridParam中加上参数datatype:'json',重新向服务器发送新的

2016-07-06 10:25:07 5534

原创 URL链接中文参数乱码问题

jetty起服务不会出现乱码问题,tomcat启动的话会出现乱码。主要原因是编码格式的不同造成的。后台只需: String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");即可! 笔记小记!

2016-04-07 14:34:47 343 1

原创 关于 js文件中使用el表达式问题

首先,JSP是由服务端执行的,而js是由客户端执行的。所以,EL表达式自然也由服务端解析执行,但是,如果EL所在的脚本在JSP页面内,它也是可以获取到值的,因为jsp文件在服务器端执行,这个值在服务器端返回到浏览器端时已经解析完毕,浏览器端只是呈现而已,但是如果在单独的JS文件中写EL,这个时候是无法获取的,因为javascript是客户端执行,单独的JS文件不在服务器的解析执

2015-08-18 10:58:35 503

ajaxfileupload.js(完整版)

ajaxfileupload.js(完整版)

2016-12-27

用VC设计并实现一个简单的祖玛小游戏

要求用VC设计并实现一个简单的祖玛小游戏:游戏的主角是一只石青蛙,石青蛙会吐出各种颜色的珠子,珠子造型美丽,并且有着神秘的色彩,环绕着石青蛙的是载着珠子的轨道,各种颜色的珠子会沿着轨道往前滑动,石青蛙必需遏止珠子们滚进去轨道终点的洞里头,要靠石青蛙吐出的珠子与轨道上的珠子相结合,颜色相同即可以消失得分,直到轨道上的珠子通通都被清干净为止。

2012-07-08

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除