无招胜有招之语言基础
java的面向对象
面向对象是指用对象来模拟现实实际的事物,用对象之间的关系描述事物之间的联系。面向对象的特点主要可以概括为封装性,继承性和多态性。
java语言的三大特征
封装、继承、多态,
封装是面向对象编程的核心思想。将对象的属性和行为分装起来,其载体就是类,类通常对客户隐藏起实现细节,这就是封装的思想,简单来说:就是把一个类封装为一个高度自治和相对封闭的个体。
继承:指类与类之间的关系,实现代码重用,即在已有类的基础上定义新的类,新的类能继承已有类的属性与行为,并扩展 新的功能,而不需要把已有类的内容重新写一遍。
多态:简单来说就是一个事物的多种形态,指同意操作作用于不同对象,可以有不同的解释,产生不同的执行结果。
java语言数据类型
byte,short,int,long,boolean,char,float,double
java的自动类型转换,强制类型转换
自动类型转换也称隐式类型转换,当满足1、转换的两种数据类型彼此兼容。2、目标数据类型的取值范围比元数据类型大。两个条件时可以进行自动类型转换。自动类型转换可以保持数据的精度。
如:char->int->long->float->double
强制类型转换又称显式转换,指两种数据类型转换过程中需要显示地进行声明。当转换的两种数据类型彼此不兼容忙活着目标数据类型的取值范围小于原类型而无法进行自动类型转换是,就需要强制类型转换。
String的不可变性, 虚拟机的常量池,String.intern() 的底层原理
String不可变性指String类中使用final关键字字符数组保存字符串,private final char value[],所以String对象是不可变的。
虚拟机的常量池,百度百科解释:常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量。是JVM的一块特殊的内存空间。
常量池的好处 常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。
(1)节省内存空间(2)节省运行时间
String.intern() 的底层原理
public native String intern();
String的intern()方法会查找在常量池中是否存在一份equal相等的字符串,如果有则返回该字符串的引用,如果没有则添加自己的字符串进入常量池。
Java语言中的关键字: final、 static、transient、instanceof、volatile、synchronized
关于这些关键字的底层原理问题,交给你们了,欢迎留言好吧。o(╥﹏╥)o
final:1.final修饰的类不能被继承,2.final修饰的方法不能被子类重写,3.final修饰的变量是常量,初始化后不能被修改。
static:表示静态,用于修饰成员变量、成员方法以及代码块。1.修饰的成员变量:又称类变量,被整个类所有,因此可以通过类名直接访问。2.修饰的成员方法,叫静态方法,无需创建类的实例就可以调用静态方法直接通过类名调用。3.静态代码块:最早执行的代码块。
transient:让某些被修饰的成员属性变量不被序列化。
instanceof:用于判断一个对象是否一个类(或接口)的实例,返回值为boolean值。也就是说,使用instanceof做判断时,两个类之间必须有关系。
volatile:简单来说:保持内存可见性和防止指令重排序。即一旦一个共享变量被volatile修饰之后,具有两层含义:1.保证了不同线程对这个变量进行操作是的可见性、即一个线程修改了某个变量的值,这个新值对其他线程来说是立即可见的。2.禁止进行指令重排序。
volatile本质是在告诉JVM当前变量在寄存器(内存)中的值是不确定的,需从主存中读取。
synchronized:Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题。
Java中常用的集台类的实现原理: ArrayList/LinkedList/Vector、SynchronizedList/Vector、HashMap/HashTable/ConcurrentHashMap 互相的区别以及底层实现原理
ArrayList/LinkedList/Vector:1.ArrayList底层是用数组实现的,更擅长遍历搜索查找,因为数组有下标的概念,可以很方便跳出指定的位置,不擅长插入和删除的操作,线程不安全。2.LinkedList底层是用链表实现的,链表是一个个节点链起来的,擅长插入、删除等操作。3.Vector底层是数组实现的,支持下边访问元素,查询快,增删慢,线程安全。
SynchronizedList/Vector:1.SynchronizedList和Vector的一个比较明显区别就是一个使用了同步代码块,一个使用了同步方法。2..SynchronizedList有很好的扩展和兼容功能。他可以将所有的List的子类转成线程安全的类。3.使用SynchronizedList的时候,进行遍历时要手动进行同步处理。4.SynchronizedList可以指定锁定的对象。
【补充】通过Collections.synchronizedList()
方法可以将线程不安全的List
转成线程安全的List
。
【补充】同步代码块和同步方法的区别 1.同步代码块在锁定的范围上可能比同步方法要小,一般来说锁的范围大小和性能是成反比的。 2.同步块可以更加精确的控制锁的作用域(锁的作用域就是从锁被获取到其被释放的时间),同步方法的锁的作用域就是整个方法。 3.静态代码块可以选择对哪个对象加锁,但是静态方法只能给this对象加锁。
HashMap/HashTable/ConcurrentHashMap :
先说HashMap和HashTable之间的区别:
1.map非线程安全、效率高、允许null键,rable线程安全、效率低、不允许null键,报nullpointerexception.
2、map初始容量大小16,每次扩容给2倍,table初始化大小16,每次扩容为原来的2n+1。
3.map底层数据结构为1.8后map在解决哈希冲突时有了较大的变化,当链表长度大于8时,将链表转化为红黑树,以减少搜索时间。table没有这种机制。
再说HashTable/ConcurrentHashMap之间的区别:两者的区别主要体现在实现线程安全的方式上不同。
1.jdk1.7ConcurrentHashMap底层采用分段的数组(segment)和链表实现,jdk1.8后采用的数据结构和hashmap1.8的结构一样,数组+链表+红黑树。table底层数据结构数组+链表。
2.实现线程安全的方式(重要):
**jdk1.7的时候,concurrentHashMap(分段锁)对整个桶数组进行分割分段(segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。1.8后摒弃segment的概念,并发控制使用synchronized和CAS来操作。
**.table使用synchronized来保证线程安全,效率非常低下。同一把锁。阻塞。
动态代理的实现方式
常用的动态代理实现方式有两种,一种是利用JDK反射机制生成代理,另外一种是使用CGLIB代理。
JDK代理必须要提供接口,而CGLIB则不需要,可以直接代理类。
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。
动态代理与静态代理相比较,最大的好处是接口中声明的所有方法都被转移到调用处理器一个集中的方法中处理(InvocationHandler.invoke)。这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。而且动态代理的应用使我们的类职责更加单一,复用性更强
比较喜欢一个博主所写的“关于动态代理与AOP的关系,个人觉得AOP是一种思想,而动态代理是一种AOP思想的实现!”。
路漫漫,加油!!!
无招胜有招之语言基础相关推荐
- 【数据湖存储】数据湖的终极奥秘,无招胜有招
作为海量数据存储与分析的重要承载方式的数据湖,从2011年概念诞生至今,已经发展了9个年头.而数据湖是什么?又能为数字化经济带来什么?<阿里云数据湖存储解决方案蓝皮书>将为您揭开数据湖的终 ...
- 无招胜有招——面向对象设计模式随笔,
最近在学习面向对象设计模式,GOF的23种设计模式大概看了一遍,简单总结一下,设计模式主要分为三种模式,分别是创建模式,结构模式,行为模式. 回过头想一下具体有哪些模式,在什么情况下用什么设计模式,好 ...
- "无招胜有招"nbsp;史上最全的互…
课前秀:三个段子 第一个段子:一个毫无餐饮行业经验的人开了一家餐馆,仅两个月时间,就实现了所在商场餐厅坪效第一名;VC投资6000万,估值4亿元人民币,这家餐厅是雕爷牛腩. 只有12道菜,花了500万 ...
- Dirty Approach之无招胜有招
每个网站,几乎都有"新闻"的模块.在中国独有的ICP--Internet Copy and Past--模式下,多数站点也靠"转贴"手段汇集新闻信息.如果说新浪 ...
- 要锤炼出营销魔法,口碑营销“无招胜有招”
药剂师们从不指望偶然配成长生不死药,化学家们不会空耗时日炼铅成金,美国宇航局的科学家们也不会徒劳地修补时间机器. 可是,宝洁公司倒是有一帮人耗费四年时光,要锤炼出营销魔法∶自然而然的口碑,也就是大家告 ...
- 无招胜有招之Java进阶JVM(五)垃圾回收
垃圾检测.回收算法 垃圾收集器一般必须完成两件事:检测出垃圾:回收垃圾.怎么检测出垃圾?一般有以下几种方法: 引用计数法:给一个对象添加引用计数器,每当有个地方引用它,计数器就加1:引用失效就减1. ...
- 最有用的期货技术 — 无招胜有招
什么样的期货策略可持续? 期货市场里不缺交易明星,只缺交易寿星.高超的期货交易技术一直是期货交易者们乐于追逐的梦想.很多人在技术学习上花费了上万学费,在技术实战研究上交的学费更是无法估量.期货市场里股 ...
- 无招胜有招之spring _高频面试题
1.使用 Spring 框架的好处是什么? 1. 轻量:Spring 是轻量的,基本的版本大约 2MB. 2. 控制反转:Spring 通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查 ...
- 无招胜有招之Java进阶JVM(八)类加载机制
6.1.ClassLoader的两个作用和一个任务 作用:1.将Class加载到JVM中2.审视每一个类应该由谁加载. 任务:将Class字节码重新解析成统一要求的对象格式 6.2上级委托接待机制又称 ...
最新文章
- Docker学习(三)-----Docker镜像常用命令
- 黑科技:CSS定制多行省略
- 选择纯种犬还是杂种犬?
- 【MATLAB统计分析与应用100例】案例008:调用rand函数生成均匀分布随机数
- VS2008打包(含水晶报表)与安装注意事项
- 实现一个shared_ptr
- 计算机多窗口显示桌面,怎么同时电脑桌面打开多个excel窗口
- EasyBoot制作启动光盘教程
- rrweb学习案例(网页录制,回放)-demo
- 最全官方win10系统安装教程,教你如何用u盘安装win10系统?
- win10 查看笔记本电池循环次数
- OA办公系统选购,千万别犯这些错
- wolfpack是什么_Steam
- 数据结构——图的十字链表实现
- 欧姆龙PLC和FANUC发那科DeviceNet通讯
- 百度在40所高校办了AI俱乐部,俱乐部还百度一堆黑科技
- 狂风暴雨——雨过天晴篇:数据流层Namsara发布
- 单片机原理及应用第三版课后答案张毅刚
- 完整 MAXWELL 核心登場,NVIDIA GEFORCE GTX TITAN X 顯示卡實測
- 山寨Google服务器
热门文章
- CodeForces - 1327D Infinite Path(图论综合)
- 利用JSP编写程序初步
- 史上最简单的git教程搭配Github和Gitee一起食用更佳
- 初级教程之---delphi调试
- 【Boost】boost库asio详解5——resolver与endpoint使用说明
- static_cast, dynamic_cast, const_cast学习和探讨
- Shell程序设计 | 文本处理工具 :正则表达式、grep、sed、awk
- 推荐一个免费的最强刷题网站!
- 你知道SQL的这些错误用法吗?
- 93后阿里P7晒出工资单:原来是狠补了这个~真香