02 2021 档案

摘要:先看看表中的数据都有一些什么内容。 1.数据类型 表里的数据,都需要有一个确切的数据类型。先来看看表支持哪些数据类型吧?(以下列举常用的) int、bigint、float、double、char、varchar、date、datetime,BLOB、CLOB int和bigint是整型数据,int 阅读全文
posted @ 2021-02-27 15:48 deng-hui 阅读(281) 评论(0) 推荐(0)
摘要:数据库就是用来存储数据的,之前的数据要么是直接存储在程序的变量中直接操作,要么是直接存储在文件中利用文件流来操作。但是呢,这些都不是存储数据的最佳方式,存储数据的最佳方式就是今天的重头戏:数据库啦! 废话不多说。 数据库有MySQL、Oracle,DB2,sql server等等,Java中最常用的 阅读全文
posted @ 2021-02-26 10:57 deng-hui 阅读(193) 评论(0) 推荐(0)
摘要:注解:Annotation,也是一种引用数据类型。编译之后生成class文件。 语法: [修饰符列表] @interface 注解名{ 属性(可有可无) } IDEAZ中可直接生成Annotation: package com.dh.annotation; public @interface MyA 阅读全文
posted @ 2021-02-23 20:26 deng-hui 阅读(96) 评论(0) 推荐(0)
摘要:获取到Class对象之后,就可以利用Class对象获取和操作类的属性、构造器、方法、父类和接口了。 所有的方法都可以查java.lang.Class的api文档。 以下逐一介绍: 1.属性 通过Class对象获取类的属性: //获取所有公共的属性 Field[] getFields(); //获取所 阅读全文
posted @ 2021-02-23 20:23 deng-hui 阅读(455) 评论(0) 推荐(0)
摘要:1.反射的作用是什么? 通过反射机制可以操作字节码文件。 相关类: java.lang.Class:字节码文件类; java.lang.reflect.Field:属性字节码类; java.lang.reflect.Constructor:构造方法字节码; java.lang.reflect.Met 阅读全文
posted @ 2021-02-23 20:22 deng-hui 阅读(476) 评论(0) 推荐(0)
摘要:Object中有两个涉及到了线程的方法: void wait():让当前线程进入等待状态,直到被唤醒;(会释放锁) void notify():唤醒当前正在等待的线程。(只会通知,不会释放锁) 因为Object是所有类的鼻祖,所以每一个对象都拥有wait()和notify()。 生产者和消费者模型 阅读全文
posted @ 2021-02-23 20:20 deng-hui 阅读(356) 评论(0) 推荐(0)
摘要:之前介绍了两种实现多线程的方式:继承Thread类和实现Runnable接口。但是这两种方式的线程都不能返回一个返回值,因为run()没有返回值。 但是有时候我们委派一个线程去执行一个任务,我们希望这个线程可以返回该任务的执行结果。 JDK8中推出了一种新的实现多线程的方式:实现Callable接口 阅读全文
posted @ 2021-02-23 20:19 deng-hui 阅读(320) 评论(0) 推荐(0)
摘要:Java中又两种线程: 用户线程:普通的线程; 守护线程:又可叫做后台线程,如垃圾回收线程。一般是死循环执行,等到所有的用户线程结束,守护线程就结束。 如:我们需要每天的00:00就进行数据的备份,这个时候我们就需要一个定时器线程,并且将该定时器线程设置为守护线程。 1.守护线程 守护线程是一直执行 阅读全文
posted @ 2021-02-23 20:18 deng-hui 阅读(280) 评论(0) 推荐(0)
摘要:对锁的使用不恰当时,很容易会造成死锁,死锁不会报异常,只是程序一直不停止,很难调试,最好不要写出死锁的代码。 比如: A占有了R1资源,但是需要R2资源,B占有了R2资源,但是需要R1资源,A、B此时就会一直陷入等待中...... 死锁代码 面试你就有可能遇到让你手写一个死锁代码的题目! 因为只有你 阅读全文
posted @ 2021-02-23 20:16 deng-hui 阅读(70) 评论(0) 推荐(0)
摘要:分析以下四个程序:判断t2线程是否需要等待t1线程执行完毕再执行? (1) package com.dh.threadsafe3; public class SynchronizedTest { public static void main(String[] args) { Do d = new 阅读全文
posted @ 2021-02-23 20:15 deng-hui 阅读(292) 评论(0) 推荐(0)
摘要:项目最后是发布运行在服务器上的,服务器已经实现了多线程,所以我们在编写程序时需要关注的其实是项目中的数据在多线程并发环境下的安全问题。 先来看一个例子:(只是例子,忽略生活) A和B同时去操作一个余额为1w的银行账户,A先去ATM机中取1w,然后这个时候发生了网络延迟,银行账户没有更新现在的余额为0 阅读全文
posted @ 2021-02-23 20:12 deng-hui 阅读(218) 评论(0) 推荐(0)
摘要:1.线程生命周期 线程的生命周期有五个: 新建状态 就绪状态(可运行状态) 运行状态 阻塞状态 死亡状态 图解: 2.线程常用方法 线程有哪些方法可以查看api文档中的Thread类,以下只列举常用的。 (1)线程名字相关方法 void setName(String name):设置线程的名字(不设 阅读全文
posted @ 2021-02-23 20:11 deng-hui 阅读(186) 评论(0) 推荐(0)
摘要:1.进程和线程的区别 **进程就是一个应用程序。**生活化之后就是一个个的不同的公司,像阿里巴巴、京东...... 而**线程是进程的一个执行单元。**像阿里巴巴中的马云、童文红...... 一个进程中可以存在一个或者多个线程。 **进程A和进程B之间的内存是独立不共享的。**像阿里和京东的资源肯定 阅读全文
posted @ 2021-02-23 20:10 deng-hui 阅读(279) 评论(0) 推荐(0)
摘要:SortedMap是Map接口的子接口,而TreeMap是SortedMap接口的实现类。 TreeMap的底层是二叉树,key是无序、不可重复的。 TreeMap的特点是:元素会按照从小到大的顺序排序。 在看TreeMap前,先看看TreeSet,存储在TreeSet中的元素实际上是存储在Tree 阅读全文
posted @ 2021-02-23 20:09 deng-hui 阅读(296) 评论(0) 推荐(0)
摘要:虽然不经常使用Hashtable,但是会经常使用Properties。 Properties是Hashtable的子类,是线程安全的。 Properties的key和value都是String类型的,又称为属性对象。 特点是key无序、不可重复。 其中有几个常用的方法: Object setProp 阅读全文
posted @ 2021-02-10 18:05 deng-hui 阅读(292) 评论(0) 推荐(0)
摘要:首先需要明确的是,Map与Collection是不同的接口,二者是没有关系的。 Map是(key,value)键值对元素形式的集合的超级父接口,HashMap和Hashtable是Map的实现类。 1.Map 存储元素的形式为(key,value),key和value存储的都是引用数据类型,key起 阅读全文
posted @ 2021-02-10 14:35 deng-hui 阅读(463) 评论(0) 推荐(0)
摘要:Set是Collection的子接口,HashSet是Set的实现类,SortedSet是Set的子接口,TreeSet是SortedSet的实现类。 这些集合共同的特点都是:无序、不可重复。 方法也与Collection相差无几。 1.Set Set是一个接口,不能直接实例化对象,要借助其实现子类 阅读全文
posted @ 2021-02-09 22:27 deng-hui 阅读(94) 评论(0) 推荐(0)
摘要:在JDK5之后,引入了泛型的概念:泛型是用来限制集合储存的数据类型的。 语法: 集合<数据类型> 变量 = new 集合<数据类型>() 注意: 数据类型不能是基本数据类型(集合本身储存的就是引用); //ArrayList<int> al = new ArrayList<int>();//会报错 阅读全文
posted @ 2021-02-09 16:04 deng-hui 阅读(110) 评论(0) 推荐(0)
摘要:List是Collection的一个子接口,ArrayList、LinkedList、Vector是List的实现类。 它们的共同特点都是:有序、可重复。 它们拥有Collection集合的所有方法,也有一些自己特有的方法。 因为是有序的,即集合中的元素是有下标的,所以可以通过元素下标来操作元素。 阅读全文
posted @ 2021-02-09 15:25 deng-hui 阅读(149) 评论(0) 推荐(0)
摘要:Collection集合是所有单值存储方式的超级接口,所以在实例化对象的时候要使用它的实现子类。 Collection c = new ArrayList(); Collection集合常用方法 boolean add(E e):向集合中添加元素; int size():获取集合的元素个数; voi 阅读全文
posted @ 2021-02-09 00:16 deng-hui 阅读(228) 评论(0) 推荐(0)
摘要:之前我们学习了使用数组来存储一组数据,但是数组是只能存储同种数据类型的定长数据容器,而很多时候往往都是不确定数据元素个数的,采用数组如果开辟空间过大,很容易浪费内存,太小了又不方便扩容。这时候我们就需要一个像哆啦a梦的口袋一样的东西了,什么都能装,还没有大小的限制。 1.为什么有集合?集合是什么? 阅读全文
posted @ 2021-02-09 00:15 deng-hui 阅读(158) 评论(0) 推荐(0)
摘要:1.什么是序列化和反序列化? 我们知道存在内存中的对象,当关机时就会消失,所以有的对象我们需要保存到硬盘中,这时候就需要借助对象字节流了。 内存中的对象数据保存到硬盘中的过程,我们称之为序列化; 硬盘中的对象数据重新恢复到硬盘中,称之为反序列化。 如图: 2.序列化和反序列化的实现 (1)准备一个实 阅读全文
posted @ 2021-02-09 00:14 deng-hui 阅读(561) 评论(0) 推荐(0)
摘要:File类是Object的一个子类,与四大家族流是没有关系的,所以File不能对文件进行读和写的操作。 **File类是文件和目录路径名的抽象表示。**即File对象对应的可能是一个文件,也可能是一个目录。 对于File类,查看api文档,可以看到有非常多的方法,需要掌握其中的一些常用方法。 Fil 阅读全文
posted @ 2021-02-08 14:10 deng-hui 阅读(923) 评论(0) 推荐(0)