1、事务的ACID性:

(1)原子性:要么做,要么都不做。程序操作执行未成功,则所做的更改会被撤销;

(2)一致性:比如转账,a转给b一百元,则a的账户少100,b的账户多100,前后数据要一致;

(3)隔离性:由数据库锁实现。事务的隔离级别有4种:未提交读、提交读、可重复读、串行化;

(4)持久性:数据的修改提交是永久的(个人理解);

(1)(2)可由Undo日志实现,系统操作数据的时候,Undo日志会备份数据,当系统出现错误或者回滚的时候,就从备份数据中恢复;

(4)由Redo Log重做日志。将Redo Log持久化,不用持久化数据,当系统奔溃时,可根据Redo Log的内容,恢复所有数据到最新状态。

2、索引:快速检索数据库中的数据,是一种数据结构。

MySQL的优化:三种方式:1索引优化、2 sql优化、3 表优化

(1)索引优化:a、设置索引:where子句常用的列设置索引;

b、不使用索引:模糊查询不使用索引,比如like '%a'这种;

c、联合索引:order by多个字段进行排序,建立联合索引;

(2)sql优化:a、少用select *,而用select 具体的字段;

b、多表连接时,小表驱动大表,即小表join大表(小表数据更少,join出来的数据集也会更小);

c、用exist 代替in;

d、where子句中避免对字段进行函数操作

(3)表优化: a、字段尽可能设置not null;

b、字段长度固定,查询会更快;

另,MySQL的分页:sql中使用limit  page,rows。页数少则使用基本分页方式;页数多用字查询的分页方式;

3、线程的四种实现方式:(1)继承thread类并重写run方法;

(2)实现runnable接口并重写run方法;

            (3)实现callable接口通过FutureTask包装器来创建Thread线程;

            (4)使用ExecutorService、callable、Future实现有返回结果的线程;

4、线程的生命周期:new新建 -->   runnable就绪 -->  running运行 --> blocked阻塞 --> dead死亡

5、线程start方法与run方法的区别:start方法使线程开始执行,就绪状态,一旦得到CPU则开始run方法,结束则线程终止,实际上start方法还是去执行线程中的run方法;

run方法一般都是重写的,相当于一个普通方法,直接调用还是要顺序执行的,在主线程之后执行。

6、volatile只修饰成员变量:则该变量对所有线程可见,保证多线程间的可见性,每次读取volatile变量一定是最新数据

            volatile与CAS(comareAndSet)结合,保证了原子性

            volatile变量可以保证下一个读取操作在前一个写操作之后发生;

            使用volatile会禁止语义重排序;

7、类加载过程: 加载 --> 连接 --> 初始化 --> 使用 --> 卸载

加载过程:将class字节码文件加载到内存中,并将这些数据转换成方法区中的运行时数据(静态变量、静态代码块、常量池等),在堆中生成一个Class类对象代表这个类(反射原理),作为方法区类数据的访问入口。

连接:• 验证确保加载的类信息符合JVM规范,没有安全方面的问题。 

          • 准备正式为类变量(static变量)分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配。

     • 解析虚拟机常量池内的符号引用替换为直接引用(地址引用)的过程

初始化:执行构造器方法

8、StringBuffer与StringBuilder

  StringBuffer是线程安全的,效率低,它的append方法有同步锁

      StringBuilder是线程不安全的,效率高,它的append方法没有同步锁。

9、hashmap与hashTable

  hashmap是线程不安全的,hashTable线程安全,因为他的方法是synchronized,是同步的

  hashmap允许null作为key或value,hashTable不允许。

10、ArrayList、LinkedList与Vector

  都是List的子类;

  ArrayList线程不安全,单线程访问集合时,用它,效率高。 扩容是增加原来的0.5倍;

  Vector是线程安全的。扩容是增加原来的1倍;

  LinkedList线程不安全,基于双向链表实现。

11、List与Map的区别:

  List数据是有序的且允许重复;   Map数据无序,key不能重复,value可以

12、匿名类与内部类

内部类:A类中定义的另一个类B,B称为内被类 ;

    A的成员变量B中也有效,可以用(内部类可直接调用静态或非静态的外部类属性),但B的类体不能声明类变量;

    B中的方法可以调用A的方法(A的类方法也可以调用B的方法);

    B可由A创建B的对象来使用

局部内部类:A的方法中创建的内部类,不能访问所在局部的局部变量,不能定义static变量

匿名类:没有名字的类,不能引用,不能实例化,只用一次,不能有构造器;

    利用父类的构造函数和自身类体构成一个类;

    可继承或重写父类方法,可访问外部类的成员变量和方法;

    类体不能声明static成员变量或方法

    interface Cubic{   Double   getCubic(int n);   }

    Class A {   void f(Cubic c) {  xxxxx  }}

    Demo {

      main(){

         A a= new A();

         //此处f函数的参数就是匿名内部类,没有名字,实现了接口Cubic的getCubic方法

         a.f(new Cubic(){

            public double getCubic(int n){ xxxx }

         })

      }

    }

13、多线程如何避免死锁?    指定获取锁的顺序。

