3 程序员掉头发

我要认证

暂无相关简介

等级
TA的排名 14w+

Java String占用的真实内存空间(附测试代码,求大佬解答遇到的问题)

前言因为String 并不是我们熟知的基本数据类型(int、double、char…),所以在Java中都会用对象来存储,那么String类型占用的内存到底有多少呢,本文将深度探索,并且附有测试代码!Java的对象首先了解一下Java的对象结构(在HotSpot虚拟机中)markword:占4个字节,主要包括hashCode信息,锁对象信息以及GC年龄信息等。class pointer :占4个字节,指向class对象文件length:占4个字节,如果这是数组对象,在对象头中还会包括数组长度

2020-10-23 17:40:30

Http 状态码详解之304、403、503

一、304状态码1.定义自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。2.详解304状态码或许不应该认为是一种错误,而是对客户端有缓存情况下服务端的一种响应。整个请求响应过程客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,

2020-10-21 14:08:39

JVM 线程dump 导出和分析

JVM 线程dump 导出和分析码农随想录关注前言线程dump是非常有用的诊断java应用问题的工具,每一个java虚拟机都有及时生成显示所有线程在某一点状态的线程dump的能力。虽然各个java虚拟机线程dump打印输出格式上略微有一些不同,但是线程dump出来的信息包含线程基本信息;线程的运行状态、标识和调用的堆栈;调用的堆栈包含完整的类名,所执行的方法,如果可能的话还有源代码的行数。JVM中的许多问题都可以使用线程dump文件来进行诊断,其中比较典型的包括线程阻塞,CPU使用率过高,JVM C

2020-10-14 22:48:50

消息队列 Kafka的架构原理 (小白必看)

最终大家会掌握 Kafka 中最重要的概念,分别是 Broker、Producer、Consumer、Consumer Group、Topic、Partition、Replica、Leader、Follower,这是学会和理解 Kafka 的基础和必备内容。1. 定义Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用与大数据实时处理领域。消息队列Kafka 本质上是一个 MQ(Message Queue),使用消息队列的好处?(面试会问)解耦: 允许

2020-10-05 09:35:16

消息队列 常见问题分析(小白必看)

一、简介很久以前也写过一篇关于消息队列的文章,这里的文章,这篇文章是对消息队列使用场景,以及一些模型做过一点介绍。这篇文章将分析消息队列常见问题。消息队列:利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统集成。从定义看:它是一种数据交流平台,也是数据通信平台。然而,数据通信我们可以用http,RPC来进行通信,这些与消息队列有什么区别呢?最大的区别就是同步和异步。http和RPC一般都是同步,而消息队列是异步。二、为什么要用消息队列1.解耦双方不在基于

2020-10-04 20:24:19

消息队列 基础入门(小白必看)

前言消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段。它具有 低耦合、可靠投递、广播、流量控制、最终一致性 等一系列功能。当前使用较多的 消息队列 有 RabbitMQ、 RocketMQ、 ActiveMQ、 Kafka、 ZeroMQ、 MetaMQ 等,而部分 数据库 如 Redis、 MySQL 以及 phxsql 也可实现消息队列的功能。1.消息队列概述消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流,并基于 数据通信 来进行分布式系统的集成。通过提供

2020-10-03 23:39:04

ZooKeeper 基础入门 (小白必看)

2020-10-03 14:24:23

MySQL 面试必问之---分库分表

转载https://mp.weixin.qq.com/s/NDwUlMt7BLEabk3rgQpKawhttps://mp.weixin.qq.com/s/wDPbpy-gA36W__ThKVBBqQ前言当数据库的数据量过大,大到一定的程度,我们就可以进行分库分表。那么基于什么原则,什么方法进行拆分,这就是本篇所要讲的。1.数据库瓶颈不管是 IO 瓶颈还是 CPU 瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务 Service 来看, 就是.

2020-10-03 13:06:36

MySQL 必须掌握的三大日志-binglog、redo log以及undo log

转载自https://mp.weixin.qq.com/s/A0Du0ipee7nzXN-fKG6K5g前言MySQL服务器的体系结构一条更新语句执行的顺序update T set c=c+1 where ID=2;a. 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。b. 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,.

2020-10-02 21:42:23

Redis 通过巧妙地使用数据结构节省内存空间(附 实验代码)

有了方面的知识,我们可以根据不同的场景来预估Redis会使用的内存容量。前言Redis数据结构容量评估的相关知识 ------ 想学的小伙伴可以移步Redis相关数据结构的容量评估那么这边博客就介绍一下,如果数据量达到千万甚至上亿级别时,该如何优化数据结构,节省内存空间。Redis 数据结构和编码方式继续回顾一下这张图,为什么Redis要对这些数据结构,分别设置多种编码方式(底层数据结构实现)呢?肯定是有原因的,因为随着数据量的上涨,或者存储的键值本身的大小变化,都会影响到对应编码方式的选择,

2020-09-30 17:07:17

Redis 相关数据结构的容量评估

