- 博客(50)
- 资源 (5)
- 收藏
- 关注
原创 Java 提供接口服务,安全怎么保证
1、通信使用https2、请求签名,防止参数被篡改3、身份确认机制,每次请求都要验证是否合法4、APP中使用ssl pinning防止抓包操作5、对所有请求和响应都进行加解密操作6.限流(令牌桶、信号量)...
2019-05-22 20:57:02
2668
原创 如何处理高并发及高并发下数据库优化
1.可以使用静态页面的地方,使用静态页面,减少页面解析时间。2.尽量使用缓存技术来做。用户缓存、页面缓存等一切缓存,使用特定的机制进行刷新。利用消耗内存空间来换取用户的效率。同时减少数据库的访问次数。3.使用集群的方式来解决,单台服务器性能的问题4.使用负载均衡模式,来让每一个服务器资源进行合理的利用5.资源隔离(springcloud中有两种资源隔离方式--线程池和信号量)6...
2019-05-22 20:54:36
3711
原创 day day up
springbootSpringBoot源码分析之SpringBoot的启动过程 - 简书深入springboot原理——一步步分析springboot启动机制(starter机制) - ITPSC - 博客园[springBoot系列]--springBoot注解大全 - tanwei81 - 博客园Spring Boot Bean生命周期 - 简书springc...
2019-02-26 17:14:01
646
原创 morphia--更方便操作MongoDB
morphia是基于 Apache 许可证的 Google Code 项目,让您在 MongoDB 上持久保存、检索、删除和查询作为文档存储的 POJO。通过提供一系列围绕 Mongo Java 驱动程序的注释和包装程序,Morphia 完成了这些操作。Morphia 概念上类似于对象关系映射器(ORM),如 Java Persistence API (JPA) 或 Java 数据对象(Jav
2017-09-28 10:17:48
497
原创 SpringCloud--断路器(Hystrix)
在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC)。为了保证其高可用,单个服务又必须集群部署。由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务累计,导致服务瘫痪,甚至导致服务“雪崩”。为了解决这个问题,就出现断路器模型。一、断路器简介Net
2017-08-10 15:22:06
308
原创 SpringCloud--服务消费者(Feign)
一、Feign简介Feign是一个声明式的web服务客户端,它使得写web服务变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,包括Feign 注解和JAX-RS注解。Feign同时支持可插拔的编码器和解码器。spring cloud对Spring mvc添加了支持,同时在spring web中次用相同的HttpMessageConverter。当我们使用f
2017-08-10 11:01:16
490
原创 SpringCloud--服务消费者(rest+ribbon)
一、ribbon简介Ribbon is a client side load balancer which gives you a lot of control over the behaviour of HTTP and TCP clients. Feign already uses Ribbon, so if you are using @FeignClient then this
2017-08-09 10:51:56
843
原创 SpringCloud--服务的注册与发现(Eureka)
一、spring cloud简介spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开发人员的电脑上跑。另外说明spring cloud是基于springboot的,所以需要开发中对springboot有一定的了解,如果不了解的话可以看这篇文章:2小时学会
2017-08-09 09:37:26
524
原创 Kafka的简单介绍
一、为什么需要消息系统1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。3.扩展性
2017-06-28 14:13:11
1117
原创 Spring事务机制中@Transactional失效的原因
最近项目中发现spring事务机制中@Transactional会失效,一个方法抛出异常,但是数据库中修改的数据并不会回滚,于是看了一些资料,发现以下情况@Transactional事务会失效。1.首先检查配置,在项目的spring配置文件检查是否配置开启事务 <bean id="transactionManager" class="org.springframework.jd
2017-06-23 10:32:41
4872
原创 分布式服务框架Zookeeper开发
安装和配置详解本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookeeper 的安装非常简单,下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。单机模式单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目
2017-06-21 10:39:20
333
转载 zookeeper原理
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。Zookee
2017-06-20 09:36:02
280
原创 Mybatis-动态sql
动态 SQLMyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这
2017-04-18 15:16:02
2035
原创 sql性能调优
回到顶部(1)选择最有效率的表名顺序(只在基于规则的优化器中有效)ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表,
2017-03-07 21:25:23
1596
原创 Java性能监控及调优工具
1、JDK命令行工具 1.1、jps命令jps用于列出Java的进程,jps可以增加参数,-m用于输出传递给Java进程的参数,-l用于输出主函数的完整路径,-v可以用于显示传递给jvm的参数。jps -l -m -v31427 sun.
2017-03-07 21:22:06
10050
原创 tomcat配置文件详细说明
元素 它代表整个容器,是Tomcat实例的顶层元素.由org.apache.catalina.Server接口来定义.它包含一个元素.并且它不能做为任何元素的子元素.1> className指定实现org.apache.catalina.Server接口的类.默认值为org.apache.catalina.core.StandardServer2> port指定Tomcat监听sh
2017-03-07 11:14:11
1673
原创 JSP 自定义标签
JSP 自定义标签自定义标签是用户定义的JSP语言元素。当JSP页面包含一个自定义标签时将被转化为servlet,标签转化为对被 称为tag handler的对象的操作,即当servlet执行时Web container调用那些操作。JSP标签扩展可以让你创建新的标签并且可以直接插入到一个JSP页面。 JSP 2.0规范中引入Simple Tag Handlers来编写这些自定义标
2017-03-06 10:54:49
1188
原创 java自定义注解
直接上例子,新建Java Project1.新建Interface,建完在名字前加@,就成了自定义的注解[java] view plain copyimport java.lang.annotation.Documented; import java.lang.annotation.ElementType; import ja
2017-03-06 10:51:44
1176
转载 Java开发中的23种设计模式详解
设计模式(Design Patterns)——可复用面向对象软件的基础设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运
2017-03-03 16:12:51
1540
原创 GC算法 垃圾收集器
概述垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。jvm 中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 java 堆和方法区中,在程序运行期间,这部分内存的分配和使用都是
2017-03-01 14:02:50
1471
原创 webservice---soap协议
SOAP(SimpleObjectaccessPRotocal,简单对象访问协议)技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。SOAP是把成熟的基于HTTP的WEB技术与xml的灵活性和可扩展性组合在了一起。SOAP协议:简单对象访问协议(SOAP:Simple Object Access Protocol),简单对象访问协议(SOAP)是一种轻量的
2017-02-27 10:04:01
1906
原创 WebService 的工作原理
Web Service基本概念Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。XML:(Extensible Markup Language)扩展型可标记语言。面向
2017-02-27 10:02:52
1476
转载 WebService学习笔记(webservice、soap、wsdl、jws详细分析)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。 这里我们从一个程序员的视角来观察web service。在传统的程序编码中,存在这各种的函数方法调用。通常,我们知道一个
2017-02-27 09:44:58
3374
原创 jvm类加载机制
一、类的加载我们平常说的加载大多不是指的类加载机制,只是类加载机制中的第一步加载。在这个阶段,JVM主要完成三件事:1、通过一个类的全限定名(包名与类名)来获取定义此类的二进制字节流(Class文件)。而获取的方式,可以通过jar包、war包、网络中获取、JSP文件生成等方式。2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。这里只是转化了数据结构,
2017-02-24 16:31:14
1229
原创 java内存区域与内存溢出
内存模型 Java虚拟机在执行java程序的过程中把他所管理的内存划分为若干个不同的数据区域。包括:程序计数器、java虚拟机栈、本地发放栈、java堆、方法区。内存模型如图: 程序计数器一块较小的内存空间,它是当前线程所执行的字节码的行号指示器,字节码解释器工作时通过改变该计数器的值来选择下一条需要执行的字节码指令,分支、跳转、循环等基础功能都要依赖
2017-02-24 16:27:56
1564
原创 JVM堆内存分块
大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区),Heap(堆),Program Counter Register(程序计数器), VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack (本地方法栈).JVM堆内存分为2块:Permanent Space 和 Heap Space。P
2017-02-24 16:26:28
1497
原创 java远程调用shell脚本
import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.nio.charset.Charset;import org.apache.commons.io.IOUtils;import ch.ethz.ssh2.Channe
2017-02-09 14:54:39
2969
原创 java并发编程---synchronized和lock两种锁的比较
性能比较 在JDK1.5中,synchronized是性能低效的。因为这是一个重量级操作,它对性能最大的影响是阻塞的是实现,挂起线程和恢复线程的操作都需要转入内核态中完成,这些操作给系统的并发性带来了很大的压力。相比之下使用Java提供的Lock对象,性能更高一些。多线程环境下,synchronized的吞吐量下降的非常严重,而ReentrankLock则能基本保持在同一个比较稳定的
2016-12-06 11:27:42
4896
原创 java并发编程---lock锁
先了解一下java.util.concurrent.locks.Lock接口的实现类:ReentrantLock与ReentrantReadWriteLock的内部类中的ReadLock与WriteLock;分别叫重入锁,读入锁,写入锁。lock必须被显式地创建、锁定和释放,为了可以使用更多的功能,一般用ReentrantLock为其实例化。为了保证锁最终一定会被释放(可能会有异常发生),要把互斥
2016-12-06 11:21:56
1617
原创 进程与线程的区别与联系
进程是程序处于一个执行环境中在一个数据集上的一次运行过程,它是系统进行资源分配和调度的一个独立单位。每个进程都有自己独立的系统资源,一个进程中可以有多个线程。 线程,有时候也称为轻量级进程,是程序执行的最小单元,它是进程的一个实体,是CPU调度和分派的基本单位。线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器、一组寄存器和栈),每个线程也都有各自的用户栈、核心
2016-11-25 14:28:50
1479
原创 java并发编程---sleep和wait
1.sleep()方法 sleep()使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会; sleep()是Thread类的Static(静态)的方法;因此他不能改变对象的机锁,所以当在一个Synchronized块中调用Sleep()方法是,线程虽然休眠了,但是对象的机锁并木有被释放,其他线程
2016-11-25 14:21:59
1496
原创 java并发编程---wait、notify
1、wait() 该方法用来将当前线程置入休眠状态,直到接到通知或被中断为止。在调用wait()之前,线程必须要获得该对象的对象级别锁,即只能在同步方法或同步块中调用wait()方法。进入wait()方法后,当前线程释放锁。在从wait()返回前,线程与其他线程竞争重新获得锁。如果调用wait()时,没有持有适当的锁,则抛出IllegalMonitorStateException,
2016-11-25 14:18:58
1279
原创 java并发编程---synchronized关键字
在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。 采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个锁
2016-11-25 11:50:01
1465
1
原创 java并发编程---volatile关键字
当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时
2016-11-25 11:28:45
1384
原创 java并发编程----并发模型
并发模型 在继续下面的探讨之前,我们还是重温一下几个概念:概念解释临界资源并发环境中有着固定数量的资源互斥对资源的访问是排他式的饥饿一个或一组线程长时间或永远无法取得进展死锁两个或多个线程相互等待对方结束活锁想要执行的线程总是发现其他
2016-11-23 16:59:02
2019
原创 java并发编程--ConcurrentHashMap、CopyOnWriteArrayList、BlockingQueue
ConcurrentHashMap ConcurrentHashMap是HashMap在并发环境下的版本,大家可能要问,既然已经可以通过Collections.synchronizedMap获得线程安全的映射型容器,为什么还需要ConcurrentHashMap呢?因为通过Collections工具类获得的线程安全的HashMap会在读写数据时对整个容器对象上锁,这样其他使用该容器的线程
2016-11-23 16:56:04
2321
原创 No enclosing instance of type E is accessible. Must qualify the allocation with an enclosin的解决方案
最近用java写一个小程序时编译出现:No enclosing instance of type E is accessible. Must qualify the allocation with an enclosing instance of type E(e.g. x.new A() where x is an instance of E). 原始代码如下:public class
2016-11-23 16:12:33
2202
原创 创建线程的几种方法及比较
1、通过继承Thread类创建线程(1).首先定义一个类去继承Thread父类,重写父类中的run()方法。在run()方法中加入具体的任务代码或处理逻辑。(2).直接创建一个ThreadTest类的对象,也可以利用多态性,变量声明为父类的类型。(3).调用start方法,线程启动,隐含的调用run()方法。public class ThreadTest extends T
2016-11-21 10:17:24
5339
原创 Mybatis 高级结果映射Association Collection Cache-ref Discriminator Cache
Association元素Association元素处理“has-one”(一对一)这种类型关系。比如在我们的例子中,一个Blog有一个Author。联合映射与其它的结果集映射工作方式差不多,指定property、column、javaType(通常MyBatis会自动识别)、jdbcType(如果需要)、typeHandler。不同的地方是您需
2016-11-15 15:33:35
2825
原创 mybatis的延迟加载和一、二级缓存
什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能。 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。设置延迟加载 需要在SqlMapConfig.xml文件中,在标签中设置下延迟加载。 lazyL
2016-11-15 15:18:22
2121
为select下拉框添加滚动条
2016-10-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人