多线程创建线程池:使用线程池工厂类Executors中的静态方法newFixedThreaPool(numThreads)来创建

一个线程池:ExecutorService   es = Executors.newFixedThreaPool(2);   //初始2个线程

无限线程池:ExecutorService ctp = Executors.newCachedThreadPool();

      以上,创建newCachedThreadPool实际都是用java.util.concurrent.ThreadPoolExecutor来返回:

          public static ExecutorService newCachedThreadPool(){

              return new ThreadPoolExecutor(0,Integer.Max_VALUE,60L,TimeUnit.SECONDS,new SynchrononsQueue<Runnable>());

          }

单个线程线程池:  Executors.newSingleThreadExecutor(); 

关闭线程池:
  shutdown执行后停止接受新任务,会把队列中的任务执行完;
  shutdownNow执行后停止接受新任务,但会中断所有的任务,将线程池状态改为stop

Java基础汇总2019的更多相关文章

  1. java基础汇总

    1.关于Http和Hibernatet里面Session的区别HttpSession      HttpSession:是一个抽象接口,J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个H ...

  2. Java基础-线程安全问题汇总

    Java基础-线程安全问题汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存泄漏和内存溢出(out of memory)的区别 1>.什么是内存溢出 答:内存溢出指 ...

  3. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  4. 【Java面试题系列】:Java基础知识常见面试题汇总 第一篇

    文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后,一般都会让先做一份笔试题,然后公司会根据笔试题的回答结果,确定 ...

  5. Java基础知识常见面试题汇总第一篇

    [Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...

  6. JAVA基础知识之面向对象编程知识汇总

    JAVA基础课程部分面向对象已经学习完成,知识结构如下: 总体知识框架: 类的结构: 面向对象编程三大特征: 关键字和抽象类接口等: 常见知识汇总: 成员变量和局部变量比较 有无返回值方法比较: 权限 ...

  7. java基础知识文章汇总

    将之前的所有关于Java基础知识的随笔,整理成质量较高的十几篇随笔,几乎是好几篇比较零散的随笔合成现在的一篇,自认为还不错. java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规 ...

  8. 转载-java基础学习汇总

    共2页: 1 2 下一页  Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3     Java基础学习总结——Java对象的序列化和 ...

  9. Java基础学习总结(70)——开发Java项目常用的工具汇总

    要想全面了解java开发工具,我们首先需要先了解一下java程序的开发过程,通过这个过程我们能够了解到java开发都需要用到那些工具. 首先我们先了解完整项目开发过程,如图所示: 从上图中我们能看到一 ...

随机推荐

  1. Python3(十一) 原生爬虫

    一.爬虫实例 1.原理:文本分析并提取信息——正则表达式. 2.实例目的:爬取熊猫TV某个分类下面主播的人气排行 分析网站结构 操作:F12查看HTML信息,Ctrl+Shift+C鼠标选取后找到对应 ...

  2. php curl 相关知识

      整理了下curl  $ch = curl_init(); # 设定url和把结果返回,是否返回头部 curl_setopt($ch, CURLOPT_URL, 'http://www.baidu. ...

  3. Apache 相关 mod_rewrite ,RewriteCond,{HTTP_HOST}

    1.给子域名加www标记  RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC] RewriteCond %{HTTP_HOST} !^www\ ...

  4. Web渗透测试漏洞手册及修复建议

    Web渗透测试漏洞手册及修复建议 0x0 配置管理 0x01 HTTP方法测试 漏洞介绍: 目标服务器启用了不安全的传输方法,如PUT.DELETE等,这些方法表示可能在服务器上使用了 WebDAV, ...

  5. Date() 按条件打印当前日期的月份和周

    条件:打印 月份-第几周 若本月前七天不在全在第一周则这一周计入到上月第五周. 分析: 1.条件判断分别处理前七天和大于等于七天的数据: 2.当前月的7号是关键,如果在周天就不需要放到上月,如果不在周 ...

  6. 秘钥分割-Shamir秘钥分割门限方案

    精选: 1.问题的提出 2.需求的抽象: 有一个秘钥S,转换成另一种数据数据形式,分配给12个人(s1,s2,.......,s12),使得任意3个人的数据拼凑在一起就可以反向计算出秘钥S. 3.解决 ...

  7. MySQL导出数据时提示文件损坏

    使用Navicat工具,优先将整个数据库的表和数据导出. 如果遇到文件损坏错误可以在表实例界面选中所有表,然后将表转储为SQL文件(结构和数据). 在目标数据库执行导出的SQL文件,导入结构和数据. ...

  8. jq--实现自定义下拉框

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 思科路由器、交换机配置Console 线线序 (亲测可以)

    网上有许多标准console线配置线序,在配置思科网络设备时都是不能用的,因为思科的console线序是专用的, 如下 水晶头侧 线序 B 白橙,橙,白绿,蓝 ,白蓝,绿,白粽,棕 对应串口侧线序 1 ...

  10. python基础入门之三 —— 字符串

    1.格式 一对引号和三对引号可以表示字符串 (三引号保留换行) 2.下标 从0开始循序向下分配 str1='abcdefg' print(str1) print(str1[0]) print(str1 ...