自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

你是我的天晴

it工作室

  • 博客(35)
  • 资源 (3)
  • 问答 (5)
  • 收藏
  • 关注

转载 通过struts2实现Http只允许POST请求

通过struts2实现Http只允许POST请求,有需要的朋友可以参考下。前两天工作中需要做安全限制工作,今天把代码整理一下。整体的一个思路就是使用Struts2过滤器拦截请求,反射得到对应请求反正只允许POST请求。先看一下主要拦截器代码:import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2

2015-11-27 17:34:05 4401

转载 include与jsp:include与s:action与s:include与iframe用法汇总

1. 2. 3. 4. 5. jsp开发时,这五种常用的页面引入标签,到底有什么区别,各自适应场合是什么,相信很多人都不陌生,但又感觉莫林两可的,本文将做一个全面的汇总。注:本文虽然各方面都涉及到了,但是很多细节还没列出来,后续在开发中还会不断总结不断完善,希望与广大it从业的朋友们多交流,共同进步。 --------------------------------

2015-11-27 14:48:31 421

原创 提升Java性能的基本方法

Java从诞生之日起就被质疑:字节码在JVM中运行是否会比机器码直接运行的效率会 低很多?很多技术高手、权威网站都有类似的测试和争论,从而来表明Java比C (或C++) 更快或效率相同。此类话题我们暂且不表(这类问题的争论没完没了,也许等到我们退休的时候,还想找个活动脑筋的方式,此类问题就会是最好的选择),我们先从如何提髙Java的 性能方面入手,看看怎么做才能让Java程序跑得更快,效率更髙,

2015-11-18 23:52:50 2200

原创 Lock与synchronized是不一样的

