自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

转载 java的值传递和引用传递

一、基本类型和引用类型的理解Java中的数据类型分为两种为基本类型和引用类型。1、基本类型的变量保存原始值,所以变量就是数据本身。常见的基本类型:byte,short,int,long,char,float,double,Boolean,returnAddress。2、引用类型的变量保存引用值,所谓的引用值就是对象所在内存空间的“首地址值”,通过对这个引用值来操作对象。常见的引用类型:类类型,接口类型和数组。二、值传递和引用传递的理解1、值传递在方法...

2020-07-13 16:35:16 2052

转载 String中equals方法和==的区别

equals方法和==的区别 首先大家知道,String既可以作为一个对象来使用,又可以作为一个基本类型来使用。这里指的作为一个基本类型来使用只是指使用方法上的,比如String s = "Hello",它的使用方法如同基本类型int一样,比如int i = 1;,而作为一个对象来使用,则是指通过new关键字来创建一个新对象,比如String s = new String("Hello")。但是它的内部动作其实还是创建了一个对象,这点稍后会说到。 其次,对String对象的比较...

2020-07-13 11:22:24 1580

原创 前后端部署流程

1、安装配置nginxhttps://blog.csdn.net/weimenglala/article/details/103638205https://blog.csdn.net/qq_33204709/article/details/894221222、安装Java配置环境变量https://blog.csdn.net/afuturezww/article/details/7...

2020-01-04 16:31:36 545

转载 Redis为什么是单线程?为什么有如此高的性能?

一、Redis为什么是单线程注意:redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽,既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求二、Redis为什么这...

2019-09-24 15:00:36 162

原创 Redis学习(十)独立功能--发布订阅与事务

目录发布与订阅频道订阅与退订模式的订阅与退订发送消息查看订阅信息总结事务事务的实现WATCH 命令的实现事务ACID性质总结发布与订阅Redis的发布订阅由publish、subscribe、psubscribe等命令组成。客户端通过subscribe订阅频道,发布端通过publish进行发布。例如,a、b、c三个客户端都执行了命令subsc...

2019-09-20 10:36:44 207

原创 Redis学习(九)分布式与集群

Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。目录节点槽集群命令的实现重新分片复制和故障转移节点消息传递总结节点 一个 Redis 集群通常由多个节点(node)组成, 在刚开始的时候, 每个节点都是相互独立的, 它们都处于一个只包含自己的集群当中, 要组建一个真正可工作的集...

2019-09-19 22:22:47 337

原创 Redis学习(八)哨兵机制

哨兵(Sentinel)是redis高可用性的解决方案,由一个或多个哨兵实例组成的哨兵系统,可以监视任意多个主服务器,以及这些主服务器属下的从服务器。当被监视的主服务器下线时,根据某些规则挑选一个从服务器,作为新的主服务器。接着,其他从服务器会向新的主服务器发送复制指令,并且完成复制。同时,哨兵会监视下线的原主服务器,在它重新上线后,将它也置为从服务器。目录Sentin...

2019-09-18 22:50:17 192

原创 Redis学习(七)主从复制

在Redis中,可以用 slaveof 命令,或者在配置中设置 slaveof 选项,让一个服务器去复制另一个服务器。去复制的服务器称为从服务器(slave),被复制的称为主服务器(master)。进行复制中的主从服务器双方的数据库将保存相同的数据,称为“数据库状态一致”。主服务器的增删改,在从服务器中都会一并有改动。目录旧版复制功能的实现主从复制主从复制的实现...

2019-09-17 22:56:56 152

原创 Redis学习(六)客户端/服务器

Redis服务器是典型的一对多服务器程序:一个服务器与多个客户端建立网络连接,每个可互段可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。 通过使用由I/O多路复用技术实现的文件事件处理器,Redis服务器使用单线程单进程的方式处理命令请求,并与多个客户端进行网络通信。对于每个与服务器连接的客户端,服务器都为这些客户端建立了相应的...

2019-09-17 17:24:10 504

原创 Redis学习(五)事件机制

Redis服务器是一个事件驱动程序,需要处理两类事件:文件事件:Redis服务器通过socket与客户端连接,而文件事件就是服务器对socket操作的抽象。服务器与客户端的通信会产生相应的文件事件,而服务器则通过监听并处理这些事件来完成一系列网络操作。 时间事件:Redis服务器中的一些操作(如ServerCron)需要在给定的时间点执行,而时间事件就是服务器对这类定时操作的抽象。文件事件...

