- 博客(208)
- 资源 (12)
- 收藏
- 关注
原创 Mybatis #和$区别以及原理
#{ }可以防止Sql 注入,它会将所有传入的参数作为一个字符串来处理。 $ {} 则将传入的参数拼接到Sql上去执行,一般用于表名和字段名参数,$ 所对应的参数应该由服务器端提供,前端可以用参数进行选择,避免 Sql 注入的风险...
2021-09-21 23:11:26
212
原创 volatile实现可见性的原理解释
在java并发编程中,一定绕不开volatile、synchronized和lock几个关键字,其中volatile关键字是用来解决共享变量(类成员变量、类的静态成员变量等)的可见性问题的,非共享变量(方法的局部变量)是分配在JVM虚拟机的栈中,是线程私有的,不涉及可见性问题。那么什么是可见性?可见性:在JAVA规范中是这样定义的:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和...
2020-02-23 01:07:03
1721
原创 了解数据库索引及其原理
索引这个词相信对于一个开发猿来说,就好比看到我们的代码一样低头不见抬头见,在一些日常优化我们查询效率的方案中,不光考虑优化我们的sql语句,另外就是使用索引。使用索引很简单,只要能写创建表的语句,就肯定能写创建索引的语句,要知道这个世界上是不存在不会创建表的服务器端程序员的。然而, 会使用索引是一回事, 而深入理解索引原理又能恰到好处使用索引又是另一回事,这完全是两个天差地别的境界(我自己也还没有...
2020-02-21 16:06:44
317
原创 ThreadLocal考验求职者
什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数据,线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用。ThreadLocal提供了线程安全的另一种思路,我们平常说的线程安全主要是保证共享数据的并发访问问题,通过sychronized锁或者CAS无锁策略来保证数据的一致性。ThreadLocal结构图从上面的...
2020-02-19 13:30:16
222
原创 java.util.concurrent和工具类
一、java.util.concurrent体系的主要大板块包含内容说到JUC其实就是说java的多线程等和锁及一些状态转换,中断等,它还涉及到一些tools工具的东东,见下图:Tools也包含了5个部分的知识:Executors、Semaphor、Exchanger、CyclicBarrier、CountDownLatch,其实也就是五个工具类二、Executors...
2020-02-18 23:47:20
277
原创 多线程current包
编写多线程的程序一直都是一件比较麻烦的事情,要考虑很多事情,处理不好还会出很多意想不到的麻烦。加上现在很多开发者接触到的项目都是打着企业级旗号的B/S项目,大多数人都很少涉及多线程,这又为本文的主角增加了一份神秘感。讲到Java多线程,大多数人脑海中跳出来的是Thread、Runnable、synchronized……这些是最基本的东西,虽然已经足够强大,但想要用好还真不容易。从JDK ...
2020-02-18 23:44:05
425
原创 内存模型以及分区
Java内存模型(即Java Memory Model,简称JMM)本身是一种抽象的概念。java内存模型中分为主内存和工作内存。主内存里面存储着所有变量,主内存是共享内存区域,所有线程都可以访问。每一个线程都私有一个工作内存,工作内存里面保存着主内存里面变量值的副本,线程对变量的操作都是在工作内存中完成,操作结束后再放回主内存。主内存可粗略认为是堆,工作内存认为是栈。操作系统中,一般CPU都会从...
2020-01-15 19:56:43
241
原创 了解squid服务以及安装部署
squid作为一款应用层的代理服务软件,它主要提供了缓存加速、应用层过滤的功能。squid代理服务器的工作机制:当我们客户机通过squid代理去访问web页面时,指定的代理服务器会先检查自己的缓存,若是缓存中有我们客户机需要的页面,那么squid服务器将直接把缓存中的页面内容返回给客户机,如果缓存中没有客户端请求的页面,那么squid代理服务器就会向internet发送访问请求,获得返...
2020-01-14 17:59:01
189
原创 ATS功能介绍
识点功能1.Traffic Server缓存ATS 缓存包含一个高速的对象数据库,数据库根据 URL 和相关头部来索引对象,对于同一对象可以缓存不同版本(如不同的编码、语言)。当缓存空间满后,TS 会移除过期的数据。当磁盘出错时,TS 将不再使用该块磁盘,转而使用剩下的磁盘。所有磁盘都出错时,TS 将切换至 proxy-only 模式,即只代理,不缓存。可分区,即可以给指定的协议和源...
2020-01-14 17:49:39
1790
原创 (nginx,Varnish,Squid,Apache TrafficServer)之 nigix与narnish的区别和比较二
在前面的文章中,我们曾对HAProxy、Varnish的性能、配置做过详细介绍。今天给各位带来的是这三款开源代理服务器软件的区别,以及什么样的场景使用哪款软件。哪个软件能够支撑高可用,高并发,还要好维护,运维和网络管理员如何从这些方案中选择一个适合的代理服务器解决方案。下面我们就来看这三种代理服务器的基本资料,然后对比异同。关于代理服务器代理服务器的位置是后端服务的前端,用来负...
2020-01-14 17:48:20
660
原创 (nginx,Varnish,Squid,Apache TrafficServer)之 nigix与narnish的区别和比较
Varnish高性能、开源的反向代理服务器和内存缓存服务器。优点:1. 高性能;2. 多核支持;3. 支持0-60秒的精确缓存时间。缺点:1. 不具备自动容错和恢复功能,重启后数据丢失;2. 在线扩容比较难。3. 32位机器上缓存文件大小为最大2GB;4. 不支持集群。应用场景:并发要求不是很大的小型系统和应用。Nginx1.不支持带参数的动态链...
2020-01-14 17:42:53
554
原创 高并发解决方案
1. 高并发和大流量解决方案高并发架构相关概念 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行;在互联网时代,所讲的并发,高并发通常是指并发访问,也就是在某个时间点,有多少个访问同时到来。通常一个系统的日PV在千万以上,有可能是一个高并发的系统。有的公司完全不走技术路线,全靠机器...
2020-01-14 17:40:43
537
转载 git 如何把分支代码合并到master主分支上
1.首先切换到分支;git checkout hellomonkey2.使用git pull 把分支代码pull下来;git pull3.切换到主分支;git checkout master4.把分支的代码merge到主分支;git merge hellomonkey5.git push推上去ok完成,现在 你自己分支的代码就合并到主分支上了。git push总结:同...
2020-01-06 11:21:01
6175
1
原创 git命令大全
it命令大全willcoder关注0.9562019.06.06 09:01:55字数 545阅读 5,852Git图形化界面我用的还可以,但是命令就不太会了,索性和大家一起学习下Git命令的用法...一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。fetch vs pullgit fetch是将远程主机的最新内容拉到本...
2019-11-28 09:17:40
107
原创 大数据-大数据学习过程
本文旨在为普通程序员(Java程序员最佳)提供一个入门级别的大数据技术学习路径,不适用于大数据工程师的进阶学习,也不适用于零编程基础的同学。前言:一、背景介绍 二、大数据介绍正文:一、大数据相关的工作介绍 二、大数据工程师的技能要求 三、大数据学习规划 四、持续学习资源推荐(书籍,博客,网站) 五、项目案例分析(批处理+实时处理)前言一、背景介绍本人目前是一名大数...
2018-09-13 11:03:50
5027
1
原创 大数据知识二-大数据组件
离线计算组件1.1 hivehive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。但是在转换为MapReduce的计算过程中,计算速...
2018-09-13 10:48:56
586
原创 大数据基础一
整个大数据处理的体系,按我的理解可以分为两个部分,一个是分布式存储系统、另一个是分布式计算框架。分布式存储系统主流是HadoopDFS,其他还有Ceph和Swift。分布式计算框架主流是MapReduce,Storm和Spark。 首先说分布式存储系统HadoopDFS。它是一种本地文件系统之上的更高的抽象,把跨节点的组成的文件系统看成一个逻辑上的整体。它存储的思路是,把...
2018-09-13 10:32:25
190
转载 新随笔管理 query 的ready() 与indow.onload()的区别
做web开发时常用query中$(document).ready()和JavaScript中的Bwindo.onload方法,两者都是要在页面加载完成以后加载的方法,但是这两者还是有很大区别的。最近遇到了这样的问题,查询了多篇文章,做一下总结。简单来说,要以用以下张表来表示 :Jquery的ready()与Javascrpit的load() window.onload()$(document).r...
2018-06-28 16:17:53
442
原创 java中CheckException和UnCheckException的区别
在java中,异常分为两种,运行时异常(也就是uncheckException)和已检查异常checkException,运行时异常包括平常遇到的各种异常,如空指针异常,数据格式异常等一系列异常,这种异常是可以不捕获的,可通过throws抛出异常,交给别的代码或者JAVA虚拟机来完成。但是checkException是必须要处理的,也就是不能抛出,必须通过try-catch来完成,不处理的话是不能...
2018-06-15 17:10:32
3986
1
原创 Spring AOP 实现原理
什么是AOPAOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到...
2018-04-09 21:35:14
160
原创 java内存之可见性volatile
如果一个线程对共享变量的修改,能够被其它线程看到,那么就能说明共享变量在线程之间是可见的。如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。Java内存模型(Java Memory Model,JMM)描述了Java程序中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取出变量这样的底层细节。所有的变量都储存在主内存中。每个线程都有自...
2018-04-09 21:26:02
361
原创 java内存的可见性volatile之一
volatile两大作用1、保证内存可见性2、防止指令重排此外需注意volatile并不保证操作的原子性。(一)内存可见性1 概念JVM内存模型:主内存和线程独立的工作内存Java内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存(比如CPU的寄存器),线程只能访问自己的工作内存,不可以访问其它线程的工作内存。工作内存中保存了主内存共享变量的副本,线程要操作这些...
2018-04-09 21:15:27
233
原创 java分布式缓存技术
开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦。本文主要是分享了5个常用的Java分布式缓存框架,这些缓存框架支持多台服务器的缓存读写功能,可以让你的缓存系统更容易扩展。1、Ehcache – Java分布式缓存框架Ehcache是一个Java实现的开源分布式缓存框架...
2018-04-09 11:28:04
1392
原创 ConcurrentHashMap原理分析之一
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开发中获益非浅...
2018-04-09 10:53:31
275
原创 JAVA线程池原理详解
线程池的优点1、线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。线程池的创建1 public ThreadPoolExecutor(int corePoolSize,2 int maximumPoolSize,...
2018-04-08 13:47:01
241
原创 Java线程的什么周期的5种状态及切换
ava中的线程的生命周期大体可分为5种状态。1.新建(NEW):新创建了一个线程对象。2.可运行(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3.运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码...
2018-04-08 13:43:43
365
原创 线程池之一
为什么用线程池创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率例如:记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3如果T1+T3>T2,那么是不是说开启一个线程来执行这个任务太不划算了!正好,线程池缓存线程,可用已有的闲置线程来执行新任务,避免了T1+T3带来的系统开销线程并发数量过多,抢占系统资源从而导致阻塞我们知道线程能共享系统资源,如...
2018-04-08 13:17:59
159
原创 Spirng IOC与DI
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框...
2018-04-08 13:02:39
152
原创 TCP/IP和UDP的区别之二
TCP、UDP详解1、传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间,无法了解数据未达终点的状态。因此有必要增强网络层提供服务的服务质量。2、引入传输层的原因 面向连接的传输服务与面向连接的网络服务类似,都分为建立连接、数据传输、释放连接三个阶段;编址、寻址、流控制也是类似的。无连接的传输服务与无连接的网络服务也非常类似。一个很显然的问题:既...
2018-04-08 10:43:30
330
原创 TCP HTTP UDP 区别之一
TCP HTTP UDP: 这是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。 socket: 这是为了实现以上的通信过程而建立成来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过socket进行通信,而通信的规则采用指定的协议。 socket只是一种连接模式,不是协议在c程序中,http,udp连接,都是基于socket的...
2018-04-08 10:04:05
277
原创 localhost和127.0.0.1的区别
修改host文件原理http://www.zhihu.com/question/19782572localhost与127.0.0.1的区别是什么 相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析。 看来这个入门问题还有人不清楚,其实这两者是有区别的。 localhost也叫local ,正确的解释是:本地服务器 127.0.0.1...
2018-03-27 16:26:42
675
原创 maven仓库详解
什么是Maven仓库在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等。每建立一个项目,你都需要建立这样的一个/lib目录,然后复制一对jar文件,这是很明显的重复。重复永远是噩梦的起点,多个项目不共用相同的jar文件,不仅会造成磁盘资源的浪费,也使得版本的一致性...
2018-02-28 10:51:50
200
原创 ps aux|grep xxx详解
linux命令ps aux|grep xxx详解要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令.使用该命令 可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.
2017-11-02 14:50:48
18306
原创 泛型之类使用了泛型的示例
package fft.generics;//表示ship的类型继承了number的字段public class Ship { private T t; public Ship(T t){ this.t=t; } public void print(){ Syst
2016-12-23 15:25:24
442
原创 泛型之在方法体内使用泛型参数
package fft.generics;//在方法体内使用泛型参数public class Util { //该方法用于比较两个Pair对象是否相等。 //泛型参数必须写在方法返回类型boolean之前 public static boolean compare(Pair p1, Pair p2) {
2016-12-23 15:07:33
951
原创 泛型之多种类型参数
package fft.generics;//定义接口,接口中使用泛型public interface Pair { public K getKey(); public V getValue();}package fft.generics;/** * * @ClassName: Order
2016-12-23 14:35:55
3612
原创 泛型之三 支持多个方法重载
package fft.generics;import java.util.Arrays;//泛型支持多个数据类型,可以对方法重载public class Fox { //支持不同类型的方法重载 public void write(T t,T[] ta){ System.out.
2016-12-23 13:28:40
535
原创 如何初始化(新建)一个方法 ,如何方法逆向调用对象
package fft.property.copy;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;//新建一个计算器的类public class Calculator { public int add(
2016-12-23 10:05:43
370
匿名内部类核心重点知识讲解和经典例子讲解
2011-10-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人