作者:LeiLv链接:https://www.jianshu.com/p/5c5dc0d7d776来源:简书1.jemalloc 内存分配模型jemalloc基于申请内存的大小把内存分配分为三个等级:small,large,huge:Small Object 的size以8字节,16字节,32字节等分隔开,小于页大小;Large Object 的size以分页为单位,等差间隔排列,小于chunk的大小;Huge Object 的大小是chunk大小的整数倍。对于64位系统,一般chunk.

2020-09-28 19:45:16

Redis 底层结构和对象介绍 超级详细!!

本文主体参考Redis设计与实现第二版 对于有时间的同学可以直接阅读原书,我这里做一个详细的总结,并结合自己的一些思考。1.SDSRedis没有直接使用C语言传统的字符串,而是自己构建一个简单动态字符串(SDS),并将SDS作未Redis的默认字符串表示。reids>SET msg "hello world"会在Redis创建一个新的键值对:key是一个字符串对象,对象的底层是一个保存"msg"的SDSvalue也是一个字符串对象,底层同样是保存 "hello world"的SDS.

2020-09-24 19:12:28

Django model 中get和filter的区别 超级详细!!

对于简单的SQL语句,我们还是可以直接使用Django自带的ORM框架,来简化代码的。那么对于查询语句,get()和filter()的区别让我在项目里吃了不少苦头,经常遇到bug,不知不觉就指向了这两个问题,所以今天我准备好好的总结一下相关区别。我就结合Django官方文档中给出的定义和我自己的一些理解进行介绍:get()不使用缓存These methods do not use a cache (see Caching and QuerySets). Rather, they query t

2020-09-22 12:57:21

MySQL 表存储方式之索引组织表和堆表

索引组织表(Index-Organized Tables)索引组织的表具有B树的变体的存储组织。以主键排序的方式将索引组织表的数据存储在B树索引结构中。索引结构中的每个叶块都存储关键字列和非关键列。对应的主键索引也叫聚集索引,其他列的索引叫secondary index,也叫做二级索引。二级索引的每条记录都包含该行的主键值,InnoDB使用这个主键值来搜索聚集索引中的行。因此,较短的主键值是有利的,可以缩小二级索引的空间。聚集索引 clustered index每个表都有一个聚集索引,其实上面所说的主

2020-09-21 20:34:54

MySQL 为什么InnoDB要使用B+ Tree索引

前言一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级**,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。**换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。一.内存读取简单点说说内存读取,内存是由一系列的存储单元组成的,每个存储单元存储固定大小的数据,且有一个唯一地址。当需要读内存时,将地址信号放到地

2020-09-21 19:48:10

MySQL 插入时间时不是用的默认缺省值而是NULL,且后续更新不会改变时间。

项目中有一个bug,明明MySQL中update_time的缺省值为CURRENT_TIMESTAMP,但是第一次插入的时候总是为NULL,后续也不会更新。问题一:初始插入时 时间字段为null但是初始的时候为什么为NULL呢?因为项目中后端用到了Django 的ORM框架,其中的model模型定义如下在DateTimeField中参数设置blank为True,null为True关于这两个字段详细的介绍可以参考django数据模型中null和blank的区别说明我这里总结一下:null默认

2020-09-17 14:26:02

MySQL 什么时候使用INNER JOIN 或 LEFT JOIN

在本科时期,其实这个问题困扰了我很久,最早都是用如下语句,也就是笛卡尔积的形式。select **from A,Bwhere A.name=B.name再熟悉了各种联表以后其实这就是cross join,是最慢的一种联表方式,会返回A表字段的数据*B表字段的数据(如果A表有10条数据,B表有20条数据,那么最后返回结果就是200条)。其实可以根据真实的需求用更好的联表操作,如left join 或inner join。红烧排骨饭博客中给出的例子很容易理解商品表CREATE TABLE pr

2020-09-07 18:11:25

Mysql 从A表查询相关信息批量插入到B表中

还是太菜了,在接到相关需求的时候,我连insert命令都没记全。回顾一下insert命令insert into 表名 (表内字段1,字段2) values(数据1,数据2),(数据1’ ,数据2’)那么按照标题中的需求,具体例子:将A表中有,而B表中没有的用户插入到B表中。所以就是先用一个获取A表中有而B表中没有的用户(这里用到子查询not in),在将这些用户插入到B表中。insert into B(name)select usernamefrom Awhere username not

2020-08-26 16:06:04

MySQL多表连接时想要用group by去重

自己在实习的时候编写接口时遇到了这个问题,写完如下sql查询语句后,执行select d.score, c.`desc`, c.idFROM baseline_project.baseline_project_new_check AS c LEFT JOIN baseline_project.baseline_project_new_exp AS e ON c.code_new_en_name = e.code_new_en_name AND c.version_identify

2020-08-20 16:18:53

Java中数组、List、Set互相转换

数组转ListString[] staffs = new String[]{"Tom", "Bob", "Jane"};List staffsList = Arrays.asList(staffs);需要注意的是, Arrays.asList() 返回一个受指定数组决定的固定大小的列表。所以不能做 add 、 remove 等操作,否则会报错。List staffsList = Arrays.asList(staffs);staffsList.add("Mary"); // Unsuppor

2020-07-25 20:35:46

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。