梦里蓝天

像风一样自由
私信 关注
梦里藍天
码龄11年

不积跬步,无以至千里;不积小流,无以成江海

  • 227,173
    被访问量
  • 185
    原创文章
  • 23,463
    作者排名
  • 621
    粉丝数量
  • 于 2010-01-08 加入CSDN
获得成就
  • 获得95次点赞
  • 内容获得170次评论
  • 获得182次收藏
荣誉勋章
兴趣领域
  • #后端
    #Java#架构#PHP#Redis#Spring Boot#Spring#MySQL
TA的专栏
  • Java
    95篇
  • JVM那些事
    20篇
  • OpenCV4.2 For Java
    28篇
  • 阿里Java手册
    10篇
  • 设计模式
    16篇
  • Linux
    9篇
  • Axure
    3篇
  • Spark 大数据
    7篇
  • 系统架构
    12篇
  • IT项目管理
    10篇
  • PHP
    10篇
  • JavaScript
    7篇
  • Android
    4篇
  • Ant Design
    4篇
  • Python
    4篇
  • Mysql
    10篇
  • JNI
    6篇
  • Tomcat
    6篇
  • QT5
    4篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

设计模式の解释器模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
6阅读
0评论
0点赞
发布博客于 13 小时前

设计模式の命令模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
11阅读
0评论
0点赞
发布博客于 昨天

设计模式の责任链模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
12阅读
0评论
0点赞
发布博客于 2 天前

设计模式の代理模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
16阅读
0评论
0点赞
发布博客于 3 天前

设计模式の享元模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
8阅读
0评论
0点赞
发布博客于 3 天前

设计模式の外观模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
8阅读
0评论
0点赞
发布博客于 4 天前

设计模式の装饰器模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计
原创
11阅读
0评论
0点赞
发布博客于 4 天前

设计模式の组合模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
13阅读
0评论
0点赞
发布博客于 5 天前

设计模式の过滤器模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
9阅读
0评论
0点赞
发布博客于 5 天前

设计模式の桥接模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
9阅读
0评论
0点赞
发布博客于 6 天前

设计模式の适配器模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
17阅读
0评论
0点赞
发布博客于 6 天前

设计模式の原型模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
14阅读
0评论
0点赞
发布博客于 7 天前

设计模式の建造者模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
11阅读
0评论
0点赞
发布博客于 7 天前

Java clone浅克隆、clone深克隆、序列化深克隆