很多编码者都会说,Lock类和synchronized关键字用在代码块的并发性和内存上时语义 是一样的,都是保持代码块同时只有一个线程具有执行权。这样的说法只对了一半,我们以一个任务提交给多个线程运行为例,来看看使用显式锁(Lock类)和内部锁(synchronized 关键字)有什么不同。首先定义一个任务:class Task{ public void doSomething(){ t

2015-11-17 23:17:18 1013

原创 异步运算考虑使用Callable接口 有返回值的线程

多线程应用有两种实现方式,一种是实现Runnable接口,另一种是继承Thread类,这 两个方式都有缺点:run方法没有返回值,不能抛出异常(这两个缺点归根到底是Runable 接口的缺陷,Thread也是实现了 Runnable接口),如果需要知道一个线程的运行结果就需要用 户自行设计,线程类自身也不能提供返回值和异常。但是从Java 1.5开始引入了一个新的接口 Callable,它类似于R

2015-11-17 17:29:58 929

原创 使用线程异常处理器提升系统可靠性

我们要编写一个Socket应用,监听指定端口,实现数据包的接收和发送逻辑,这在早期系统间进行数据交互是经常使用的,这类接口通常需要考虑两个问题:一是避免线程阻塞, 保证接收的数据尽快处理;二是接口的稳定性和可靠性问题,数据包很复杂,接口服务的系统也很多,一旦守候线程出现异常就会导致Socket停止响应,这是非常危险的,那我们有什 么办法来避免吗?Java 1.5版本以后在Thread类中增加了

2015-11-17 14:19:28 648

原创 线程优先级只使用三个等级

线程的优先级(Priority)决定了线程获得CPU运行的机会,优先级越髙获得的运行机 会越大,优先级越低获得的机会越小。Java的线程有10个级别(准确地说是11个级别,级 别为〇的线程是JVM的,应用程序不能设置该级别),那是不是说级别是10的线程肯定比 级别为9的线程先运行呢?我们来看如下一个多线程类:public class TestPriorityThread implements

2015-11-17 12:42:48 6947

原创 不使用stop方法停止线程,停止线程的最佳办法

线程启动完毕后,在运行时可能需要终止,Java提供的终止方法只有一个stop,但是我 不建议使用这个方法,因为它有以下三个问题:(1)  stop方法是过时的从Java编码规则来说,已经过时的方法不建议采用。(2)  stop方法会导致代码逻辑不完整stop方法是一种“恶意”的中断,一旦执行stop方法,即终止当前正在运行的线程,不 管线程逻辑是否完整,这是非常危险的。看如下的代码

2015-11-13 16:22:22 18897 1

原创 不推荐覆写start方法

多线程比较简单的实现方式是继承Thread类,然后覆写run方法,在客户端程序中通过 调用对象的start方法即可启动一个线程,这是多线程程序的标准写法。不知道读者是否还能回想起自己的第一个多线程demo呢?估计一般是这样写的:class MultiThread extends Thread{ @Override public void start(){ //调用线在体

2015-11-13 13:15:28 662

原创 python学习笔记--更新

python中文报错问题 SyntaxError: Non-ASCII character '\xe4' in file getoptTest.py on line 14, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details必须是在第一行或是第二行加入这么一句:否则无效,这里还

2015-11-12 09:30:45 395

原创 反射让模板方法模式更强大

模板方法模式(Template Method Pattern)的定义是:定义一个操作中的算法骨架,将 一些步骤延迟到子类中,使子类不改变一个算法的结构即可重定义该算法的某些特定步骤。简单地说,就是父类定义抽象模板作为骨架,其中包括基本方法(是由子类实现的方法,并 且在模板方法被调用)和模板方法(实现对基本方法的调度,完成固定的逻辑),它使用了 简单的继承和覆写机制,我们来看一个基本的例子。我们...

2015-11-06 17:13:23 779

原创 使用反射增加装饰模式的普适性,动态代理实现装饰模式

装饰模式(Decorator Pattern)的定义是“动态地给一个对象添加一些额外的职责。就增 加功能来说,装饰模式相比于生成子类更为灵活”,不过,使用Java的动态代理也可以实现 装饰模式的效果,而且其灵活性、适应性都会更强。我们以卡通片《猫和老鼠》(《Tom and Jerry》)为例,看看如何包装小Jerry让它更强 大。首先定义Jerry的类:老鼠(Rat类),代码如下;publ

2015-11-06 14:25:12 390

原创 动态代理可以使代理模式更加灵活

Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成 代理,避免重复开发。我们知道一个静态代理是通过代理主题角色(Proxy)和具体主题角 色(Real Subject)共同实现抽象主题角色(Subject)的逻辑的,只是代理主题角色把相关的 执行逻辑委托给了具体主题角色而已,一个简单的静态代理如下所示://抽象主题角色interface Subje

2015-11-06 11:01:38 321

原创 使用forName动态加载类文件,动态加载不适合数组,动态加载数组的方法

动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来 说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以 在运行时再决定是否要加载一个类,比如从Web上接收一个String参数作为类名,然后在 JVM中加载并初始化,这就是动态加载,此动态加载通常是通过Class.forName(String)实现的,只是这个forName方法到

2015-11-06 10:01:23 1097 1

原创 反射访问属性或方法时将Accessible设置为true

Java中通过反射执行一个方法的过程如下:获取一个方法对象,然后根据isAccessible 返回值确定是否能够执行,如果返回值为false则需要调用setAccessiblearue),最后再调 用invoke执行方法,具体如下:   Method method =...... ;   //检查是否可以访问  if({method.isAccessible()){      me

2015-11-04 19:39:25 5328

原创 java程序的151个建议-适时选择 getDeclared X X X 和 get x X X

Java 的 Class 类提供了 很多的 getDeclaredX X X 方法和 getX X X 方法,例如 getDeclared-Method和 getMethod成对出现,getDeclaredConstructors 和 getConstructors也是成对出现,那这两者之间有什么差别呢?看如下代码:public class Client {public static v

2015-11-04 19:22:06 398

原创 注意Class类的特殊性

java语言是先把Java源文件编译成后缀为class的字节码文件,然后再通过ClassLoader 机制把这些类文件加载到内存中,最后生成实例执行的,这是Java处理的基本机制,但是 加载到内存中的数据是如何描述一个类的呢?比如在Dog.class文件中定义的是一个Dog类, 那它在内存中是如何展现的呢?Java使用一个元类(MetaClass)来描述加载到内存中的类数据,这就是Class类

2015-11-04 19:00:52 365

原创 数组的真实类型必须是泛型类型的子类型

先说说ArrayList的toArrayArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toArray有两个重载的方法:1.list.toArray();2.list.toArray(T[]  a);对于第一个重载方法,是将list直接转为Object[] 数组;第二种方法是将list转化为你所需要类型的数组,当然我们用的时候会转化为与li

2015-11-03 19:10:07 1418

原创 严格限定泛型类型采用多重界限

从哲学上来说,很难描述一个具体的人,你可以描述它的长相、性格、工作等,但是人都是有多重身份的,估计只有使用多个And (与操作)将所有的描述串联起来才能描述一个 完整的人,比如我,上班时我是一个职员,下班了坐公交车我是一个乘客,回家了我是父母的孩子,是儿子的父亲……角色时刻在变换。那如果我们要使用Java程序来对一类人进行管 理,该如何做呢?比如在公交车费优惠系统中,对部分人员(如工资低于2500

2015-11-03 13:57:44 919

原创 建议采用的顺序是 List<T>、List<?>、List<Object>

List、List、1^这三者都可以容纳所有的对象,但使用的顺序应该是首选List,次之List,最后选择List,原因如下:(1) List是确定的某一个类型List表示的是List集合中的元素都为T类型,具体类型在运行期决定;List表示 的是任意类型,与List类似,而List则表示List集合中的所有元素为Object类 型,因为Object是所有类的父类,所以LiSt也可以容纳所

2015-11-02 22:15:50 3257 1

原创 警惕泛型是不能协变和逆变的

什么叫协变(covariance)和逆变(contravariance)? Wiki上是这样定义的:Within the type system of 阻 programming language,covariance and contravariance refers to the ordering of types from narrower to wider and their inte

2015-11-02 22:08:55 1074

原创 不同的场景使用不同的泛型通配符

Java泛型支持通配符(Wildcard),可以单独使用一个“? ”表示任意类,也可以使用 extends关键字表示某一个类(接口)的子类型,还可以使用super关键字表示某一个类(接 口)的父类型,但问题是什么时候该用extends,什么时候该用super呢?(1)    泛型结构只参与“读”操作则限定上界(extends关键字)阅读如下代码,想想看我们的业务逻辑操作是否还能继续:

2015-11-02 21:44:13 554 1

原创 强制声明泛型的实际类型

Arrays工具类有一个方法asList可以把一个变长参数或数组转变为列表,但是它有一个 缺点:它所生成的List长度是不可改变的,而这在我们的项目开发中有时会很不方便。如果你期望生成的列表长度是可变,那就需要自己来写一个数组的工具类了,代码如下:class ArrayUtils{//把一个变长参数转变为列表,并且长度可变  public static List asList(T..

2015-11-02 21:17:21 591

原创 不能初始化泛型参数和数组

泛型类型在编译期被擦除,我们在类初始化时将无法获得泛型的具体参数,比如这样的代码:class Foo{ private T t =new T(); private T[] tArray=new T[5]; private List list= new ArrayList();}这段代码有什么问题呢? t、tArray、list都是类变量,都是通过new声明了一个类型, 看起来非常

2015-11-02 00:37:22 3071 1

原创 Java的泛型是类型擦除的

Java泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,它与C++ 中的模板(Templates)比较类似,但是有一点不同的是:Java的泛型在编译期有效,在运行 期被删除,也就是说所有的泛型参数类型在编译后都会被清除掉,我们来看一个例子,代码如下:public class Foo { public void arrayMethod(String[] strArra

2015-11-02 00:16:11 424

原创 由点及面,一叶知秋——集合大家族

Java中的集合类实在是太丰富了,有常用的ArrayList、HashMap,也有不常用的Stack、 Queue,有线程安全的Vector、HashTable,也有线程不安全的LinkedList、TreeMap,有阻塞 式的ArrayBIockingQueue,也有非阻塞式的PriorityQueue等,整个集合家族非常庞大,而 且也是错综复杂,可以划分为以下几类:(1)  List

2015-11-01 23:42:51 718

原创 多线程使用Vector或HashTable

Vector是ArrayList的多线程版本,HashTable是HashMap的多线程版本,这些概念我 们都很清楚,也被前辈嘱咐过很多次,但我们经常会逃避使用Vector和HashTable,因为用 得少,不熟嘛!只有在真正需要的时候才会想要使用它们,但问题是什么时候算真正需要呢?我们来看一个例子,看看使用线程安全的Vector是否可以解决问题,代码如下: //火车票列表 final

2015-11-01 23:28:11 1897

原创 集合运算时使用更优雅的方式

在初中代数中,我们经常会求两个集合的并集、交集、差集等,在Java中也存在着此 类运算,那如何实现呢? 一提到此类集合操作,大部分的实现者都会说:对两个集合进行遍历,即可求出结果。是的,遍历可以实现并集、交集、差集等运算,但这不是最优雅的处理方式。下面来看看如何进行更优雅、快速、方便的集合操作。(1)  并集也叫做合集,把两个集合加起来即可,这非常简单,代码如下:pub

2015-11-01 21:09:35 461

原创 不同的列表选择不同的遍历方法

我们来思考这样一个案例:统计一个省的各科髙考平均值,比如数学平均分是多少,语文平均分是多少等,这是每年招生办都会公布的数据,我们来想想看该算法应如何实现。当 然使用数据库中的一个SQL语句就能求出平均值,不过这不再我们的考虑之列,这里还是使用纯;lava的算法来解决之,看代码:public static void main(String[] args) { int num=80*10000;

2015-11-01 17:35:19 439

原创 不要随便设置随机种子

随机数在太多的地方使用了,比如加密、混淆数据等,我们使用随机数是期望获得一个唯一的、不可仿造的数字,以避免产生相同的业务数据造成混乱。在Java项目中通常是通过Math.random方法和Random类来获得随机数的,我们来看一段代码:public class Client {       public static void main(String[] args) {            

2015-11-01 16:55:56 4869 1

原创 asList方法产生的List对象不可更改

上一个建议指出了 asList方法在转换基本类型数组时存在的问题,接着我们看一下 asList方法返回的列表有何特殊的地方,代码如下所示:public static void main(String[] args) { Week[] workDays={Week.Sun,Week.Mon,Week.Tue,Week.Wed,Week.Fri}; List list=Arrays.asLis

2015-11-01 15:24:13 1001

原创 避开基本类型数组转换列表陷阱

我们在开发过程中经常会使用Arrays和Collections这两个工具类在数组和列表之间转 换,非常方便,但也有时候会出现一些奇怪的问题,来看如下代码: public static void main(String[] args) { int[] i={23,89,13,0,56}; List list=Arrays.asList(i); System.out.print

2015-11-01 15:04:27 476

原创 多种最值算法,适时选择

对一批数据进行排序,然后找出其中的最大值或最小值,这是基本的数据结构知识。在Java中我们可以通过编写算法的方式,也可以通过数组先排序再取值的方式来实现。下面以求最大值为例,解释一下多种算法。(1)  自行实现,快速査找最大值先来看用快速査找法取最大值的算法,其代码如下: public static int max(Integer[] datas){ int max=datas[0]

2015-11-01 14:58:24 1390

原创 警惕数组的浅拷贝

有这样一个例子,第一个箱子里有赤橙黄绿青蓝紫7色气球,现在希望在第二个箱子中也放入7个气球,其中最后一个气球改为蓝色,也就是赤橙黄绿青蓝蓝7个气球,那我们很 容易就会想到第二个箱子中的气球可以通过拷贝第一个箱子中的气球来实现,毕竟有6个气 球是一样的嘛,来看实现代码:public class Balloon { //编号 private int id; //颜色 private

2015-11-01 13:35:43 628

原创 若有必要,使用变长数组

Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便,比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随 时都可能会有学生入学、退学或转学),所以需要有一个足够大的数组来容纳所有的学生,但问题是多大才算足够大? 1〇年前一台台式机64MB的内存已经很牛了,现在要是没有 2GB的内存你都不好意思跟别人交流计算机的配置,所以呀,这个足够大是相对于当时

2015-11-01 09:11:36 721

仿北京号app,vue3加vant

这是一个使用 Vue 3 和 Vant 框架构建的 H5 页面项目,仿照北京号 App 的界面和功能,实现了首页、直播、北京号、看报、服务等五个主要板块。项目通过抓取官方 API 数据进行渲染,实现了一级界面,二级的跳转。这个项目非常适合学习 Vue 3 和 Vant 框架,并用于开发移动端 H5 页面。 项目特点 现代化的技术栈:采用 Vue 3 进行前端开发,结合 Vant 组件库提供的丰富移动端组件,快速构建优美的用户界面。 多页面支持:包含首页、直播、北京号、看报、服务五个主要板块,每个板块都有独立的页面和功能。 API 数据抓取:通过调用官方 API 获取实时数据并进行渲染,确保内容的动态更新。 适合学习和实践:适合新手学习 Vue 3 和 Vant,同时也是一个很好的实践项目,帮助理解前端开发和移动端页面构建。

2024-05-28

Spring Boot核心技术-笔记整理

该资源是关于Spring Boot核心技术的笔记整理,涵盖了Spring Boot框架的基本概念、核心特性、常用功能以及最佳实践等内容。通过系统化的整理和归纳,全面解释了Spring Boot在快速构建、配置和部署Spring应用程序方面的优势,以及如何利用其丰富的生态系统开发高效的企业级应用。 使用人群: 适合Java开发人员、软件工程师、系统架构师以及对Spring Boot框架感兴趣的技术人员。无论是初学者还是有一定经验的开发者,都可以通过这份资源加深对Spring Boot的理解和应用。 使用场景及目标: 对于Java开发人员和软件工程师:通过学习Spring Boot核心技术,能够快速掌握Spring Boot的开发流程、项目搭建、配置管理等关键技能,提高开发效率和代码质量。 对于系统架构师:深入了解Spring Boot的核心技术,可以在项目架构设计和技术选型上做出更明智的决策,提升系统的可维护性和可扩展性。 目标是让用户能够系统地学习和掌握Spring Boot框架,从而在实际项目中应用其所学,快速构建高质量的Java应用程序。

2024-05-27

Mysql事务以及锁原理讲解

本资源深入解释MySQL事务和锁的原理,涵盖了事务的基本概念、ACID特性、事务隔离级别以及MySQL中的锁类型、锁粒度等内容。通过实例和案例分析,详细讲解了事务的并发控制、隔离级别对数据一致性的影响,以及锁的使用场景和注意事项。 使用人群: 适合MySQL数据库管理员、开发人员、系统架构师以及对数据库事务和并发控制感兴趣的技术人员。无论是初学者还是有一定经验的专业人士,都能从中获益。 使用场景及目标: 对于数据库管理员和开发人员:通过学习MySQL事务和锁的原理,可以更好地设计数据库架构、优化SQL语句,并且解决数据库并发访问的问题,提高系统性能和数据完整性。 对于系统架构师:理解事务和锁的原理有助于设计高可用性、高并发的系统架构,避免因为数据库操作而引发的性能瓶颈和数据不一致问题。 目标是让用户能够深入理解MySQL事务和锁的概念,掌握其在实际应用中的使用方法和注意事项,从而提升数据库应用的可靠性和性能。

2024-05-27

手机端获取传感器发送到pc端,uniapp代码

当今的智能手机内置了多种传感器,这些传感器的功能各不相同,包括但不限于地磁传感器、姿态传感器、GPS、光照传感器、温度传感器、气压传感器、摄像头、麦克风等。这些传感器不仅使手机具备了丰富的功能,同时也为开发者提供了广阔的创新空间。 基于这些传感器,我设计了一个小型应用程序,旨在实时获取手机传感器的数据,并将其传输到个人电脑(PC)端进行展示和处理。应用程序的功能包括: 传感器数据获取:应用程序能够访问手机上的各种传感器,例如加速度计、陀螺仪、GPS模块等,以获取其输出的数据。这些数据可以是位置信息、运动状态、环境参数等,具体根据所选择的传感器而定。 网络连接建立:应用程序在手机端与PC端建立网络连接,以便在两者之间进行数据传输。这可以通过Wi-Fi网络、蓝牙等方式实现,确保数据能够稳定、快速地传输。 数据传输:一旦网络连接建立,手机端便会实时将采集到的传感器数据发送到PC端。数据可以通过TCP/IP协议或其他通信协议进行传输,以确保数据的完整性和安全性。 数据存储和显示:PC端接收到手机端发送的数据后,将其存储到本地数据库或内存中,并通过图形界面或命令行界面进行显示。这样用户

2024-05-27

hyperledger Fabric网络环境搭建的两个二进制文件包

hyperledger Fabric网络环境搭建的两个二进制文件包,hyperledger-fabric-linux-amd64-2.5.7.tar.gz,hyperledger-fabric-ca-linux-amd64-1.5.10.tar.gz

2024-05-18

章节知识重点04741计算机网络原理

章节知识重点04741计算机网络原理 04741计算机网络原理自考本科课件 自考计算机网络原理复习笔记

2024-04-01

计算机网络原理思维导图

计算机网络原理思维导图 pdf 可复制 自考复习用

2024-03-26

SQLyog_Enterprise.zip

SQLyog连接MySQL工具,里面包含kei,解压,点击SQLyogEnt,输入新建文本文档里面的用户名和注册码即可使用。

2020-05-27

oracle客户端(plsql developer连接远程数据库)

plsql developer连接远程数据库(本地不用安oracle)

2016-09-28

tomcat+redis共享session所需jar包

tomcat用redis共享session需要的jar

2016-08-31

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

TA关注的人

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