- 博客(51)
- 收藏
- 关注
原创 Java 锁的优化策略 和 膨胀过程
引用文章https://www.cnblogs.com/twoheads/p/10148598.html1. Java 锁的优化策略 和 膨胀过程1.1 自旋锁自选锁其实就是在拿锁时发现已经有线程拿了锁,自己如果去拿会阻塞自己,这个时候会选择进行一次忙循环尝试。也就是不停循环看是否能等到上个线程自己释放锁。这个问题是基于一个现实考量的:很多拿了锁的线程会很快释放锁。因为一般敏感的操作不会很多。当然这个是一个不能完全确定的情况,只能说总体上是一种优化。举个例子就好比一个人要上厕所发现厕所里面有人,他可
2021-03-12 09:57:32
338
原创 MySQL(七)存储过程
数据库存储过程MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象,它可以封装成SQL语句集,以便完成一些较为复杂的业务逻辑,并且可以想 Java 等高级编程语言一样输入参数。存储过程是为了完成特定功能的SQL语句集,创建时会预先编译,并保存在数据库中,用户和后续的 调用都不需要再次编译了,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码
2020-11-26 20:24:34
526
原创 MySQL(五) 索引失效
5. 表优化1. (单表)索引优化案例一:建表操作:CREATE TABLE IF NOT EXISTS `article`(`id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,`author_id` INT (10) UNSIGNED NOT NULL,`category_id` INT(10) UNSIGNED NOT NULL , `views` INT(10) UNSIGNED NOT NULL , `comment
2020-11-22 12:53:52
232
原创 MySQL(四) Explain分析器
4. Explain 分析器1. explain + 查询语句该EXPLAIN语句提供有关MySQL如何执行语句的信息。 EXPLAIN作品有 SELECT, DELETE, INSERT, REPLACE,和 UPDATE语句。The EXPLAIN statement provides information about how MySQL executes statements. EXPLAIN works with SELECT, DELETE, INSERT, REPLACE, and U
2020-11-22 12:50:56
184
原创 Kafka数据不丢失机制
4.3 数据不丢失机制一般我们在用到这种消息中间件的时候,肯定会考虑要怎样才能保证数据不丢失,在面试中也会问到相关的问题。但凡遇到这种问题,是指3个方面的数据不丢失,即:produce r端数据不丢失、 consumer 端数据不丢失、 broker端数据不丢失。下面我们分别从这三个方面来学习,kafka是如何保证数据不丢失的4.3.1 broker端数据不丢失(leader竞选导致消息丢失)生产者通过分区的leader写入数据后,所有再ISR中的follower都会从leader中复制数据,这样,可
2020-11-06 17:20:58
315
原创 Kafka数据内存存储结构(四)
4. Kafka 存储形式4.1 存储结构通过上图,我们可以大概了解到一点,Kafka是通过主题进行对数据进行分类的,而一个主题可以划分为多个partition分区,同一topic的不同partition可能分布在不同机器上,进而实现分布式高性能的特点。对于partition在系统中是一个文件夹,其中可能包含多个segment。我们可以设置segment在内存中的大小,当保存的消息大于segment的大小时,会再建一个segment。一个segment段由三个文件组成,分别为 .log , .in
2020-11-06 17:20:15
741
原创 Kafka底层原理及面试题(三)
3. Kafka原理3.1 Leader 和 Follower 在Kafka中,每个topic都可以配置多个分区以及多个副本。每个分区都有一个leader以及0个或者多个follower。在创建topic时,Kafka会将每个分区的leader均匀地分配在每个broker上。我们正常使用Kafka是感觉不到leader、follower的存在的。 但其实,所有的读写操作都是由leader处理的,而所有的follower都是复制leader的日志数据文件,如果leader出现故障时,follower
2020-11-04 15:40:38
1051
原创 Kafka分区、副本机制(二)
2.Kafka 高级2.1. 分区和副本机制2.1.1 分区写入策略生产者可以写入消息到同批次中,Kafka将会根据不同的策略分配到不同的分区中。分区策略主要3种:轮询分区策略这是一种默认的策略,也是采用最多的策略。它可以最大限度保证所有的消息平均分配到一个分区中。当生产者生产消息时,将key设置为 null, 则认为使用轮询算法均匀地分配分区。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKkRTPXS-1604475558866)(
2020-11-04 15:39:41
168
原创 基于Linux的Kafka安装,初步认识Kafka(一)
目录1. 认识kafka1. 搭建单机kafka2. 单机基准测试3. 搭建 kafka伪集群(待补充)4. kafka 基本概念5. 幂等性1. 认识kafka1. 搭建单机kafka将kafka的安装包上传到虚拟机,并解压cd /usr/loacl/tar -zxvf kafka_2.13-2.6.0.tgzcd /usr/local/kafka_2.13-2.6.0修改 server.propertiescd /usr/local/kafka_2.13-2.6.0/conf
2020-11-01 14:39:15
291
原创 leetcode104. 二叉树的最大深度
104. 二叉树的最大深度难度简单549给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。/** * Definition for a binary tree node. * public class TreeNode { * int
2020-06-02 15:37:26
161
原创 Java堆
6. 堆1. 概述➢ 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。➢ Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。➢ 堆内存的大小是可以调节的。➢《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。➢ 所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(ThreadLocal Allocation Buffer, TLAB)。➢ 默认堆空间大小: 初始内存大小: 物理电
2020-05-27 11:07:47
245
原创 双亲委派机制的特点
双亲委派机制:1. 原理:如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器;如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式。如果程序中没有定义过自己的类加载器,一般情况下,应用程序加载类加载器就是这个程序的默认加载器。2.双亲委派模型的好处1. 防止内存中出现多份同样
2020-05-24 15:12:51
387
原创 JVM的整体结构和生命周期
1. JVM 的整体结构详细图:上图中,我们可以根据位置,暂且分为三层结构。1.1上层: Java虚拟机是用来解释运行字节码文件的,所以它的入口原材料是 Class Files, 字节码文件首先要经过类装载器子系统(Class Loader SubSystem),类装载器子系统的作用就是将class files 文件加载到内存中,生成一个大的class 对象。 在这个过程中,就会涉及到加载(loading)、链接(Lingking)、初始化(Initialization)。1.2中层:
2020-05-24 14:45:14
292
原创 个人电商项目(mxcmall)的环境配置
3.项目环境在这里我们使用的是 Linux 虚拟机来进行搭建这个项目,所以我们选用的是 VirtualBox 里搭建 CentOS 7 。 另外我们没有手动手打搭建 CentOS 7 , 而是采用 vagrant 帮我们自动搭建虚拟机的 Linux 环境。因为 vagrant 能为我们提供便捷,而且容易部署。3.1.Linux 安装3.1.1.VirtualBox 安装VirtualBox 下载地址 下载完成后,一键傻瓜式安装3.1.2. vagrant 安装vagrant是一个
2020-05-23 11:14:45
1279
原创 Spring Boot 错误页面解析原理(超级无敌详细)
5.SpringBoot 错误页面1.默认效果当我们在运行SpringBoot的时候,访问一个不存在的页面,SpringBoot默认为我们返回一个空白页面,如下所示这个空白页面主要包括 默认错误路径、时间戳、错误提示消息 和错误状态码但如果我们使用其他的客户端(非浏览器),例如 Postman工具 发送 http://127.0.0.1:8080/noPage 请求时,默认响应客户端的...
2020-04-27 17:13:45
846
2
原创 SpringBoot 自动配置原理(超级无敌详细)-2
SpringBoot 自动配置原理(超级无敌详细)-12.自动配置的实现刚刚我们整体的过了一下主配置文件是如何实现的,但我们还没深入的研究如何实现自动装配功能。我们回到这个文件下,找一个具体的自动配置类进行分析。jar:file:/apache-maven-3.6.3-repository/org/springframework/boot/spring-boot-autoconfigure/...
2020-04-23 16:12:37
432
1
原创 SpringBoot 自动配置原理(超级无敌详细)-1
我们用Springboot很方便的能将一个框架给搭建起来,是因为它将以前我们需要手动配置的地方都利用自动配置来代替,利用约定大于配置的思想简化了我们开发工作量
2020-04-21 16:23:47
3090
3
原创 Java中Array和Arrays的区别
这里写自定义目录标题数组类Array静态类Arrays数组类ArrayArray为数组类,它是Java中的一个最基本的存储结构,为我们提供了动态创建和访问Java数组的方法。它是最高效的,但是其容量是固定的,并且无法动态改变,且存放同一数据类型的数据。静态类Arrays与Collections相似,此静态类专门用于处理Array,为此提供了搜索、排序、复制等静态方法。equals()...
2020-03-11 19:13:21
2170
原创 Java读取配置文件
读取配置文件前提:配置文件的设置方式一:使用java.util.Properties读取方式二:使用类加载器前提:配置文件的设置因为我们在配置文件中,有可能使用到汉字,那么我们就应该避免在读取数据时出现乱码,那么我们就需要调制好环境Properties Files文件,仅仅从名字上看,就知道它是针对properties文件的,那么我们可以根据自己的需要设置编码方式,以及建议将它勾选上方式...
2020-03-05 11:24:22
224
原创 Leetcode——双指针
双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。设计题目分别为LeetCode的167,633,345,680,88,141和524等7道题目
2020-03-02 18:45:27
242
原创 基于paramiko实现SSH的连接问题
搭建CMDB有四种方式,其中一种就是SSH(安全外壳协议)类的方式来实现,而这种方式是基于paramiko模块的。本次实验是通过window向ubuntu远程的发送请求,尝试登陆Ubuntu。我们可以发现Ubuntu的IP地址就是192.168.226.128当我们运行代码,尝试实现远程登陆时,import paramiko# 创建SSH对象ssh = paramiko.SSHC...
2020-02-15 20:37:32
2076
原创 搭建CMDB系统——概述
目录一、CMDB是什么?二、IT运维的分类三、CMDB与传统数据库的区别四、传统运维的缺点(1)IT 运维人员被动、效率低(2)缺乏一套高效的IT运维机制(3)缺乏高效的IT运维技术工具五、为什么需要自动化运维?1.项目上线2.监控系统3.自动装机系统六、自动化运维平台的特征七、CMDB包含的功能八、CMDB的四种实现方式方式一:Agent方式方式二:ssh类实现方式(基于paramiko模块)方...
2020-02-15 20:13:47
14097
2
原创 权限系统与RBAC模型概述
目录前言一、RBAC是什么?前言目前,使用最普遍的权限管理模型正是RBAC(Role-Based Access Control)模型,中文意思就是基于角色的访问控制,基于角色的访问控制(RBAC)是实施面向企业安全策略的一种有效的访问控制方式。根据百度百科的解释是这样的,RBAC其基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对...
2020-02-13 22:31:00
1717
原创 Python - Django - SweetAlert 插件的使用
一、使用须知:插件的下载链接:https://github.com/lipis/bootstrap-sweetalert该插件的作用是:在一个表格中,对某一行的数据进行操作,弹出一个模态对话框,有效的减少我们自己自定义,提高效率二、准备工作环境搭建本次插件测试需要用到的工具有bootstarp为我们提供表格的样式,另外还需要用到jquery。SweetAlert_index....
2020-01-19 00:16:07
381
原创 Django框架(十二、验证码图片)
目录验证码插件views.pyurls.pycheck_code.html效果图注意事项验证码插件#!/usr/bin/env python# -*- coding:utf-8 -*-import randomfrom PIL import Image, ImageDraw, ImageFont, ImageFilter_letter_cases = "abcdefghjkmnpq...
2019-11-17 15:36:19
215
原创 Django框架(十一、ORM补充)
目录select_related(self, *fields)order_by() 和 reverse()方法defer() 和 only()方法using()方法select_related(self, *fields)def select_related(self, *fields) 性能相关:表之间进行join连表操作,一次性获取关联的数据。 model.tb.obj...
2019-10-19 10:03:06
135
原创 Django框架(十、文件上传)
目录一、简单的文件上传二、文件上传图标修改三、基于Form表单的上传四、基于ajax实现的文件上传一、简单的文件上传在现实的生产环境中,有许多时候我们需要用到上传下载。其实在Django中已经预料到了我们需要该操作,因此它也给我们提供了一些简单的方法。用Django实现文件上传并且保存到指定路径下,其实并不困难,完全不需要用到django的forms,也不需要django的models,就可...
2019-10-13 16:55:20
328
原创 Django框架(九、分页功能)
目录一、Django分页功能1.Paginator对象2.page对象3.内置分页功能views.py文件index.html文件二、Django分页功能的补充一、Django分页功能1.Paginator对象方法描述per_page每页显示条目数量count数据总个数num_pages总页数page_range总页数的索引范围,如: (1,10...
2019-10-11 22:51:50
291
原创 python全栈开发基础知识学习——Django框架(七、Cookie+Session操作)
目录简介Cookie出现原因实现原理Cookie操作cookie+session总结:简介前几节的介绍中我们已经有能力制作一个登陆页面,在验证了用户名和密码的正确性后跳转到后台的页面。但是测试后也发现,如果绕过登陆页面。直接输入后台的url地址也可以直接访问的。这个显然是不合理的。其实我们缺失的就是cookie和session配合的验证。有了这个验证过程,我们就可以实现和其他网站一样必须登录...
2019-09-08 09:17:42
186
原创 python全栈开发基础知识学习——Django框架(六、Admin操作)
目录一、Admin的配置1.激活管理工具2.使用管理工具3.注册超级用户4.修改语言二、管理数据模型1.注册medel类到admin2.自定制类一、Admin的配置Admin是Django的一个强大的功能,它能从数据库中读取数据,并呈现在页面中,进行管理。默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经够用,但是有时候,一些特殊的功能还需要定制,比如搜索功能,下面这一系列文章就...
2019-09-07 10:41:01
465
1
原创 python全栈开发基础知识学习——Django框架(五、ORM操作)
目录一、数据库的配置二、Django ORM语法1.模型之间的三种关系:一对一,一对多,多对多。2.模型常用的字段类型参数3.Field重要参数4.表(模型)的创建5.单表操作1.创建记录2.修改记录3.删除记录4.查询记录一、数据库的配置1 django默认支持sqlite,mysql, oracle,postgresql数据库。<1> sqlite dj...
2019-09-06 16:01:39
399
原创 python全栈开发基础知识学习——Django框架(四、常见错误 )
目录问题一:更改数据库问题二:No module named 'MySQLdb'问题三:问题四:问题一:更改数据库django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3,如果我们需要使用MySQL的话,那么我们需要手动修改settings.py的内容解决办法:找到DATABASES,将数据库引擎修改为...
2019-08-25 11:27:49
158
原创 python全栈开发基础知识学习——Django框架(三、Template模块)
Django框架(三)一、模板(Template)简介1.简介2.模板系统简介Django模板语言模板变量一、模板(Template)简介1.简介作为一个Web框架,Django需要一种动态生成HTML的便捷方式。最常见的方法依赖于模板。模板包含所需HTML输出的静态部分以及描述如何插入动态内容的一些特殊语法。Django项目可以配置一个或多个模板引擎(如果不使用模板,甚至可以为零)。Dj...
2019-08-24 15:07:13
355
原创 python全栈开发基础知识学习——Django框架(二)
Django框架(二)请求和响应对象本博文主要了解的是MTV模型中的View(视图),主要负责业务逻辑,并在适当的时候调用Model和Template。请求和响应对象Django使用请求和响应对象来通过系统传递状态。当请求页面时,Django创建一个HttpRequest包含有关请求的元数据的对象。然后Django加载适当的视图,将HttpRequest第一个参数传递给view函数。每个...
2019-08-23 10:40:13
192
原创 python全栈开发基础知识学习——Django框架(一)
Django项目文件文件名描述init.py告诉Python这是一个什么软件包urls.py全局URL配置 ,负责把URL模式映射到应用程序settings.py项目相关的配置 ,包括数据库信息,调试标志以及其他一些工作的变量。manage.py应用的命令行接口,通过它可以调用django shell和数据库等。templates文件夹...
2019-08-22 14:50:31
561
原创 python全栈开发基础知识学习——数据库表操作
表单操作一、表结构操作1.创建表2.查看表信息3.修改表结构一、表结构操作1.创建表 create table tab_name( field1 type[完整性约束条件], field2 type, ... fieldn type )[character set x...
2019-08-17 11:35:37
220
原创 python基础知识学习——数据库操作(DDL)
数据库操作一、系统数据库二、创建数据库三、数据库相关操作一、系统数据库information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象mysql: 授权库,主要存储...
2019-08-13 16:55:10
873
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人