克隆(复制)在Java中是一种常见的操作,目的是快速获取一个对象副本。克隆分为深克隆和浅克隆。浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。浅拷贝案例public class Cat implements Cloneable{ private String name; private Skill skill; /** * @retur
原创
23阅读
0评论
0点赞
发布博客于 7 天前

字符串intern方法与大厂面试题解

intern方法intern方法的作用就是尝试将一个字符串放入StringTable中,如果不存在就放入StringTable并返回StringTable中的地址(如果这个字符串是通过new String()方式创建的,则StringTable内放置的就是new String生成的对象的地址,而不是实实在在的字符串值),如果存在的话就直接返回StringTable中的地址。这是jdk1.7、1.8版本中intern方法的作用,jdk1.6版本中有些不同,1.6中intern尝试将字符串对象放入String
原创
59阅读
3评论
1点赞
发布博客于 8 天前

设计模式の单例模式(6种)

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
9阅读
0评论
1点赞
发布博客于 8 天前

设计模式の抽象工厂模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
12阅读
0评论
1点赞
发布博客于 8 天前

字符串拼接操作在底层是如何操作的?

首先看下在日常开发中我们操作字符串拼接的集中方式: public static void main(String[] args) { String s1 = "a"+"b"+"c"; String s2 = "abc"; String s3 = s2+""; final String s4 = "abc"; String s5 = s4+""; System.out.println("s1==s2:" + (s1 == s2)); //true System.
原创
19阅读
0评论
1点赞
发布博客于 9 天前

设计模式の简单工厂模式

设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大
原创
18阅读
0评论
0点赞
发布博客于 9 天前

JVM虚拟机运行时数据区のStringTable 字符串常量池

什么是StringTableStringTable 字符串常量池,是专门用来保存字符串的一块内存,它的底层数据结构是HashTable,每个元素都是key-value结构,采用了数组+单向链表的实现方式。再jdk1.6以前默认大小是1009,jdk1.7以后默认大小是60013,1.8以后允许设置的最小大小为1009。过小的字符串常量池对性能有很大的影响。所有的字符串都保存到StringTable中吗?答案是否定的,并不是所有字符串都是保存到字符串常量池中,我们知道,再创建字符串是我们一般使用2中方法
原创
27阅读
0评论
1点赞
发布博客于 10 天前

JVM错误日志hs_err_pid****.log分析

<!-- 日志头文件开始 --><!-- 告诉你在Java运行环境检测到一个致命的错误 --># A fatal error has been detected by the Java Runtime Environment: -> <!-- EXCEPTION_ACCESS_VIOLATION (0xc0000005) 异常访问或非法访问,pc=0x000000006ef835ea 程序计数器的值,pid=2936 进程号,tid=0x0000000000000
原创
101阅读
0评论
1点赞
发布博客于 2 月前

JVM虚拟机运行时数据区の逃逸分析

堆是分配对象存储的唯一选择吗 或者说 对象只能在堆上分配吗?在《深入理解Java虚拟机》中关于Java堆内存有这样一段描述: .随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。在Java虚拟机中,对象是在Java堆中分配内存的,这是一个普遍的常识。但是,有一种特殊情况,那就是 如果经过逃逸分析(Escape Analysis)后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配。 这样就无
原创
36阅读
0评论
0点赞
发布博客于 2 月前

JVM虚拟机运行时数据区の对象在堆内存中分配的过程

初始伊甸园区内存满经过一次GC伊甸园区内存满经过一次GC后伊甸园区清空,后面新建的对象还是往伊甸园里放,伊甸园区不可达对象清理,可达对象年龄+1放到to区,同时to与from互换。伊甸园区内存满经过二次GC伊甸园区内存满经过二次GC后伊甸园区清空,后面新建的对象还是往伊甸园里放,伊甸园区不可达对象清理,可达对象年龄+1放到to区,同时检查from区中的对象是否可达,可达对象年龄+1并移动到to区,不可达清理。同时to与from互换。经过多次(默认15)GC后,对象年龄到达15的移动到老年代。
原创
38阅读
0评论
0点赞
发布博客于 2 月前

JVM虚拟机运行时数据区の堆内存设置大小

原创
36阅读
0评论
0点赞
发布博客于 2 月前

JVM虚拟机运行时数据区の堆

堆得特点一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。《Java虚拟机规范》中对Java堆的描述是:所有的对象实例以及数组都应当在
原创
27阅读
0评论
0点赞
发布博客于 2 月前

JVM虚拟机运行时数据区の本地方法栈

什么是本地方法本地方法就是JVM所在的运行环境中的方法,比如windows系统或者linux系统中用C或者C++编写的方法。本地方法的出现主要是因为JAVA无法对操作系统底层进行操作,但是可以通过本地方法接口JNI(java native interface)调用其他语言来实现底层的访问。Java中如何实现本地方法在Java方法上添加native关键字即可调用本地方法(当然不像一句话说的这么简单,还需要遵循JNI的规范)。一个native方法就是一个Java调用非Java代码的接口。在定义一个nat
原创
34阅读
0评论
0点赞
发布博客于 2 月前

服务提供者注册zookeeper提示 NoAuth for /dubbo/****

解决方法:关闭ZooKeeper,将zoo.cfg里的自己设定的dataDir和dataLogDir路径下的version-2文件夹删除,然后重启即可。
原创
149阅读
0评论
0点赞
发布博客于 2 月前

JVM虚拟机运行时数据区の栈

栈每当虚拟机启动一条线程时,虚拟机就会在内存中开辟一块栈空间,因此,栈空间是私有的,栈只有2种操作,入栈与出栈。每当线程调用当前类(当前线程正在执行的类称为当前类)方法时(当前类执行的方法称为当前方法),都会将,新栈压入,成为当前帧(在栈顶的栈帧称为当前栈帧)。每一个栈帧包含的内容有局部变量表、操作数栈、动态链接、方法返回地址和一些额外的附加信息。在编译代码时,栈帧需要多大的局部变量表,多深的操作数栈都可以完全确定的,并写入到方法表的code属性中。stack:操作数栈深度locals:局部变
原创
54阅读
1评论
0点赞
发布博客于 2 月前

JVM虚拟机运行时数据区のPC寄存器(程序计数器)

程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令、分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。程序计数器是线程私有的,它的生命周期与线程相同(随线程而生,随线程而灭)。由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的
原创
31阅读
2评论
0点赞
发布博客于 2 月前

JVM虚拟机运行时数据区の方法区详解

方法区 1.8之前的永久代,之后的元空间方法区用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区是JVM规范中的对堆内存管理的规范,而永久代或者元空间是对规范的具体实现,JDK1.7中,存储在永久代的部分数据就已经转移到了Java Heap或者是 Native Heap。但永久代仍存在于JDK1.7中,并没完全移除,之后1.8种元空间替代方法区。元空间本质和永久代类似,都是对JVM规范中方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用
原创
27阅读
1评论
0点赞
发布博客于 2 月前

Eclipse中使用javap反编译字节码

javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具。主要用来查看编译器生成的字节码。这样能让我们更好的知道编译器对我们的代码做了什么。eclipse下配置eclipse中点击工具栏: Run > External Tools > External Tools Configuration双击 Program添加配置Name: javaplocation: D:\java\bin\javap.exe(自己的javap.exe路径
原创
60阅读
0评论
0点赞
发布博客于 2 月前

JVM虚拟机运行时数据区

运行时数据区都包含哪些区域在class文件通过类加载子系统正常加载后,程序就来到了运行时数据区开始顺序执行,运行时数据区包含哪些区域,这些区域又是如何配合执行的呢?先来看图(图片中各部分占用的比例并不是真正的按实际内存比例画的)可以看到,运行时数据区主要包含:方法区:堆空间,栈空间,程序计数器,本地方法栈5部分。这里先说一下每个部分的主要功能,对于详细的解释,在单独文章来说。方法区方法区是一个抽象的概念,在JVM规范中并没有指定具体该怎么实现,类似像Java的接口,具体实现每个虚拟机可能多少有些不
原创
27阅读
0评论
0点赞
发布博客于 2 月前

JVM类加载的双亲委派机制

抛砖引玉:JVM是如何把 String class 加载进来呢?我们来猜想下。首先,String 类属于 Java 核心类,位于 $JAVA_HOME/jre/lib 目录下,该目录下的类会由 BootstrapClassLoader 进行加载。没错,它确实是由 BootstrapClassLoader 进行加载。但,这种回答的前提是你已经知道了 String 在 $JAVA_HOME/jre/lib 目录下。那么,如果你并不知道 String 类究竟位于哪呢?或者我希望你去加载一个 unknown
原创
46阅读
0评论
0点赞
发布博客于 2 月前

分享一个学习JVM的桌面1920*1080

使用360桌面把桌面图标收纳到盒子里,桌面只显示这张图,实时看加深印象!
原创
47阅读
0评论
0点赞
发布博客于 2 月前

一个字节码文件加载到JVM虚拟机都发生了什么

看一下字节码文件总的生命历程图中第一阶段的加载阶段就是一个class文件加载到JVM的过程,可以看到,整个过程可以分成3个大的阶段,其中中间一个过程又分成的3个小的阶段。从加载器加载到链接,其中链接又分为验证,准备,解析,最后是初始化。类的加载过程Java 虚拟机一般使用 Java 类的流程为:首先将开发者编写的 Java 源代码(.java文件)编译成 Java 字节码(.class文件),然后类加载器会读取这个 .class 文件,并转换成 java.lang.Class 的实例。有了该 Cla
原创
38阅读
0评论
0点赞
发布博客于 2 月前

JVM发展过程中出现过哪些优秀的虚拟机

Sun Classic VM早在1996年Java1.0版本的时候,Sun公司发布了一款名为sun classic VM的Java虚拟机,它同时也是世界上第一款商用Java虚拟机,JDK1.4时完全被淘汰。这款虚拟机内部只提供解释器。如果使用JIT编译器,就需要进行外挂。但是一旦使用了JIT编译器,JIT就会接管虚拟机的执行系统。解释器就不再工作。解释器和编译器不能配合工作。现在hotspot内置了此虚拟机。Exact VM为了解决上一个虚拟机问题,jdk1.2时,sun提供了此虚拟机。Exa
原创
46阅读
0评论
0点赞
发布博客于 2 月前

JVM虚拟机的架构模型

栈栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。寄存器寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路
原创
32阅读
0评论
0点赞
发布博客于 2 月前

JVM是个什么东西,是怎么来工作的?

JVM介绍JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM的工作方式Java虚拟机本质上就是一个程序,当它在命令行上启动的时
原创
67阅读
0评论
0点赞
发布博客于 2 月前

Linux安装redis并设置开机启动

下载以5.0.10为例,安装到服务器的/home目录下。先进入/home/install目录,没有新建。并下载安装包cd /home/installwget https://download.redis.io/releases/redis-5.0.10.tar.gz解压把文件解压到/home目录下tar -xzvf /home/install/redis-5.0.10.tar.gz -C /home/此时在home文件夹下面就有一个redis-5.0.10文件夹,在新建一个文件夹,名字为r
原创
58阅读
0评论
0点赞
发布博客于 2 月前

Linux系统中/etc/init.d和/etc/rc.local的区别

通过对/etc/init.d或者/ext/rc.local的设置都能够实现开机启动,那这两种有什么区别呢?/etc/init.d/etc/rc.local这个是一个文件夹,里面放的是shell脚本,这里面的脚本头部需要定义启动的级别这是一个文件,文件中保存的是要执行的shell脚本的路径一般都是rpm安装时自带的启动,停止,重启等功能脚本一般是用户自定义的脚本执行权限高,有0-6级别只能在执行权限3以后执行同级别以K开头的脚本运行在以S开头的脚本之前按文件中的
原创
59阅读
0评论
0点赞
发布博客于 2 月前

dubbo-admin打包并在linux系统上延时自动启动

打包在github上下载下dubbo-admin项目后只要修改下zookeeper的地址与登陆的账号密码即可打包使用,在打包时确认提前安装了nodejs,下面命令进行打包。mvn clean #清理mvn install -Dmaven.test.skip=true #跳过测试打包打包成功后在服务器新建文件夹 /home/dobboAdmin8081,并把jar包上传到文件夹中开机自启动脚本新建sh文件vim /home/dubboAdmin8081/startup.sh把下面内容粘贴进
原创
71阅读
1评论
1点赞
发布博客于 2 月前

Linux-centos7-环境安装zookeeper设置开机启动

依赖zookeeper依赖Java环境,安装前请确认已经正确安装Java。Java -version下载zookeeper并解压使用的是Apache ZooKeeper 3.5.8,可以进入这个页面下载需要的版本。https://zookeeper.apache.org/releases.html在linux服务器上新建文件夹并下载mkdir /home/installcd /home/installwget https://mirrors.tuna.tsinghua.edu.cn/
原创
59阅读
0评论
0点赞
发布博客于 2 月前

Axure利用动态面板做页面滚动原型图

首先在页面中拖入一个动态面板,设好宽度和高度 300 560 高度一定要记得。吧这个面板命名为外层面板双击外层面板,在外层面板state1中拖入一个新的动态面板,命名为内层面板,宽度300 高度860 高度要记住。注意:这里的高度和宽度都是根据实际原型的尺寸设置的,这里为了后面方便计算随便设的。双击内层面板,在内层面板的state1中放置元素,进行排版。返回主体页面,选择外层面板,设置状态为下图,注意顶部边界是860-560,取负数。效果:...
原创
163阅读
0评论
1点赞
发布博客于 2 月前

Axure实现轮播图效果,Axure如何循环播放

首先在页面中使用动态面板,设置好尺寸及名称双击动态面板 在面板state1中拖入元素新建一个新的state2,并放入元素返回页面,添加页面载入时动作,给整个页面添加还是给这个元素添加没有区别查看效果...
原创
184阅读
0评论
0点赞
发布博客于 3 月前

Axure原型图小字体在浏览器显示变大

在极少数制作原型图时需要12以下的文字,但是在浏览器中浏览时字体就会变大。这个问题是因为浏览器有最小字体的设置,一般在浏览器中设置>界面设置>字体大小中设置。
原创
223阅读
0评论
0点赞
发布博客于 3 月前

CodeIgniter伪静态 使用PHP7以上伪静态错误 CodeIgniter伪静态出现404或500错误

正确的伪静态设置:修改http.conf去掉Apache里的http.conf文件里的#LoadModule rewrite_module modules/mod_rewrite.so 前边的#mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面.把http.conf里的AllowOverride None 都改成AllowOverride AllAllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为no
原创
178阅读
0评论
0点赞
发布博客于 4 月前

MySQL 全文索引 FULLTEXT INDEX

MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。在MySQL5.6以下,只有MyISAM表支持全文检索。在MySQL5.6以上Innodb引擎表也提供支持全文检索。建表插入数据建立测试表CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` text, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=
原创
153阅读
0评论
0点赞
发布博客于 4 月前

Ant Design Pro V5最新版安装跳坑指南

使用cnpm代替npm国内使用npm速度很慢,下载包容易出错,国内使用cnpm替代npm包管理器npm install -g cnpm --registry=https://registry.npm.taobao.org使用官方推荐的包管理方式:由于国内网络和前端的特殊性,在安装依赖等方面可能会失败或导致无法启动,浪费大量的时间我们推荐如下的技术栈来帮助我们顺畅的开发。包管理器推荐使用 tyarn 来进行包管理,可以极大地减少 install 的时间和失败的概率,并且完全兼容 npm。如
原创
730阅读
0评论
0点赞
发布博客于 4 月前

yarn指向了java node中的yarn与hadoop的yarn冲突问题

使用yarn create umi提示create找不到,使用yarn -version显示的是Java的版本信息,这是因为电脑上安装过Hadoop,导致2个yarn有冲突,解决办法是使用yarnpgk,它等同于yarn。
原创
197阅读
0评论
0点赞
发布博客于 4 月前

Ant Design of Vue 浏览器引入Demo

打包组件引入方式:<template> <a-cascader :options="options" :default-value="['zhejiang', 'hangzhou', 'xihu']" @change="onChange" /></template><script>export default { data() { return { options: [ {
原创
710阅读
0评论
0点赞
发布博客于 4 月前

Ant Design of React 浏览器引入Demo

打包组件引入方式:import { DatePicker, Space } from 'antd';function onChange(date, dateString) { console.log(date, dateString);}ReactDOM.render( <Space direction="vertical"> <DatePicker onChange={onChange} /> </Space>, mountNode,
原创
182阅读
0评论
0点赞
发布博客于 4 月前

Spark双集合(RDD)之间的操作-差集,交集,合集,笛卡尔积等

def main(args:Array[String]){ // 1. 创建 SparkConf对象, 并设置 App名字 val conf:SparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount"); // 2. 创建SparkContext对象 val sc = new SparkContext(conf); // 3. 使用sc创建RD
原创
299阅读
0评论
0点赞
发布博客于 5 月前

Spark常用转换因子介绍

Map(f):作用:使RDD数据集合中的每一个数据与另一个数据组合,返回最终组合后的新的RDD;var res = Array(10,30,40,60,80,90,56,5,9);var rdd = res.map((_,1));结果:(10,1)(30,1)(40,1)(60,1)(80,1)(90,1)(56,1)(5,1)(9,1)
原创
185阅读
0评论
0点赞
发布博客于 5 月前

winutils.exe 支持hadoop2-3 十几个版本

解决Could not locate executable null\bin\winutils.exe in the Hadoop binaries报错问题,解压后选择对应版本放到hadoop的bin目录下
7z
发布资源于 5 月前

Could not locate executable null\bin\winutils.exe in the Hadoop binaries

如果没有下载配置hadoop先下载配置下载地址:https://hadoop.apache.org/releases.html请继续看后面在操作。下载winutils下载地址:https://github.com/SirMin/winutils一定看好winutils 支持哪些hadoop版本,我最先下载的hadoop2.10.0,winutils没有支持的,我也没测试2.9.2的是否在2.10里能用,又下的hadoop2.9.2!!!这是我目前发现的支持hadoop最全的一个开源版本了。下载.
原创
161阅读
0评论
0点赞
发布博客于 5 月前

Eclipse开发Spark WordCount项目

前期的准备Eclipse安装Scala IDE,为Spark开发测试准备 ,请先安装Scala IDE。新建项目转换为maven项目:配置pom.xml<dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <
原创
160阅读
0评论
0点赞
发布博客于 5 月前

Eclipse安装Scala IDE,为Spark开发测试准备

Scala介绍Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。Scala需要运行在JVM上,所以首先要安装Java环境,配置系统环境变量,此处省略安装过程,配置好后使用控制台输入Java -version输出版本号即为安装正确。Eclipse安装Scala IDE
原创
122阅读
0评论
0点赞
发布博客于 5 月前

如何把2个参数不同逻辑相同的方法改造成1个方法

问题来源:https://www.oschina.net/question/3744526_2318802?utm_source=new_idxpackage com.proxy;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; public class Test { public static void main(String[]
原创
371阅读
0评论
2点赞
发布博客于 5 月前

Java中List接口、各子类之间的介绍及区别

List接口介绍List是一种有序的列表(也称为序列 ),用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问列表中的元素,并搜索列表中的元素。与集合不同,列表允许重复的元素,并且通常允许多个空元素。该List接口放置额外的约定,超过在Collection指定接口上的iterator,add,remove,equals和hashCode方法合同。 其他继承方法的声明也包括在这里以方便。常见的List接口实现类1. ArrayList可调整大小的List接口的实现
原创
171阅读
0评论
0点赞
发布博客于 5 月前

Spark入门实战系列 超清自解压 PDF文件

spark入门级资料推荐,开始是介绍简装 编译运行等基础介绍,从第五章开始 Hive介绍及部署 Hive实战 SparkSQL介绍 实战 深入了解运行计划及调优 SparkStreaming原理介绍 实战 SparkMLlib机器学习及SparkMLlib简介 实战 SparkGraphX介绍及实例 分布式内存文件系统Tachyon介绍及安装部署
exe
发布资源于 5 月前

Java中Set接口、各子类之间的介绍及区别

Set接口介绍public interface Set<E> extends Collection<E>一个不包含重复元素的 Collection接口的子接口。Set中的数据不包含满足 e1.equals(e2) 的元素,并且最多包含一个 null 元素。常用的Set接口的实现类1. ConcurrentSkipListSet根据Set中数据的自然排序或由创建时提供的比较器规则 ,根据使用的不同的构造方法,集合的元素将按照排序规则保持排序。插入,删除和访问操作是线程安
原创
204阅读
0评论
0点赞
发布博客于 5 月前

Java中Map接口、各子类之间的介绍及区别

Map接口介绍public interface Map<K,V>将键映射到值的对象。映射不能包含重复的键;每个键最多只能映射到一个值。Map接口提供了三个集合视图,允许将Map的内容视为一组键、一组值或一组键-值映射。映射的顺序被定义为映射集合视图上的迭代器返回元素的顺序。一些Map接口的实现类,比如TreeMap类,是能保证内部数据的顺序的,比如HashMap类则没有。一些常用的实现类1. EnumMappublic class EnumMap<K extends Enu
原创
264阅读
0评论
0点赞
发布博客于 5 月前

解读阿里巴巴Java手册:为什么格式化时间是强制使用yyyy而不能使用YYYY

从手册上可以看出,使用YYYY一般情况下是没有问题的,只是在涉及到跨年的时候才会出现问问题,但这种问题往往也是致命的。像礼拜几是一周的第一天问题一样,中国是把礼拜一作为一周的第一天,而美国把礼拜天作为一周的第一天。在哪一周是一年的第一周这个问题上也存在这种问题。为了解决这个问题,国际标准化组织制订了国际标准ISO 8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO860.
原创
103阅读
0评论
0点赞
发布博客于 6 月前

解读阿里巴巴Java手册:为什么禁止使用 count(列名)或 count(常量)来替代 count(*)

虽然在规定的说明上已经简单的说明了下为什么,但是说的不够详细和全面,我们来看下不用引擎之间的差别:MyISAM引擎把一个表的总行数记录在了磁盘上,执行count(*)会直接返回这个数值,效率很高。InnoDB,执行count(*),需要把数据一行行的从引擎中读出来,然后累积计数。MyISAM做了一个简单的优化,那就是它可以把表的总行数单独记录下来,如果从一张表中使用COUNT(*)进行查询的时候,可以直接返回这个记录下来的数值就可以了,前提是没有where条件。InnoDB需要把数据一行行从数.
原创
197阅读
0评论
0点赞
发布博客于 6 月前

Spark入门(2)-Spark-Shell WordCount 单词统计

Spark-shell 是 Spark 给我们提供的交互式命令窗口,类似Linux的shell命令窗口。启动spark进入spark安装包,右键选择【在终端中打开】,使用的深度Linux系统。输入启动命令:./bin/spark-shell可以通过IP:端口的形式查看spark web。制作2个英文单词文件我们就以spark启动的日志制作2个因为单词文件test1.txt于test2.txt。Using Spark's default log4j profile: org/apache/
原创
129阅读
0评论
0点赞
发布博客于 6 月前

解读阿里巴巴Java手册:为什么禁止开发人员修改serialVersionUID 字段的值

serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException。看一下实现Serializable的类。如果没有serialVersionUID话该类会提示一
原创
69阅读
0评论
0点赞
发布博客于 6 月前

Spark入门(1)-安装并本地模式运行官方事例 计算PI

下载spark包https://archive.apache.org/dist/spark/解压安装包我是用的是深度的Linux系统,解压,复制,粘贴和window一样,双击+右键就可以,把上面的压缩包解压后复制到任意文件夹。运行官方事例,计算PI的值首先进入spark的解压缩包内,右键选择 在终端打开,或者使用CD命令进入。输入下列命令,最后回车bin/spark-submit \--class org.apache.spark.examples.SparkPi \--master loc
原创
82阅读
0评论
0点赞
发布博客于 6 月前

spark-2.1.1-bin-hadoop2.7.tar.bz2 亲测可用

spark-2.1.1-bin-hadoop2.7.tar.bz2 亲测可用,自己入门学习使用的spark包
bz2
发布资源于 6 月前

解读阿里巴巴Java手册:为什么禁止开发人员使用isSuccess作为变量名

JavaBean定义无规矩不成方圆,Java IDE在代码检查或者自动生成时都要遵循一定的Java规范(并非100%,但就是因为不是100%按规范才容易出问题),先来看一下Java规范对于javabean时如何定义的。据JavaBeans™ Specification规定,如果是普通的参数propertyName,要以以下方式定义其setter/getter:public <PropertyType> get<PropertyName>();public void set&l
原创
112阅读
0评论
0点赞
发布博客于 6 月前

有的时候想,在一个四线小城市一直学习编程技术有什么用

 
发布Blink于 5 月前

解读阿里巴巴Java手册:为什么禁止把SimpleDateFormat设为static

SimpleDateFormat介绍SimpleDateFormat用于以区域设置敏感的方式格式化和解析日期。 它允许格式化(日期文本),解析(文本日期)和归一化。日期和时间格式由日期和时间模式字符串指定。 在日期和时间模式字符串中,从’A’到’Z’和从’a’到’z’的非引号的字母被解释为表示日期或时间字符串的组件的模式字母。 可以使用单引号( ’ )引用文本,以避免解释。 "’’"代表单引号。 所有其他字符不被解释; 在格式化过程中,它们只是复制到输出字符串中,或者在解析过程中与输入字符串匹配。例
原创
122阅读
0评论
1点赞
发布博客于 6 月前

安装Linux,学习spark

发布Blink于 6 月前

每个礼拜在济南待4天,现在回去。

 
发布Blink于 6 月前

准备学spark,回去把笔记本换成Linux,要35了

 
发布Blink于 6 月前

解读阿里巴巴Java手册:为什么禁止在系统中直接使用日志系统(Log4j、Logback)的API

常用的log日志框架有哪些?Log4jLog4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。LogbackLogback是由log4j创始人设计的又一个开源日志组件。logb.
原创
93阅读
0评论
0点赞
发布博客于 6 月前

电脑上关注的手机上在哪看?

 
发布Blink于 5 月前

解读阿里巴巴Java手册:为什么在foreach中禁止add/remove操作

foreach介绍foreach是Java1.5引入的语法糖,语法糖写法简洁明了,容易被人理解,更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,但是不了解语法糖实现的原理很容易导致编写的代码运行时错误。错误的例子 public static void main(String[] args) { List<String> nums = new ArrayList<String>(); nums.add("1"); nums.add("2"); nums.
原创
119阅读
0评论
0点赞
发布博客于 6 月前

好烦

 
发布Blink于 6 月前

解读阿里巴巴Java手册:为什么在for循环中不应该使用语法糖“+”加号拼接字符串

可能每个人都再进入Java时都知道不要再循环体中进行字符串拼接,但是对于为什么不建议这么做并不是每个人都知道,再循环体中拼接字符串我们看看编译器为我们做了哪些工作。首先在循环体中写一个拼接的方法public class Test { public static void main(String[] args) { String testString = "testString"; for(int i=0;i<20;i++) { testString += i+","; }
原创
152阅读
0评论
1点赞
发布博客于 6 月前

解读阿里巴巴Java手册:为什么不建议使用Executors创建线程池?

Executors 是一个Java中的工具类。提供工厂方法来创建不同类型的线程池。从上图中也可以看出,Executors的创建线程池的方法,创建出来的线程池都实现了ExecutorService接口。可以发现,其实底层确实是通过LinkedBlockingQueue实现的:LinkedBlockingQueue是一个用链表实现的有界阻塞队列,容量可以选择进行设置,不设置的话,将是一个无边界的阻塞队列,最大长度为Integer.MAX_VALUE。这里的问题就出在:不设置的话,将是一个无边界的阻塞
原创
514阅读
0评论
0点赞
发布博客于 6 月前

Java多线程确保子线程执行完再执行-循环栅栏CyclicBarrier

CyclicBarrier介绍CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 栅栏r。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),有最后一个线程执行。对于失败
原创
148阅读
0评论
1点赞
发布博客于 6 月前

解读阿里巴巴Java手册:为什么HashMap初始化需要设定大小,HashMap初始化大小设定多少合适

HashMap的介绍在开始之前,先看下在官方文档中是如何介绍HashMap的:An instance of HashMap has two parameters that affect its performance: initial capacity and load factor. The capacity is the number of buckets in the hash table, and the initial capacity is simply the capacity at t
原创
581阅读
0评论
0点赞
发布博客于 6 月前

多线程编程中如何确保子线程执行完毕后主线程再执行-CountDownLatch

定义ountDownLatch是在java1.5被引入,存在于java.util.cucurrent包下,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行,它是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。线
原创
422阅读
3评论
3点赞
发布博客于 6 月前

设置Tomcat生成的日志文件编码格式为UTF-8

设置tomcat生成的日志文件编码utf-8,修改conf/logging.properties,添加编码设置1catalina.org.apache.juli.AsyncFileHandler.level = FINE1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.1cata
原创
677阅读
2评论
0点赞
发布博客于 7 月前

一篇文章了解Java虚拟机,Java虚拟机内存详解

虚拟机介绍Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如
原创
94阅读
0评论
0点赞
发布博客于 7 月前

zookeeper服务注册中心 设置连接时的账号密码策略

启动Zookeeper服务本示例是在window环境下的,安装配置非常简单,下载zookeeper安装包后只要是复制con文件下zoo.cfg重命名为zoo_sample.cfg即可启动启动Zookeeper客户端如果在dubbo中没有指定分组的话,dubbo会默认生成一个分组dubbo,也就是在zookeeper下面会有个子节点dubbo也可以自己手动创建create /dubbo我这里已经创建过,所以提示dubbo已经存在。添加用户名和密码 addauth digest test:t
原创
2853阅读
4评论
0点赞
发布博客于 7 月前

Java8新特性:Lambda表达式详解及四大函数式接口

Lambda 表达式是Java8以后的新特性,Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑,相应的带来了新的学习成本。Lambda语法特征主要有以下四点:1. 可选的类型声明:不需要声明参数类型,编译器可以统一识别参数值。如:() -> 152. 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。如:x -> 2 * x 3. 可选的大括号:如果主体包含了一个语句,就不需要使用
原创
208阅读
0评论
1点赞
发布博客于 7 月前

每个人都应该知道的Java 5种新建对象的方法

使用new创建对象使用new关键字创建对象应该是最常见的一种方式,但我们应该知道,使用new创建对象会增加耦合度。无论使用什么框架,都要减少new的使用以降低耦合度。class Untitled { public static void main(String[] args) { new A().b(); }}class A{ public void b() { System.out.println("hello A"); }}使用克隆新建对象clone时,需要已经有一个分
原创
160阅读
0评论
0点赞
发布博客于 8 月前

Java 泛型详解,看过立刻明白Java泛型知识

为什么需要泛型Java集合中元素的类型是多种多样的。例如,有些集合中的元素是Byte类型的,而有些则可能是String类型的,等等。Java允许程序员构建一个元素类型为Object的Collection,其中的元素可以是任何类型在Java SE 1.5之前,没有泛型的情况下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要作显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以在预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,
原创
164阅读
0评论
0点赞
发布博客于 8 月前

DLL导致tomcat服务器崩溃

当前的生产环境使用的是tomcat8.5,JDK8,在一次更新后每隔3 5天就会导致tomcat崩溃,服务器无法访问。查看系统日志是内存溢出,记得更新时只是更改了DLL动态链接库,打开源码发现里面在调试时加了几个printf打印调试内容,DLL内的打印内容并不能在服务器运行时被打印出来,在每次关闭服务器之前被打印,时间长了内存区被占满无法被JAVA垃圾回收,注释掉C源码中的打印解决问题。...
原创
416阅读
0评论
0点赞
发布博客于 1 年前

高可用系统设计之远程过程调用(RPC)

RPC是远程过程调用(Remote Procedure Call)的缩写形式,它是通过网络进行2个进程之间的相互通信,不同于消息中间件,它是需要被调用方实时返回处理结果,是分布式系统构建的一种最常用的通讯手段之一。目前流行的开源 RPC 框架有阿里巴巴的 Dubbo、Facebook 的 Thrift、Google 的 gRPC、Twitter 的 Finagle 等。应用级的服务框架包括:阿...
原创
108阅读
0评论
0点赞
发布博客于 1 年前

高可用系统设计之分库分表

对于互联网企业来说,经过公司业务的高速发展,在起步阶段搭建的公司网站也遇到了瓶颈,整个系统需要进行分布式布置。如果数据库通过优化索引等到了极致,就需要进行数据库分库分表操作。当一张表的数据达到几千万上亿时时,查询一次所花的时间会变长。这时候,如果有联合查询的话,可能会卡死在那儿,甚至把系统给拖垮。而分库分表的目的就在于:减小数据库的负担,提高数据库的效率,缩短查询时间。而不同的策略有不同的分库分...
原创
128阅读
0评论
0点赞
发布博客于 1 年前

高可用系统设计之消息队列

消息队列介绍消息队列是在消息的传输过程中保存消息的容器。消息生产者将消息放到消息队列后无论消息是否被消费都会继续处理后面的任务,消息队列充当消息生产者与消费者之间的中间人角色或通知存储的容器。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它(根据设定的策略)。消息队列通常的使用场景是解耦+削峰+异步一个消息可以只被一个消费者消费,也...
原创
174阅读
0评论
0点赞
发布博客于 1 年前

高可用系统设计之限流

系统限流的目的是在高访问量,高并发的情况下限制一部分流量对正常业务的访问保证系统能正常运行而不奔溃或者宕机的一种有效的手段之一。限流算法有很多,比如信号量计数,线程池隔离;还有固定窗口计数,自然窗口计数,滑动窗口计数等,虽然其中有些方法粗暴,但实现起来相对简单,其最主要的目的是一定的时间内限制服务器访问的数量。说起限流算法,其中令牌桶算法与漏桶算法算是业界比较有名的2种算法。令牌桶算法令牌...
原创
150阅读
0评论
0点赞
发布博客于 1 年前

Mysql语句性能分析-EXPLAIN

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。如下面SQL语句:EXPLAIN select * from system_area where status = 1获得下面的结果:select_typeSIMPLE:简单表,不使用表连接或子查询PRIMARY:主查询,即外层的查询UNI...
原创
521阅读
0评论
0点赞
发布博客于 1 年前

软件开发之螺旋模型

螺旋模型采用一种周期性的方法来进行系统开发。这会导致开发出众多的中间版本。使用它,项目经理在早期就能够为客户实证某些概念。该模型是快速原型法,以进化的开发方式为中心,在每个项目阶段使用瀑布模型法。这种模型的每一个周期都包括需求定义、风险分析、工程实现和评审4个阶段,由这4个阶段进行迭代。软件开发过程每迭代一次,软件开发又前进一个层次。采用螺旋模型的软件过程如下图所示:螺旋模型的优势包括:1)...
转载
712阅读
0评论
0点赞
发布博客于 1 年前

项目开发之原型法

什么是原型法用交互的,快速建立起来的原型取代了形式的、僵硬的(不允许更改的)大部分的规格说明,用户通过在计算机上实际运行和试用原型系统而向开发者提供真实的、具体的反馈意见。适用场景原型法的适用场合主要为处理过程明确、简单系统、涉及面窄的小型系统。原型法是一种从基本需求入手,快速构筑系统的原型,通过原型确认需求以及对原型进行改进,最终达到建立系统的目的的方法。优点及缺点...
原创
379阅读
0评论
0点赞
发布博客于 1 年前

高可用系统设计之服务降级

定义服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。根据服务范围:可以砍掉某个功能,也可以砍掉某些模块。总之服务降级需要根据不同的业务需求采用不同的降级策略。主要的目的就是服务虽然有损但是总比没有好;...
原创
172阅读
0评论
0点赞
发布博客于 1 年前

项目生命周期管理-瀑布模型

定义瀑布模型是将产品生存周期的各项活动规定为按固定顺序而连接的若干阶段工作,形如瀑布流水,最终得到产品。其过程是将上一项活动的输出作为该项活动的输入,利用这一输入实施该项活动应完成的内容,然后对当前活动的工作结果进行验证,如果验证通过,则该结果作为下一项活动的输入,继续进行下一项活动,否则返回修改。上实际70-80年代早期,它一直是唯一被广泛采用的软件开发模型。适用场景当有一个稳定的产品...
原创
592阅读
0评论
0点赞
发布博客于 1 年前

项目范围管理

定义项目范围是为了完成具有所规定特征和功能的产品必须完成的工作。优点或意义清楚项目的具体范围和具体工作,为准确估算时间和资源打下基础。项目范围是确定要完成哪些具体的工作,项目范围管理和控制是项目管理计划的一部分,也是项目各项计划的基础,因此项目范围计划编制是确定项目进度、测量和控制的基准。项目范围确定,就是确定项目的具体工作任务,这样有助于清楚的划分责任和分派任务,为进一步安排工作和任...
原创
333阅读
0评论
0点赞
发布博客于 1 年前