- 博客(60)
- 收藏
- 关注
转载 多台Linux之间文件共享
环境是CentOS7。采用NFS实现。第一步:服务端安装nfs和rpcbind并启动检查是否已经安装表示nfs已经安装表示rpcbind已经安装。如果没检测到则安装查看是否启动:表示已经启动,如果没启动则启动。第二部:客户端安装nfs和rpcbind并启动步骤如上:第三部:配置服务端nfs配置文件1. vi /e...
2019-09-26 00:28:00
369
转载 jvm 图形化工具之jconsole
原先我们学习了jvm的命令行工具,现在我们来学习命令行的可视化工具jconsole:为了测试我们启动原先的springboot项目jconsole工具jconsole(Java Monitoring and Management Console)是一种基于 JMX 的可视化监视、管理工具,它管理部分的功能是针对 JMXMBean 进行管理,由于 MBean 可以使用代码、...
2019-09-25 00:04:00
176
转载 java 线程6种状态的转换
一、6种状态初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。...
2019-09-24 22:26:00
173
转载 jvm 线上命令工具
概述给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。数据包括:运行日志、异常堆栈、GC 日志、线程快照。使用(threaddump/javacore文件)、堆转储快照( heapdump/hprof文件)等。使用适当的虚拟机监控和分析的工具可以加快我们分析数据、定位解决问题的速度。主要包含以下工具:通过工具我们解决死锁和查...
2019-09-24 17:50:00
166
转载 jvm 垃圾收集器
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。虽然我们对各个收集器进行比较,但并非要挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做的就是根据具体应用场景选择适合自己的垃圾收集器。试想一下:如果有一种四海之内、任何场景下都适用的完美收集器存在,那么我们的 HotSpot 虚拟机就不会实现那么多不同的垃圾收...
2019-09-24 00:46:00
71
转载 jvm 垃圾收集算法
经过上篇如何判断对象是否死亡,那么jvm要对死亡的对象进行垃圾回收,垃圾回收的算法主要有以下几种:一、标记-清楚算法该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。它是最基础的收集算法,后续的算法都是对其不足进行改进得到。这种垃圾收集算法会带来两个明显的问题:一个是效率问题,标记和清除两个过程的效率都不高一个是...
2019-09-24 00:02:00
79
转载 jvm 判断对象死亡
堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断那些对象已经死亡(即不能再被任何途径使用的对象)。判断兑现死亡的方式主要有,引用记数法和可达性性分析算法引用记数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中并没...
2019-09-23 23:37:00
121
转载 jvm 内存分配
java堆内存概述Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是堆内存中对象的分配与回收。Java 堆是垃圾收集器管理的主要区域,因此也被称作GC 堆(Garbage Collected Heap).从垃圾回收的角度,由于现在收集器基本都采用分代垃圾收集算法,所以 Java 堆还可以细分为:新生代和老年代:再细致一...
2019-09-23 04:24:00
80
转载 jvm 对象奥秘
上一篇jvm博客中我们学习了jvm的内存模型,本篇中我们来探索对象是如何创建的,对象的内存布局,对象是如何访问到的。对象的创建过程第一步:类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中(JDK1.7 及之后版本的 JVM 已经将运行时常量池从方法区中移了出来,在 Java 堆(Heap)中开辟了一块区域存放运行时常量池)定位到这个类的...
2019-09-23 00:34:00
69
转载 mysql事务测试及delete和update是使用行级锁,还是表级锁
mysql默认的引擎是InnoDB有如下表:表中的数据有:开启事务(begin),执行更新语句,将'user_name'全部更新为'woxbwo',但不提交(commit)事务:在事务内查询:事物外查询,新开一个窗口查询:可以发现,事务外查到的数据author没有发生改变提交事务:顺便测试MySQL插入是表级锁还是行级锁开启...
2019-09-18 00:55:00
1466
转载 sql语句中where后边的哪些条件会使索引失效 -- SQL语句优化
在我们编写sql的过程中where的条件使用不当会使索引(index)失效1. 在 where 子句中使用!=或<>操作符,会使引擎放弃使用索引而进行全表扫描2. 在 where 子句中对字段进行 null 值判断,会使引擎放弃使用索引而进行全表扫描3. 在 where 子句中使用 or 来连接条件,会使引擎放弃使用索引而进行全表扫描可改为:...
2019-09-17 23:46:00
4420
转载 java nio详解
NIO简介NIO是一种同步非阻塞的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector,Buffer等抽象。NIO中的N可以理解为Non-blocking,不单纯是New。它支持面向缓冲的,基于通道的I/O操作方法。 NIO提供了与传统BIO模型中的Socket和ServerSocket相对应的So...
2019-09-16 04:13:00
98
转载 mysql数据库优化概述详解
mysql查询的过程图为什么要优化系统的吞吐量瓶颈往往出现在数据库的访问速度上随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢数据是存放在磁盘上的,读写速度无法和内存相比如何优化设计数据库时:数据库表、字段的设计,存储引擎利用好MySQL自身提供的功能,如索引等横向扩展:MySQL集群、负载均衡、读写分离SQL语句的优...
2019-09-16 02:33:00
335
转载 java 序列化和反序列化
什么是序列化和反序列化?序列化是将 Java 对象转换成与平台无关的二进制流,而反序列化则是将二进制流恢复成原来的 Java 对象,二进制流便于保存到磁盘上或者在网络上传输。如何实现序列化和反序列化如果想要序列化某个类的对象,就需要让该类实现 Serializable 接口或者 Externalizable 接口。如果实现 Serializable 接口,由于该接口只是个...
2019-09-15 22:48:00
58
转载 java io框架详解
一. IO的分类从数据来源或者说是操作对象角度看,IO 类可以分为:1. 文件(file):FileInputStream、FileOutputStream、FileReader、FileWriter2. 管道操作:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter3. 数组([]):字...
2019-09-15 21:58:00
157
转载 redis缓存 面试总结
缓存的收益和成本1、缓存带来的回报高速读写:缓存加速读写速度:CPU L1/L2/L3 Cache、Linux page Cache加速硬盘读写、浏览器缓存、Ehcache缓存数据库结果降低后端负载:后端服务器通过前端缓存降低负载: 业务端使用Redis降低后端MySQL负载等 2、缓存带来的代价数据不一致:缓存层和数据层有时间窗口不一致,和更新策略有关代...
2019-09-15 01:50:00
102
转载 三 redis五种数据结构的操作
一 String1、set key value [ex 秒数] / [px 毫秒数] [nx] /[xx]如: set a 1 ex 10 , 10秒有效Set a 1 px 9000 , 9秒有效注: 如果ex,px同时写,以后面的有效期为准如 set a 1 ex 100 px 9000, 实际有效期是9000毫秒nx: 表示key不存在时,执行操作...
2019-09-15 00:55:00
131
转载 二 redis的安装启动
下载官网地址:http://download.redis.io/releases/redis-5.0.5.tar.gz安装首先安装编译环境出现如下图表示安装成功解压解压完成如下编译测试编译是否有问题解决编译问题出现下图,表示测试成功安装安装完成!启动方式直接启动表示启动成功测试...
2019-09-14 23:51:00
71
转载 java集合框架详解
一、概述Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系,(注意:Map不是Collection的子接口)。数据与集合的区别数组长度不可变化而且无法保存具有映射关系的数据;集合类用于...
2019-09-14 03:52:00
92
转载 数据结构 数组,链表,栈,队列理解
数据结构数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。再简单描述一下:数据结构就是描述对象间逻辑关系的学科。数据存储结构常用的数据存储方式有两种:顺序存储,非顺序存储。顺序存储就是把数据存储在一块联系的存储介质(硬盘或内存等)中。反之则是非顺序存储。Java中的数组就是典型的顺序存储,链表就是非顺序存储。数组存储数据时会开辟出一块联系内存,按顺序存储。链表先...
2019-09-14 02:11:00
149
转载 单例模式(Singleton)
简介单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。省去了new操作符,降低了系统内存的使用频率,减轻GC压力。有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个...
2019-09-11 12:52:00
124
转载 简单的工厂模式(Simple Factory)
使用场景工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。介绍它是由一个工厂对象决定创建出哪一种产品类的实例,又叫做静态工厂方法(Static Factory Meth...
2019-09-10 18:03:00
97
转载 设计模式-六大原则
总原则:开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会提到这点。1、单一职责原则不要存在多于一个导致类变更的原因,也...
2019-09-10 17:17:00
56
转载 一 分布式缓存redis概念
什么是NOSQLNoSQL是不同于传统的关系数据库的数据库管理系统的统称。其两者最重要的区别是NoSQL不使用SQL作为查询语言。NoSQL数据存储可以不需要固定的表格模式。NoSQL是基于键值对的,可以想象成表中的主键和值的对应关系。NoSQL:redis、memcached、mongodb、guava(loadingCache)什么是RedisRedis 是一个开源(BS...
2019-09-10 01:59:00
107
转载 jvm 内存模型
cpu和计算机内存的交互在计算机中,cpu和内存的交互最为频繁,相比内存,磁盘读写太慢,内存相当于高速的缓冲区但是随着cpu的发展,内存的读写速度也远远赶不上cpu。因此cpu厂商在每颗cpu上加上高速缓存,用于缓解这种情况。现在cpu和内存的交互大致如下。cpu上加入了高速缓存这样做解决了处理器和内存的矛盾(一快一慢),但是引来的新的问题是缓存一致性缓存一致性...
2019-09-09 02:58:00
82
转载 java 运算
参数传递Java 的参数是以值传递的形式传入方法中,而不是引用传递。以下代码中 Cat cat的 cat是一个指针,存储的是对象的地址。在将一个参数传入一个方法时,本质上是将对象的地址以值的方式传递到形参中。因此在方法中使指针引用其它对象,那么这两个指针此时指向的是完全不同的对象,在一方改变其所指向对象的内容时对另一方没有影响。如果在方法中改变对象的字段值会改变原对象该字...
2019-09-06 18:18:00
105
转载 java String
概览String 被声明为 final,因此它不可被继承。(Integer 等包装类也不能被继承)在 Java 8 中,String 内部使用 char 数组存储数据。在 Java 9 之后,String 类的实现改用 byte 数组存储字符串,同时使用coder来标识使用了哪种编码。value 数组被声明为 final,这意味着 value 数组初始化之后就...
2019-09-06 17:26:00
62
转载 java的数据类型
基本概念bit(位)位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1”。byte(字节)字节是计算机存储容量的基本单位,一个字节由8位二进制数组成。在计算机内部,一个字节可以表示一个数据或者一个英文字母,但是一个汉字需要两个字节表示。换算1Byte=8bit1KB=1024Byte(字节)=8*1024bit1MB=1024KB1GB=1...
2019-09-06 15:22:00
74
转载 java编译期和运行期
java编译期编译期是指编译器将源代码翻译为机器能识别的代码,java为编译为jvm认识的字节码文件。举个例子,当我们作为开发人员,在电脑上拼死拼活写了一个版本的代码,然后将代码提交到git上去,当我们用jekins或其他工具将代码从git上clone下来,使用mvn package,或者mvn intall打包的过程就叫编译期。是指将java代码编译为机器识别的字节码文件的...
2019-09-06 11:07:00
78
转载 java.lang.OutOfMemoryError-OOM分析过程
例子编写出现OutOfMemoryError的代码IDEA配置JVM的启动参数点击Edit Configurations...运行结果分析Dump下的文件:分析工具采用IBM HeapAnalyzeer网盘现在地址:https://pan.baidu.com/s/1qV4A4fm8fSGwpRNq8ZmqaQ下载完成之后是...
2019-09-06 01:21:00
125
转载 Http协议详解
一、基础概念URIURI 包含 URL 和 URN。请求和响应报文请求报文响应报文二、HTTP请求方法客户端发送的 请求报文 第一行为请求行,包含了方法字段。GET获取资源当前网络请求中,绝大部分使用的是 GET 方法。HEAD获取报文首部和 GET 方法类似,但是不返回报文实体主体部分。主要...
2019-09-05 18:57:00
145
转载 java-并发编程Executor、Executors、ExecutorService
Executor简介Executor框架便是Java 5中引入的,其内部使用了线程池机制,它在java.util.cocurrent 包下,通过该框架来控制线程的启动、执行和关闭,可以简化并发编程的操作。因此,在Java 5之后,通过Executor来启动线程比使用Thread的start方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点:有助于避免...
2019-09-05 15:36:00
107
转载 面向对象的思想
一、三大特性封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外的接口使其与外部发生联系。用户无需关心对象内部的细节,但可以通过对象对外提供的接口来访问该对象。优点:减少耦合:可以独立地开发、测试、优化、使用、理解和修改减轻维护的负担:可以更容易被程...
2019-09-05 10:40:00
150
转载 java-线程池
为什么要使用线程池诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP )、通过 JMS队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序中经常出现的情况是:单个任务处理的时间很短而请求的数目却是巨大的。每当一个请求到达就创建...
2019-09-05 02:31:00
61
转载 java-并发工具类
CountDownLatchCountDownLatch是一种java.util.concurrent包下一个并发工具类,它允许一个或多个线程等待直到在其他线程中一组操作执行完成。可以控制线程的执行顺序例子:学校操场的跑道上8位选手首先进行1000米赛跑,跑完裁判清空跑道进行跨栏比赛。结果:总结CountDownLatch end = new ...
2019-09-05 01:27:00
100
转载 java-同步容器
为什么会出现同步容器java集合框架图在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。Collection和Map是一个顶层接口,而List、Set、Queue则继承了Collection接口,分别代表数组、集合和队列这三大类容器。Arr...
2019-09-04 01:23:00
76
转载 java-Thread.join进行线程通信
使用场景线程A执行到一半,需要一个数据,这个数据需要线程B去执行修改,只有B修改完成之后,A才能继续操作线程A的run方法里面,调用线程B的join方法,这个时候,线程A会等待线程B运行完成之后,再接着运行代码:结果:源码 完成!!!转载于:https://www.cnblogs.com/woxbwo/p/11450782.html...
2019-09-03 01:48:00
98
转载 java-使用管道流进行线程间通信
使用管道流进行通信以内存为媒介,用于线程之间的数据传输。主要有面向字节:【PipedOutputStream、PipedInputStream】面向字符【PipedReader、PipedWriter】代码读线程类:测试类结果:源代码地址:https://github.com/woxbwo/is-concurrent完成!!!...
2019-09-03 01:30:00
115
转载 java-线程间的通信
wait、notify、notifyAll何时使用在多线程环境下,有时候一个线程的执行,依赖于另外一个线程的某种状态的改变,这个时候,我们就可以使用wait与notify或者notifyAllwait跟sleep的区别wait会释放持有的锁,而sleep不会,sleep只是让线程在指定的时间内,不去抢占cpu的资源notify跟notifyAll的区别...
2019-09-03 01:21:00
47
转载 java-实现自己的锁
代码在这里我们只是实现lock()和unLock()方法测试结果源代码地址:https://github.com/woxbwo/is-concurrent完成!!! 转载于:https://www.cnblogs.com/woxbwo/p/11441289.html...
2019-09-01 03:36:00
96
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人