08 2022 档案
摘要:你有没有经历过这样的场景: “为什么改了这个没告诉我”“实际功能和文档上说的不一样啊”。这些话大家在进行API接口开发时,想必耳朵都听出老茧了。真不是故意的,有时候任务比较急,就先改了代码,想着以后再同步文档,然后就给忘了。项目更新又全靠社交软件通知,人一多难免有一两个没及时沟通到的。确实给合作的小
阅读全文
摘要:如下图所示,我们有两个物理主机1和主机2,我们在各自宿主机上启动一个CentOS的Linux容器,启动成功之后,两个容器分别运行在两个宿主机之上,默认的IP地址分配如图所示,这也是Docker自身默认的网络。 此时两台主机上的Docker容器如何直接通过IP地址进行通信?一种直接想到的方案便是通过分
阅读全文
摘要:1、选择恰当的日志级别 常见的日志级别有5种,分别是error、warn、info、debug、trace。日常开发中,我们需要选择恰当的日志级别,不要反手就是打印info哈~ error:错误日志,指比较严重的错误,对正常业务有影响,需要运维配置监控的; warn:警告日志,一般的错误,对业务影响
阅读全文
摘要:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p = [1,2,3], q = [1,2,3]输出:true示例 2: 输入:p = [1,2], q = [1,null,2]输出:f
阅读全文
摘要:给你二叉搜索树的根节点 root ,该树中的 恰好 两个节点的值被错误地交换。请在不改变其结构的情况下,恢复这棵树 。 示例 1: 输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二
阅读全文
摘要:给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入:root = [2,1,3]输出:true示例 2: 输入
阅读全文
摘要:给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: s = s1 + s2 + ... + snt = t1 + t2 + ... + tm|n - m| <
阅读全文
摘要:给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5示例 2: 输入:n = 1输出:1 提示: 1 <= n <= 19 来源:力扣(LeetCode)链接:https://lee
阅读全文
摘要:给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 示例 1: 输入:n = 3输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,
阅读全文
摘要:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root = [1,null,2,3]输出:[1,3,2]示例 2: 输入:root = []输出:[]示例 3: 输入:root = [1]输出:[1] 提示: 树中节点数目在范围 [0, 100] 内-100 <=
阅读全文
摘要:有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。 例如:"0.1.2.201" 和 "192.168.1.1" 是 有效 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@
阅读全文
摘要:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 示例 1: 输入:head = [1,2,3,4,5], left = 2, right = 4输出:[1,4,
阅读全文
摘要:一条包含字母 A-Z 的消息通过以下映射进行了 编码 : 'A' -> "1"'B' -> "2"...'Z' -> "26"要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为: "AAJF" ,将消息分组为 (1 1 10 6
阅读全文
摘要:给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。 示例 1: 输入:nums = [1,2,2]输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]示例 2: 输入:n
阅读全文
摘要:n 位格雷码序列 是一个由 2n 个整数组成的序列,其中:每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1)第一个整数是 0一个整数在序列中出现 不超过一次每对 相邻 整数的二进制表示 恰好一位不同 ,且第一个 和 最后一个 整数的二进制表示 恰好一位不同给你一个整数 n ,返
阅读全文
摘要:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1
阅读全文
摘要:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]示例 2
阅读全文
摘要:给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 示例 1: 输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"
阅读全文
摘要:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10 输入: heights = [2,4] 输出: 4
阅读全文
摘要:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head = [1,1,2]输出:[1,2]示例 2: 输入:head = [1,1,2,3,3]输出:[1,2,3] 提示: 链表中节点数目在范围 [0, 300] 内-1
阅读全文
摘要:给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2: 输入:head = [1,1,1,2,3]输出:[2,3] 提示: 链表中节点数目在范围
阅读全文
摘要:已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums
阅读全文
摘要:Eureka Server的⾃我保护机制会检查最近15分钟内所有EurekaClient正常⼼跳的占⽐,如果低于85%就会被触发。我们如果在Eureka Server的管理界⾯发现如下的红⾊内容,就说明 已经触发了⾃我保护机制。EMERGENCY! EUREKA MAY BE INCORRECTLY
阅读全文
摘要:1 private static final String LOCK_SUCCESS = "OK"; 2 private static final String SET_IF_NOT_EXIST = "NX"; 3 private static final String SET_WITH_EXPIR
阅读全文
摘要:1、匿名管道通信: a. ⽗进程创建管道,得到两个⽂件描述符指向管道的两端b. ⽗进程fork出⼦进程,⼦进程也有两个⽂件描述符指向同⼀管道。c. ⽗进程关闭fd[0],⼦进程关闭fd[1],即⽗进程关闭管道读端,⼦进程关闭管道写端(因为管道只⽀持单向通信)。⽗进程可以往管道⾥写,⼦进程可以从管道⾥
阅读全文
摘要:1、⼀致性hash算法:我们的memcached客户端(这⾥我看的spymemcache的源码),使⽤了⼀致性hash算法ketama进⾏数据存储节点的选择。与常规的hash算法思路不同,只是对我们要存储数据的key进⾏hash计算,分配到不同节点存储。⼀致性hash算法是对我们要存储数据的服务器进
阅读全文
摘要:1. 调优时机:a. heap 内存(⽼年代)持续上涨达到设置的最⼤内存值;b. Full GC 次数频繁;c. GC 停顿时间过⻓(超过1秒);d. 应⽤出现OutOfMemory 等内存异常;e. 应⽤中有使⽤本地缓存且占⽤⼤量内存空间;f. 系统吞吐量与响应性能不⾼或下降。 2. 调优原则:a
阅读全文
摘要:Https协议就是基于SSL的HTTP协议 HTTPS使用与HTTP不同的端口(HTTP:80,HTTPS:443) 提供了身份验证与加密通信方法,被广泛用于网上安全敏感的通信。 1、客户端请求SSL连接,并将⾃⼰⽀持的加密规则发给⽹站。 2、服务器端将⾃⼰的身份信息以证书形式发回给客户端。证书⾥⾯
阅读全文
摘要:1. TCP建⽴连接的过程。三次握⼿: 1. 第⼀次握⼿(客户端发送syn包到服务器端):客户端发送syn包到服务器端,进⼊syn_send状态,等待服务器端的确认; 2. 第⼆次握⼿(服务器返回syn+ack包给客户端):服务器端收到客户端的syn包,发送syn+ack包给客户端,进⼊syn_re
阅读全文
摘要:在⼀个⾼度服务化的系统中,我们实现的⼀个业务逻辑通常会依赖多个服务,⽐如:商品详情展示服务会依赖商品服务, 价格服务, 商品评论服务. 如图所示: 调⽤三个依赖服务会共享商品详情服务的线程池. 如果其中的商品评论服务不可⽤, 就会出现线程池⾥所有线程都因等待响应⽽被阻塞, 从⽽造成服务雪崩. 如图所
阅读全文
摘要:熔断器模式定义了熔断器开关相互转换的逻辑 服务的健康状况 = 请求失败数 / 请求总数.熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值⽐较决定的. 1. 当熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况⾼于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值,
阅读全文
摘要:1、业务⽅⾯拆分:所有技术⽅⾯的考虑,包括架构设计和解耦拆分都要考虑业务的需要。在服务拆分时,先从业务⻆度确定拆分的 ⽅案。拆分的边界要充分考虑业务的独⽴性和专业性,⽐如搜索类服务、⽀付类服务、购物⻋类服务,按服务的业务功能合理地划出拆分边界。 2、减少维护成本:拆分前的维护成本 - 拆分后的维护成
阅读全文
摘要:1、概念:Akka是⼀个构建在JVM上,基于Actor模型的并发框架,为构建伸缩性强,有弹性的响应式并发应⽤提⾼更好的平台。 2、Actor模型:Akka的核⼼就是Actor,所以不得不说Actor,Actor模型我通俗的举个例⼦,假定现实中的两个⼈,他们只知道对⽅的地址,他们想要交流,给对⽅传递信
阅读全文
摘要:1、简介:mapreduce源⾃google的⼀篇⽂章,将海量数据处理的过程拆分为map和reduce。mapreduce 成为了最早的分布式计算框架,这样即使不懂的分布式计算框架的内部运⾏机制的⽤户,也可以利⽤分布式的计算框架实现分布式的计算,并在hadoop上⾯运⾏。 2、设计思想:hadoop
阅读全文
摘要:1、概念:CMS全称 Concurrent Mark Sweep,是⼀款并发的、使⽤标记-清除算法的垃圾回收器, 2、使⽤场景:GC过程短暂停,适合对时延要求较⾼的服务,⽤户线程不允许⻓时间的停顿。 3、缺点:1、服务⻓时间运⾏,造成严重的内存碎⽚化。2、算法实现⽐较复杂(如果也算缺点的话)。 4、
阅读全文
摘要:1、kafka数据分区和消费者的关系:1个partition只能被同组的⼀个consumer消费,同组的consumer则起到均衡效果 2、kafka的数据offset读取流程 1.连接ZK集群,从ZK中拿到对应topic的partition信息和partition的Leader的相关信息 2.
阅读全文
摘要:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以
阅读全文
摘要:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示
阅读全文
摘要:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:
阅读全文
摘要:给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n = 4, k = 2输出:[ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4],]示例 2: 输入:n = 1, k = 1输出:[
阅读全文
摘要:https://www.jianshu.com/p/2b47a3078a46a. git init:使⽤git init初始化⼀个新的⽬录时,会⽣成⼀个.git的⽬录,该⽬录即为本地仓库。⼀个新初始化的本地仓库是这样的:|——HEAD|——branches|——config|—— descripti
阅读全文
摘要:1、选择最合适的字段属性:类型、⻓度、是否允许NULL等;尽量把字段设为not null,⼀⾯查询时对⽐是否为null; 2.要尽量避免全表扫描,⾸先应考虑在 where 及 order by 涉及的列上建⽴索引。 3.应尽量避免在 where ⼦句中对字段进⾏ null 值判断、使⽤!= 或 <>
阅读全文
摘要:a. InnoDB:1. ⽀持事务处理2. ⽀持外键3. ⽀持⾏锁4. 不⽀持FULLTEXT类型的索引(在Mysql5.6已引⼊)5. 不保存表的具体⾏数,扫描表来计算有多少⾏6. 对于AUTO_INCREMENT类型的字段,必须包含只有该字段的索引7. DELETE 表时,是⼀⾏⼀⾏的删除8.
阅读全文
摘要:1、Zookeeper:基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下(该图来⾃于IBM⽹站)。⼤致思想即为:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的⽬录下,⽣成⼀个唯⼀的瞬时有序节点。判断是否获取锁的⽅式很简单,只需要判断有序节点中序号最⼩的⼀
阅读全文
摘要:1. 通过 SpringFactoriesLoader加载 META-INF/spring.factories⽂件,获取并创建SpringApplicationRunListener对象2. 然后由 SpringApplicationRunListener来发出 starting 消息3. 创建参数
阅读全文
摘要:1. 设定堆内存⼤⼩,这是最基本的。 2. -Xms:启动JVM时的堆内存空间。 3. -Xmx:堆内存最⼤限制。 4. 设定新⽣代⼤⼩。 5. 新⽣代不宜太⼩,否则会有⼤量对象涌⼊⽼年代 6. -XX:NewRatio:新⽣代和⽼年代的占⽐。 7. -XX:NewSize:新⽣代空间。 8. -X
阅读全文
摘要:1. PC寄存器:a. 每个线程拥有⼀个pc寄存器;b. 指向下⼀条指令的地址。 2. ⽅法区:a. 保存装载的类的元信息:类型的常量池,字段、⽅法信息,⽅法字节码;jdk6时,String等常量信息置于⽅法区,jdk7移到了堆中;b. 通常和永久区(Perm)关联在⼀起; 3. 堆:a. 应⽤系统
阅读全文
摘要:a. 优点:i. 模块解耦:把模块拆分,使⽤接⼝通信,降低模块之间的耦合度.ii. 项⽬拆分,不同团队负责不同的⼦项⽬:把项⽬拆分成若⼲个⼦项⽬,不同的团队负责不同的⼦项⽬.iii. 提⾼项⽬扩展性:增加功能时只需要再增加⼀个⼦项⽬,调⽤其他系统的接⼝就可以。iv. 分布式部署:可以灵活的进⾏分布式
阅读全文
摘要:1. ⼆阶段提交:a. 概念:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中⽌操作。b. 作⽤:主要保证了分布式事务的原⼦性;第⼀阶段为准备阶段,第⼆阶段为提交阶段 c. 缺点:不仅要锁住参与者的所有资源,⽽且要锁住协调者资源,开销⼤。⼀句话总结就是:
阅读全文
摘要:a. 区别:传输协议RPC,可以基于TCP协议,也可以基于HTTP协议HTTP,基于HTTP协议传输效率RPC,使⽤⾃定义的TCP协议,可以让请求报⽂体积更⼩,或者使⽤HTTP2协议,也可以很好的减少报⽂的体积,提 ⾼传输效率HTTP,如果是基于HTTP1.1的协议,请求中会包含很多⽆⽤的内容,如果
阅读全文
摘要:a. 第⼀层缓存:readOnlyCacheMap,本质上是ConcurrentHashMap:这是⼀个JVM的CurrentHashMap只读缓存,这个主要是为了供客户端获取注册信息时使⽤,其缓存更新,依赖于定时器的更新,通过和readWriteCacheMap 的值做对⽐,如果数据不⼀致,则以r
阅读全文
摘要:某个服务不可⽤时,各个Eureka Client不能及时的知道,需要1~3个⼼跳周期才能感知,但是,由于基于Netflix的服务调⽤端都会使⽤Hystrix来容错和降级,当服务调⽤不可⽤时Hystrix也能及时感知到,通过熔断机制来降级服务调⽤,因此弥补了基于客户端服务发现的时效性的缺点
阅读全文
摘要:a. 当⼀个服务实例启动,会将它的ip地址等信息注册到eureka;b. 当a服务调⽤b服务,a服务会通过Ribbon检查本地是否有b服务实例信息的缓存;c. Ribbon会定期从eureka刷新本地缓存。
阅读全文
摘要:springcloud由以下⼏个核⼼组件构成:Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从⽽知道其他服务在哪⾥Ribbon:服务间发起请求的时候,基于Ribbo
阅读全文
摘要:特性 ActiveMQ RabbitMQ RocketMQ kafka 开发语⾔ java erlang java scala 单机吞吐量 万级 万级 10万级 10万级 时效性 ms级 us级 ms级 ms级以内 可⽤性 ⾼(主从架构) ⾼(主从架构) ⾮常⾼(分布式架构) ⾮常⾼(分布式架构)
阅读全文
摘要:a消息处理过程: b. 四种交换机:i. 直连交换机,Direct exchange:带路由功能的交换机,根据routing_key(消息发送的时候需要指定)直接绑定到队列,⼀个交换机也可以通过过个routing_key绑定多个队列。ii. 扇形交换机,Fanout exchange:⼴播消息。ii
阅读全文
摘要:1、虚拟机:我们传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有⾃⼰的操作系统,虚拟机⼀旦被开启,预分配给他的资源将全部被占⽤。,每⼀个虚拟机包括应⽤,必要的⼆进制和库,以及⼀个完整的⽤户操作系统。2、Docker:容器技术是和我们的宿主机共享硬件资源及操作系统可以实现资源的动态分配。容器包
阅读全文
摘要:a. explain select语句;b. 当只要⼀条数据时使⽤limit 1;c. 为搜索字段建索引;d. 避免select *;e. 字段尽量使⽤not null;f. 垂直分割;g. 拆分⼤的delete和insert语句:delete和insert会锁表;h. 分表分库分区。
阅读全文
摘要:a. RDB:快照形式是直接把内存中的数据保存到⼀个 dump ⽂件中,定时保存,保存策略。(会丢数据) b. AOF:把所有的对Redis的服务器进⾏修改的命令都存到⼀个⽂件⾥,命令的集合。(影响性能)
阅读全文
摘要:a. 更多的数据结构; b. 可持久化; c. 计数器; d. 发布-订阅功能; e. 事务功能; f. 过期回调功能; g. 队列功能; h. 排序、聚合查询功能
阅读全文
摘要:特点: 1)代码量少且代码末尾没有分号; 2)空类型安全(编译期处理了各种 null 情况,避免执行时异常); 3)函数式的,可使用 lambda 表达式; 4)可扩展方法(可扩展任意类的属性); 5)互操作性强,可以在一个项目中使用 kotlin 和 java 两种语言混合开发;
阅读全文
摘要:序列化:将一个对象转换成可存储或可传输的状态,序列化后的对象可以在网络上传输,也可以存储到本地,或实现跨进程传输; 为什么要进行序列化:开发过程中,我们需要将对象的引用传给其他 activity 或 fragment使用时,需要将这些对象放到一个 Intent 或 Bundle 中,再进行传递,而
阅读全文
摘要:final:变量、类、方法的修饰符,被 final 修饰的类不能被继承,变量或方法被 final 修饰则不能被修改和重写。 finally:异常处理时提供 finally 块来执行清除操作,不管有没有异常抛出,此处代码都会被执行。如果 try 语句块中包含 return 语句,finally 语句块
阅读全文
摘要:进程:具有一定独立功能的程序,是系统进行资源分配和调度运行的基本单位。 线程:进程的一个实体,是 CPU 调度的基本单位,也是进程中执行运算的最小单位,即执行处理机调度的基本单位,如果把进程理解为逻辑上操作系统所完成的任务,线程则表示完成该任务的许多可能的子任务之一。 关系:一个进程可有多个线程,至
阅读全文
摘要:<? extends T>限定参数类型的上界,参数类型必须是 T 或 T 的子类型,但对于 List<?extends T>,不能通过 add()来加入元素,因为不知道<? extends T>是 T 的哪一种子类; <? super T>限定参数类型的下界,参数类型必须是 T 或 T 的父类型,不
阅读全文
摘要:抽象类意义 抽象类是用来提供子类的通用性,用来创建继承层级里子类的模板,减少代码编写,有利于代码规范化。 接口意义 1)有利于代码的规范,对于大型项目,对一些接口进行定义,可以给开发人员一个清晰的指示,防止开发人员随意命名和代码混乱,影响开发效率。 2)有利于代码维护和扩展,当前类不能满足要求时,不
阅读全文
摘要:抽象类在类前面须用 abstract 关键字修饰,一般至少包含一个抽象方法,抽象方法指只有声明,用关键字 abstract 修饰,没有具体的实现的方法。因抽象类中含有无具体实现的方法,固不能用抽象类创建对象。当然如果只是用 abstract 修饰类而无具体实现,也是抽象 类。抽象类也可以有成员变量和
阅读全文
摘要:内部类指在类的内部再定义另一个类。内部类的作用:1)实现多重继承,因为 java 中类的继承只能单继承,使用内部类可达到多重继承; 2)内部类可以很好的实现隐藏,一般非内部类,不允许有 private 或 protected权限的,但内部类可以; 3)减少了类文件编译后产生的字节码文件大小; 内部类
阅读全文
摘要:都是字符串类,String 类中使用字符数组保存字符串,因有 final 修饰符,String 对象是不可变的,每次对 String 操作都会生成新的 String 对象,这样效率低,且浪费内存空间。但线程安全。 StringBuilder 和 StringBuffer 也是使用字符数组保存字符,但
阅读全文
摘要:1)==若是基本数据类型比较,是比较值,若是引用类型,则比较的是他们在内存中的存放地址。对象是存放在堆中,栈中存放的对象的引用,所以==是对栈中的值进行比较,若返回 true 代表变量的内存地址相等; 2)equals 是 Object 类中的方法,Object 类的 equals 方法用于判断对象
阅读全文