关闭
当前搜索:

为什么Java中的字符串被定义为不可变的

字符串,想必大家最熟悉不过了,通常我们在代码中有几种方式可以创建字符串,比如: String s = “Hollis”; 这时,其实会在堆内存中创建一个字符串对象,其中保存了一个字符数组,该数组中保存了字符串的内容。 上面的箭头可以理解为“存储他的引用”。 当我们在代码中连续创建两个相同的字符串的时候,其实会指向同一个对象。因为当一个字符串被被创建的时候,首先会去这个字符串池中......
阅读(33) 评论(0)

JDK动态代理给Spring事务埋下的坑

一、场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1、场景A: 这里其实是分别执行了两个事务,执行的结果是两个方法都可以插入数据!如下: 2、场景B: 修改上述代码如下: Propagation.REQUIRES_NEW的......
阅读(57) 评论(0)

四张图了解Tomcat系统架构

俗话说,站在巨人的肩膀上看世界,一般学习的时候也是先总览一下整体,然后逐个部分个个击破,最后形成思路,了解具体细节,Tomcat的结构很复杂,但是 Tomcat 非常的模块化,找到了 Tomcat最核心的模块,问题才可以游刃而解,了解了Tomcat的整体架构对以后深入了解Tomcat来说至关重要! 一、Tomcat顶层架构 先上一张Tomcat的顶层结构图(图A),如下: Tomca......
阅读(630) 评论(0)

分布式锁三种实现方式

一、为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡...
阅读(62) 评论(0)

有界、无界队列对ThreadPoolExcutor执行的影响

Java提供了4种线程池: newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor、newScheduledThreadPool,你可以通过Executors来实例化这四种线程池。这四种线程池都直接或者间接获取的ThreadPoolExecutor实例 ,只是实例化时传递的参数不一样。所以如果java提供的四种线程池满足不了我们...
阅读(47) 评论(0)

Java 泛型详解

泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。1.泛型基础1.1泛型类我们首先定义一个简单的Box类:public class Box { private String object; public void set(String object) { this.o...
阅读(37) 评论(0)

ThreadLocal实现原理和内存泄漏问题

1.概述ThreadLocal不是为了解决多线程访问共享变量,而是为每个线程创建一个单独的变量副本,变量在多线程环境下访问(通过get或set方法访问)时能保证各个线程里的变量相对独立于其他线程内的变量,ThreadLocal实例通常来说都是private static类型。2.实现原理ThreadLocal可以看做是一个容器,容器里面存放着属于当前线程的变量。ThreadLocal类提供了四个对外...
阅读(42) 评论(0)

java编程思想-12通过异常处理错误

java的基本理念是“结构不佳的代码不能运行”。1.概念“异常”这个词有“我对此感到意外”的意思。问题出现了,你也许不清楚该如何处理,但你的确知道不应该置之不理;你要停下来,看看是不是有别人或在别的地方,能够处理这个问题。只是在当前的环境中还没有足够的信息来解决这个问题,所以就把这个问题提交到一个更高级别的环境中,在这里将作出正确的决定。使用异常所带来的另一个相当明显的好处是,它往往能够降低错误处理...
阅读(37) 评论(0)

java编程思想-11持有对象

1.基本概念Java容器类类库的用途是“保存对象”,并将其划分为两个不同的概念: 1) Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。 Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)2)Map。一组成对的“键值对”对象,允许你使用键来查找值。 Arraylist允许你使用数字来查找值,因...
阅读(64) 评论(0)

java编程思想-10内部类

