1.static inner class和 non-static inner class的区别
"Static inner classes can be instantiated without the creation of an object of the enclosing type; non-static inner classes are linked to an instance of the enclosing type."
2.内部类可以被继承,或者抽象实现
3.wait与notify一般是配套使用的,
一个线程在同步语句中调用Object.wait方法,使该对象或类的锁释放掉,等待CPU分配时间片给其它线程,当其它线程调用Ojbect.notify后,wait方法才会返回。
notify与notifyAll的唯一区别就在于线程调用Object.wait方法后,有几个线程在等待其它线程将对象或类的锁释放掉,注意其它线程没有调用notify或notifyAll之间,调用Object.wait的线程是不是获取锁的,它们的区别就在于是唤醒调用wait方法的线程还是所有等待锁被释放的线程。
4. # 调用obj的wait(), notify()方法前,必须获得obj锁,也就是必须写在synchronized(obj) {...} 代码段内。
# 调用obj.wait()后,线程A就释放了obj的锁,否则线程B无法获得obj锁,也就无法在synchronized(obj) {...} 代码段内唤醒A。
# 当obj.wait()方法返回后,线程A需要再次获得obj锁,才能继续执行。
# 如果A1,A2,A3都在obj.wait(),则B调用obj.notify()只能唤醒A1,A2,A3中的一个(具体哪一个由JVM决定)。
# obj.notifyAll()则能全部唤醒A1,A2,A3,但是要继续执行obj.wait()的下一条语句,必须获得obj锁,因此,A1,A2,A3只有一个有机会获得锁继续执行,例如A1,其余的需要等待A1释放obj锁之后才能继续执行。
# 当B调用obj.notify/notifyAll的时候,B正持有obj锁,因此,A1,A2,A3虽被唤醒,但是仍无法获得obj锁。直到B退出synchronized块,释放obj锁后,A1,A2,A3中的一个才有机会获得锁继续执行。
5.区别:
1.CHAR 的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),而同样的VARCHAR2 (20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。
2.CHAR的效率比VARCHAR2的效率稍高。
3.目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle不这样做,尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
何时该用CHAR,何时该用varchar2?
CHAR与VARCHAR2是一对矛盾的统一体,两者是互补的关系.
VARCHAR2比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。
VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。
6.索引是表示数据的另一种方式,它提供的数据顺序不同于数据在磁盘上的物理存储顺序。索引的特殊作用是在表内重新排列记录的物理位置。索引可建立在数据表的一列上,或建立在表的几列的组合上。
回想一下图书馆中,存放着一架一架的图书。假设要找一本书,图书管理员视必要一架一架的寻找,直到找到想要的那本书为止。这样的查找肯定费时费力,那么管理员可以将所有的图书标题按字母分类建立索引卡片,按字母顺序放在不同的办公抽屉中,这样一架一架查找图书的过程就变成了在办公桌前抽屉中查询索引卡片了,很容易得到有关这本书的信息。
再进一步设想,图书管理员很勤快,他不仅按照图书标题字母分类,而且还按作者姓名和出版社分别建立了另外的索引卡片,这个过程将给借阅者在检索图书信息时以更大的灵活性。因此在一个数据表中是可以建立多个索引的。
在数据库中,对无索引的表进行查询一般称为全表扫描。全表扫描是数据库服务器用来搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。这个操作可以比作在图书馆中查书,从第一个书架的第一本书开始,浏览每一本书,直到发现所要的书为止。为了进行高效查询,可以在数据表上针对某一字段建立索引,由于该索引包括了一个指向数据的指针,数据库服务器则只沿着索引排列的顺序对仅有一列数据的索引进行读取(只建立一个索引)直至索引指针指向相应的记录上为止。由于索引只是按照一个字段进行查找,而没有对整表进行遍历,因此一般说来索引查找比全表扫描的速度快。
那么,是不是使用索引查询一定比全表扫描的速度快呢?答案是否定的。如果查询小型数据表(记录很少)或是查询大型数据表(记录很多)的绝大部分数据,全表扫描更为实用。例如,查询“性别”字段,其值只能是“男或女”,在其上建立索引的意义就不大,甚至不允许在布尔型、大二进制型(备注型、图像型等)上建立索引。
分享到:
相关推荐
SSH框架错误总结 SSH框架是基于Java的Web应用程序框架,广泛应用于企业级应用开发中。然而,在开发和调试过程中,经常会遇到各种错误和问题。本文总结了SSH框架常见的错误和解决方法,以便开发者快速解决问题,提高...
C语言段错误总结 C语言中的段错误是指访问了不可访问的内存,这个内存区要么是不存在的,要么是受到系统保护的。段错误是一个非常麻烦的问题,因为它可能导致程序崩溃或出现不可预料的结果。 一、什么是段错误? ...
VHDL常见错误总结.rarVHDL常见错误总结.rarVHDL常见错误总结.rarVHDL常见错误总结.rarVHDL常见错误总结.rarVHDL常见错误总结.rarVHDL常见错误总结.rarVHDL常见错误总结.rar
根据提供的文件标题、描述、标签以及部分内容,可以总结出与MTK平台相关的多个技术知识点,主要涉及MTK平台上的软件开发、错误处理及调试等方面。下面将对这些知识点进行详细的阐述。 ### MTK平台概述 MTK即...
以下是对SSH常见错误及其解决方案的详细总结: 1. **错误1:Permission denied (publickey).** 这个错误意味着服务器拒绝了你的公钥身份验证。可能的原因是: - 公钥未正确地添加到服务器的`~/.ssh/authorized_...
C语言程序设计常见错误总结分析 C语言是一种广泛使用的编程语言,但是在实际编程过程中,程序员经常会遇到各种错误。这些错误可能是语法错误、逻辑错误或运行错误,本文将对这些错误进行总结和分析。 语法错误是指...
段错误总结 _segmentation fault_ 是一种常见的程序错误,在 Linux 中尤为常见。今天,我们将详细总结段错误的概念、原因、避免方法等方面的知识点。 什么是段错误? 段错误(Segmentation Fault)是一种计算机...
KEIL51调试时一些的错误总结 KEIL51是基于C51编译器的集成开发环境,对于C51编译器的调试工作非常有用。以下是KEIL51调试时一些常见的错误总结和解决方法: 1. 提示无M51文件编译时候提示:F:\...\XX.M51 File has...
Go语言常见错误总结 Go语言是一种静态类型、编译型、并发型、垃圾回收的编程语言,由Google开发。随着Go语言的普及,越来越多的开发者开始使用Go语言进行开发。在开发过程中,开发者会遇到各种错误,以下是常见的Go...
以下是一些常见的C++错误及其解决方案,这些经验总结可以帮助开发者避免重蹈覆辙。 1. **注释代码**: 当需要临时禁用一大段代码时,可以使用条件编译宏`#if 0`和`#endif`来包裹这段代码,这比使用多行注释更可读...
里面的错误总结是本人学JAVA是总结出来的错误,大部分的错误都在里面,者是为了让JAVA学者不为错误而发愁
工作学习牛客网刷题错误总结
PHP错误总结.pdf
js最全错误总结.xls,
笔试强训选择题错误总结
《中国学生写英语论文的常见错误总结》是一篇旨在帮助中国工程类研究生改善英语论文写作质量的文章。通过分析超过两百篇技术性英文论文,作者总结出了一系列中式英语习惯,并提供了修正方法。以下是对这些常见错误的...
我们在编译工程时常会遇到莫名错误,这份文档会帮助带你 keil错误总结