2019-09-17 14:41:24 129

原创 Redis学习(四)持久化机制(RBD/AOF)

Redis是内存数据库,它将自己的数据库状态存储在内存里,所以为了之后重用数据(比如重启机器、机器故障之后恢复数据),或者是为了防止系统故障而将数据备份到一个远程位置,Redis提供持久化功能来解决这个问题。目录RDB持久化RDB文件的创建和载入自动间隔保存RDB文件结构总结AOF持久化AOF持久化的实现AOF重写总结RDB持久化Redis...

2019-09-17 10:44:15 395

原创 Redis学习(三)Redis数据库

目录服务器/客户端数据库键空间过期键总结服务器/客户端Redis主要包括两种工作状态,服务器 redisServer 对象结构和客户端 RedisClient 对象结构,服务器将所有的数据库都保存在其成员的一个db数组中,db数组的每一个元素都是一个 redisDb 的redis数据库结构,代表一个数据库。struct redisServer { //......

2019-09-14 19:48:02 159

原创 Redis学习(二)基础数据对象

Redis使用了6种简单基础数据结构(简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表)分别组合实现了字符串(string)、哈希(hash)、列表(list)、集合(set)和有序集合(sorted set)这五种类型的键的底层实现数据结构对象。Redis对象字符串对象(string)列表对象(list)哈希对象(hash)集合对象(set)有序...

2019-09-12 18:14:02 160

原创 Redis学习(一)基础数据结构

Redis使用了6种简单基础数据结构(简单动态字符串、链表、字典、跳跃表、整数集合、压缩列表)分别组合实现了字符串(string)、散列(hash)、列表(list)、集合(set)和有序集合(sorted set)这五种类型的键的底层实现数据结构对象。数据结构简单动态字符串Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串)...

2019-09-11 21:33:37 153

原创 背包问题详解

背包问题描述背包问题其实就是将最合适物品放入背包中的问题,最值问题的一般解法都是利用动态规划,背包问题主要有以下3种:1. 01背包有n种物品与承重为m的背包。每种物品只有一件,每个物品都有对应的重量weight[i]与价值value[i],求解如何装包使得价值最大。2. 完全背包有n种物品与承重为m的背包。每种物品有无限多件,每个物品都有对应的重量weight[i]与价值v...

2019-09-07 17:41:04 1550 3

原创 MyBatis总结

MyBatis是一个第一类持久性框架,支持自定义SQL,存储过程和高级映射。MyBatis几乎消除了所有JDBC代码和手动设置参数以及检索结果。MyBatis可以使用简单的XML或Annotations来配置和映射基元,Map接口和Java POJO(Plain Old Java Objects)到数据库记录。基本架构Mybatis基本的功能架构分为以下三层:API接...

2019-09-02 22:01:01 848

原创 Redis总结

简介Redis是“Remote Dictionary Server”(远程字典服务)的缩写。Redis官网对Redis的定义是:“Redis is an open source, BSD licensed, advanced key-value cache and store”,可以看出,Redis是一种键值系统,可以用来缓存或存储数据。简单来说 redis 就是一个数据库,不过与传统数据...

2019-08-30 16:52:57 185

原创 Spring知识学习(二)AOP面向切面编程

编程语言的发展历程从机器语言到面向过程语言,再到面向对象的语言(OOP),它的终极目标是能够以更自然、更灵活的方式来模拟世界。AOP 是发展到一定阶段的产物,它是 OOP 的有益补充 。 AOP 只适合那些具有横切逻辑的应用场景,比如性能监测 、访问控制 、事务管理以及日志记录等。基本概念面向切面编程,指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。主要功能:日志记录,性能...

2019-08-29 20:01:57 356

原创 Spring知识学习(一)认识Spring与Spring容器