简单来说,将一个类的定义放在另一个类的定义内部,这就是内部类。内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性。1、创建内部类把类的定义置于外部类的里面:public class Parcel{ class Contents{ private int i = 11; public int value(){ re...
阅读(42) 评论(0)

java编程思想-09接口

接口和内部类为我们提供了一种将接口和现实分离的更加结构化的方法。1、抽象类和抽象方法下面是抽象方法声明所采用的语法:abstract void f();包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。(否则,编译器便会报错。) 如果一个抽象类不完整,那么当我们试图产生该类的对象时,由于为抽象类创建对象是不安全的,所以我们会从编译器那里得到一条出错信息。这样,编译...
阅读(36) 评论(0)

MySQL技术内幕InnoDB存储引擎-03文件

1.参数文件当MySQL实例启动时,MySQL会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等设置。MySQL实例也可以不需要参数文件,这时所有的参数值取决于编译MySQL时指定的默认值和源代码中指定参数的默认值。参数的值可以在information_schema架构下的GLOBAL_VARIABLES视图来进行查找: sel...
阅读(44) 评论(0)

MySQL技术内幕InnoDB存储引擎-02InnoDB存储引擎

1、InnoDB存储引擎概述从MySQL5.5.8版本开始是默认的表存储引擎,该存储引擎是第一个完整支持ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU。2、InnoDB体系架构InnoDB存储引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 1.维护所有进程/线程需要访问的多个内...
阅读(40) 评论(0)

MySQL技术内幕InnoDB存储引擎-01mysql体系结构和存储引擎

1.定义数据库和实例数据库 (database): 物理操作系统文件或其他形式文件类型的集合。实例(instance) : MySQL数据库由后台线程以及一个共享内存区组成,共享内存可以被运行的后台线程所共享,数据库实例才是真正用于操作数据库文件的。mysql被设计为一个单进程多线程架构的数据库,mysql数据库实例在系统上的表现就是一个进程。当启动实例时,MySQL数据库会去读配置文件,根据配置...
阅读(57) 评论(0)

java编程思想-08多态

在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。多态通过分离做什么和怎么做,从另一角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性,还能够创建可扩展的程序。“封装”通过合并特征和行为来创建新的数据类型。“实现隐藏”则通过将细节“私有化”把接口和实现分离开来。多态的作用则是消除类型之间和耦合关系。继承允许将对象视为它自己本身的类型或其基类型来处理。这种能力极为重...
阅读(38) 评论(0)

java编程思想-07复用类

复用代码是Java众多引人注目的功能之一。 复用类有两个方法。第一种:只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。第二种:按照现有类的类型来创建新类。无需改变现有类的形式,采用现在类的形式并在其中添加新代码。这种方式称为继承。 1.组合语法 只需将对象引用置于新类中即可。编译器并不会简单地为每一个引用都创建默认对象。如果想要初始化这些引用,可以...
阅读(42) 评论(0)

java编程思想-06访问权限控制

访问控制(或隐藏具体实现)与“最初的实现并不恰当”有关。便于未来重构代码,而不必对业务层做过多的改变。因此,Java提供了访问控制修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的。访问控制的等级,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键词)、和private。1、包:类库单元包内含有一组类,它们在单一的名字空间之下被组织在了一起。比如,...
阅读(48) 评论(0)

java编程思想-05初始化与清理

初始化和清理是涉及安全的两个问题。Java中采用了构造器,一个在创建对象时被自动调用的特殊方法,并额外提供了“垃圾回收器”。1.用构造器确保初始化创建对象时,如果其类具有构造器,Java就会在用户有能力操作对象之前自动调用相应的构造器,从而保证了初始化的进行。不接受任何参数的构造器叫做默认构造器,Java文档中通常使用术语无参构造器。假设类Tree 有一个构造器,它接受一个整型变量来表示树的高度,那...
阅读(61) 评论(0)

java编程思想-04控制执行流程

1.true和false所有条件语句都利用条件表达式的真或假来决定执行路径。Java不允许我们将一个数字作为布尔值使用。2.if-elseif-else语句是控制程序流程的最基本形式,其中的else是可选的。else if 表示一个else后面紧跟另一个新的if语句。3.迭代while,do-while和for循环用来控制循环,语句会重复执行,直到起控制作用的布尔表达式得到“假”的结果为止。whil...
阅读(42) 评论(0)

java编程思想-03操作符

1.使用java操作符操作符接受一个或多个参数,并生成一个新值。有些操作符可能会改变操作数自身的值,这被称为“副作用”。那些能改变其操作数的值的操作符,最普遍的用途就是用来产生副作用,但要记住,使用此类操作符生成的值,与使用没有副作用的操作符生成的值,没有什么区别。几乎所有的操作符都只能操作“基本类型”。例外的操作符是“=”、“==”、和“!=”,这些操作符能操作所有的对象。此外,String类支持...
阅读(40) 评论(0)
42条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:3313次
    • 积分:308
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:20篇
    • 译文:0篇
    • 评论:0条
    文章存档