在我们学习某个框架时,首先应该明确三个问题:这个框架是为了解决什么问题而诞生的?这个框架的核心思想是什么?这个框架适合应用到哪些场景?其中思想是一个框架的灵魂,所以接下来我们将围绕Spring的设计思想从以下方面学习。认识 Spring 框架Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身。Spring的核心是一个轻量级(Lightweig...

2019-08-28 21:36:13 1042

原创 JVM内存结构与Java 垃圾回收策略GC

在所有的Java程序都是在JVM上运行的,程序运行必然是需要内存的,C++的策略是由程序员自己管理内存,自己维护,而Java则交给JVM来完成这些工作。所以为了提高运算效率,JVM会对数据进行了不同数据区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。JVM内存结构根据《Java虚拟机规范》的规定,JVM所管理的内存将会分为以下几个运行时数据区域:栈:存放局部变...

2019-08-27 23:08:13 154

原创 MySQL数据库知识学习(五)读写分离与分库分表策略

通过数据库锁及存储引擎的学习,我们知道数据库在数据操作过程中为了保证数据的一致性是会给表或行加锁的,在网站发展的初期,由于没有太多访问量,一般来讲只需要一台服务器就够了,这的操作也不会有什么问题。但随着业务系统的扩大,系统变得越来越复杂,越来越难以维护,开发效率变得越来越低,并且对资源的消耗也变得越来越大,通过硬件提高系统性能的方式带来的成本也越来越高。因此,前期一个好的网站架构设...

2019-08-27 16:42:10 742

原创 MySQL数据库知识学习(四)数据库锁及存储引擎

在之前Java并发编程的学习中,我们知道对于共享资源的访问会导致很多并发问题。在数据库中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有效性,是数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素。数据库的锁悲观锁和乐观锁悲观锁:顾名思义,很悲观,就是...

2019-08-27 11:31:14 387

原创 MySQL数据库知识学习(三)索引原理

在之前对于数据库数据操作中,如SELECT * FROM user WHERE name= '王';我们都是一行一行的逐条查询,也就是所谓的全表扫描;显然这种方式是及其低效的,在频繁的操作下数据库的性能会大幅下降,所以索引就是来解决这个问题的。什么是索引?一个索引是存储的表中一个特定列的值数据结构(最常见的是B-Tree)。索引是在表的列上创建。所以,要记住的关键点是索引包含...

2019-08-26 22:22:55 397

原创 MySQL数据库知识学习(二)存储过程及事务管理

单条的SQL语句精确的同时伴随着的也是性能的降低,操作的繁琐,因此在数据库编程过程中经常会用到存储过程和事务等功能 , 相比 SQL 语句 , 它们更方便、快速、安全,很值得我们去学习 。存储过程1、基本概念我们知道在Java程序中,会由编译器先将编写Java代码编译成class字节码文件,再由JVM来执行字节码,完成程序功能。由于SQL语言也是一种编程语言,需要编译后执...

2019-08-26 16:19:27 473

原创 算法导论(三)字符串匹配

字符串匹配方法对于在编辑文本程序时,能极大的提升响应效率,如网址查询搜索引擎,DNA序列匹配等。基本定义字符串匹配问题的形式定义:文本(Text)是一个长度为 n 的数组 T[1..n]; 模式(Pattern)是一个长度为 m 且 m≤n 的数组 P[1..m]; T 和 P 中的元素都属于有限的字母表Σ 表; 如果 0≤s≤n-m,并且 T[s+1..s+m] = P...

2019-08-24 23:01:42 768

原创 MySQL数据库知识学习(一)SQL与基本知识

前言MySQL 是一种关系型数据库,因为 MySQL 是开源免费的,并且方便扩展,所以在Java企业级开发中非常常用的。因此决定从头开始系统的学习一次MySQL的知识,具体路线如下: 基本知识1、数据模型数据模型是用来抽象、表示和处理现实世界中的数据和信息的工具,是对现实世界的模拟,是数据库系统的核心和基础。数据抽象共有三个层次:物理层、逻辑层...

2019-08-23 11:24:11 1240

原创 Java 网络编程

一、概述计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输。Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程。二、网络编程基础知识如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间能够进行相互通信是...

2019-08-22 11:06:53 986

原创 算法导论(二)排序和排序统计量

在数组中,待排序的项称为记录(record),每个记录包含一个关键字(key),即排序问题中要重排的值,记录的剩余部分由卫星数据(statellite data)组成。 如果输入数组中仅有常数个元素需要在排序过程中存储在数组之外,则称排序算法是原址的(in place)。插入排序可以在O(n^2)时间内将n个数排好序,是一种非常快的原址排序算法;归并排...

2019-08-20 23:09:49 336

原创 Java并发学习(九)任务执行、线程池及并发框架

大多数并发应用程序都是围绕“任务执行(Task Execution)”来构造的:任务通常是一些抽象且离散的工作单元。把应用程序分配到多个任务中,可以简化程序的组织结构,提高任务的执行效率。任务执行在围绕“任务执行”进行程序设计时,首先应该确定清晰的任务边界,在理想情况下,各个任务的边界是相互独立的,任务并不依赖于其他任务的状态或结果,那么这些相互独立的任务单元就是可以并行执行的。...

2019-08-20 21:15:28 455

原创 算法导论(一)分治策略与递归式求解

前言 之前学习算法都是在LeetCode或牛客上刷题,从没有系统的学习过算法的底层知识,所以准备以《算法导论》为教材,从头再把算法的相关知识总结复习一遍,真正的学习方法而不是只会做题 。基本思想 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可...

2019-08-19 23:19:08 646

原创 Java并发学习(八)并发工具类与原子操作类

并发工具类 在Java并发包中提供了很多有用的并发工具类,并发工具类可以使任何一种对象,只要该对象可以根据自身的状态来协调控制线程的控制流。阻塞队列可以作为同步工具类,其他类型的同步工具类还包括:信号量(Semaphore)、栅栏(Barrier)、闭锁(Latch)等。闭锁闭锁是一种同步工具类,可以延迟线程的进度直到其达到终止状态。闭锁作用相当于一扇门:在闭锁到达某一状态之...

2019-08-19 19:09:25 202

原创 Java并发学习(七)并发容器

Java平台类库包含了大量的并发基础构建模块,包括线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类(Synchronizer),学习这些基础模块不仅能提高并发编程的能力,更可以从中看到Doug Lea等大师的设计思想。同步容器类 同步容器类包括Vector、Hashtable以及它们的子类,还有通过Collections.synchronizedXxx的一些工...

2019-08-18 22:26:19 460

原创 Java并发学习(六)显式锁的实现,重入锁ReentrantLock、读写锁ReentrantReadWriteLock

上次对于显示锁和队列同步器的学习已经提到,我们可以使用Java提供的队列同步器AQS实现自定义的同步组件。同样,Java自身也为我们提供了很多可用的锁(或同步组件),如重入锁ReentrantLock和读写锁ReentrantReadWriteLock等,它们也是通过AQS实现的,并且继承了Lock接口。与内置锁synchronized不同,Lock接口提供了一种无条件的、可轮询的、定时的以及...

2019-08-17 19:33:45 167

原创 Java并发学习(四)显式锁Lock与AQS队列同步器

在Java5之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile,Java5之后增加了新的机制显式锁Lock,所以我们可以使用锁(显式锁)而不是隐式锁(同步)来线程安全地编程;和隐式锁相比,显示锁更加的灵活,但这不代表隐式锁是来替代synchronized隐式内置锁的,而是当内置锁不适用时,作为一种高级功能。Lock接口前面的学习中我们已经了解...

2019-08-16 10:52:53 251 1

转载 Java注解

前言如果说注释是写给人看的,那么注解就是写给程序看的注释。它更像一个标签,贴在一个类、一个方法或者字段上。它的目的是为当前读取该注解的程序提供判断依据。写的好的文章https://blog.csdn.net/briblue/article/details/73824058...

2019-08-14 14:47:04 73

原创 Java反射机制

能够分析类能力的程序称为反射;通俗地说,反射机制就是可以把一个类当成一个对象来操作,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们。概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想剖析一个类,必须...

2019-08-14 11:15:13 146

原创 算法学习(三)动态规划

动态规划 概述上回在贪心算法的学习中已经提到,动态规划(Dynamic Programming)的核心思想就是:忘记过去的人必将重蹈覆辙。在动态规划中这句话的意思是将计算过的子问题结果保存下来,下次再遇到就不用重新计算,是一种空间换时间的做法。动态规划算法通常基于一个递推公式及一个或多个初始状态。 当前子问题的解将由上一次子问题的解推出。使用动态...

2019-08-13 10:05:30 499

原创 Java并发学习(二)Java内存模型与happens-before原则

在并发编程中分析线程安全的问题时往往需要切入点,本文主要围绕两大核心:JMM抽象内存模型以及happens-before规则,三条性质:原子性,有序性和可见性目录Java内存模型概述Java内存模型Java内存模型与硬件内存架构1、硬件内存架构2、JVM对线程的实现3、Java内存模型与硬件内存架构的映射JMM执行内存交互情况原子性、可见性和有序性...

2019-08-10 22:54:49 278

原创 Java并发学习(三)Java线程的实现原理

进程与线程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为它分配CPU时间,程序开始真正运行。线程是程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。线...

2019-08-10 15:35:55 330

原创 算法学习(二)贪心算法

贪心算法一、基本思想 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。...

2019-08-09 15:31:55 965

空空如也

空空如也

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

TA关注的人

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