![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
汐梦聆海
過去を捨てなくては 未来の場所がない
展开
-
Leetcode 1144
今天做了一个Leetcode题很有意思,有别于其他算法题,这是一个跟多线程相关的题,首先看一下题目:我们提供了一个类:public class Foo { public void one() { print("one"); } public void two() { print("two"); } public void three() { print("three"); }}...原创 2019-11-03 11:26:34 · 1010 阅读 · 1 评论 -
http协议
HTTP,超文本传输协议(Hyper Text Transfer Protocol),是互联网应用最广泛的一种网络协议。HTTP基于 TCP/IP 协议之上的应用层协议,自身是无状态无连接的,默认端口为80。浏览器和服务器之间,使用的就是这种HTTP协议。当我们在浏览器的地址栏输入一个地址的时候,希望访问服务器的某个页面。这个过程其实是两个应用程序之间的交互,一个应用程序是客户端浏览器,另一个应...原创 2019-10-31 19:47:30 · 725 阅读 · 0 评论 -
【面试题】HashMap中如何将对象作为key
我们都知道HashMap中包含若干个键值对<key, value>,而key可以使用很多类型,如Integer,String等等。那么,我们可以将自定义的对象作为这个key吗?答案是可以的,但是必须要重写hashcode()和equals()这两个方法。如果不重写这两个方法会怎么样呢?假设我们创建了这个对象的两个实例,分别为obj1和obj2。obj1和obj2是完全一样的,因为他...原创 2019-10-26 19:10:48 · 3177 阅读 · 0 评论 -
【面试题】HashMap,HashTable和concurrentHashMap的区别
HashMap:线程不安全;key值可以为null;底层的实现是数组+链表/红黑树(同一个桶上面链的长度大于8时转化为红黑树);HashTable:线程安全,当有线程访问时,使用synchronized将整个表进行独占,效率较低;key值不可以为null;底层实现是数组+链表;concurrentHashMap:线程安全,采用CAS和synchronized操作,每个线程只对访问数据的桶进行加...原创 2019-10-26 17:15:58 · 444 阅读 · 0 评论 -
Java网络编程
如果涉及到两台主机之间进行通信,那么就要引入网络的概念。计算机网络把不同主机连接起来,实现一些资源和数据的共享。以TCP/IP五层模型为例,回顾一下每一层的作用(从低到高):物理层:定义物理设备如何进行数据的传输,各种硬件设备、网线、接口等,主要以比特为单位传输;数据链路层:将上面层的报文封装成帧,具有差错检验等功能(循环冗余码、海明码);网络层:以ip数据报为单位,每个主机或者路由器都...原创 2019-10-24 21:44:18 · 305 阅读 · 0 评论 -
DAL、DAO、ORM、Active Record辨析
模型 Model模型是MVC中的概念,指的是读取数据和改变数据的操作(业务逻辑)。一开始我们直接把和数据库相关的代码放在模型里(sql直接写在代码中),这样就会导致以后的维护相当麻烦。业务逻辑的修改都需要开发者重新写sql,如果项目需要分库,需要将sql语句抽出来,放到单独的一层。这一层就是DAL(数据访问层)。持久层Persistence持久层只是一个逻辑概念而已,主要任务是负责把数据保存...转载 2019-10-23 22:55:13 · 462 阅读 · 0 评论 -
Java线程池
对于一个线程来说,创建和销毁 是非常消耗时间和资源的。如果过于频繁的进行线程的创建和销毁,非常消耗系统资源,势必会影响系统性能。同样地,如果并发的线程过多,那么很多线程会因为抢占系统资源而导致阻塞。为了解决这些问题,引入了线程池的概念。线程池的思想大致如下:准备一个存放任务的队列;一次性地创建n个线程,启动线程。此时由于任务队列是空的,线程处于等待状态;向任务队列中放入一个任务,就会有...原创 2019-10-22 13:46:28 · 276 阅读 · 0 评论 -
Java多线程交互
线程交互有时线程之间有交互通知的需求,例如生产者消费者问题。生产者每次生产一个商品,消费者每次消耗一个商品;当商品数目为0的时候,消费者线程需要等待生产者生产出商品,才能继续运行;当商品数目达到上限时,生产者线程需要等待消费者消耗了商品。才可以继续运行。在操作系统中,上述思想采用的是信号量机制以及PV操作,对应Java中的wait() 和 notify() 方法:wait() :让当前占用了...原创 2019-10-22 10:00:10 · 467 阅读 · 0 评论 -
Java多线程同步
同步在实际中,我们可能遇到这样一个问题。假设线程 thread1 和 thread2 都对一个变量 i 进行操作,线程 thread1 每次让 i 加一,线程 thread2 每次让 i 减一。假设:t1 时刻,thread1 读取 i 的数据为100;t2 时刻(thread1 还没来得及加一),thread2 也读到了修改之前的数据 i,其值为100;t3 时刻,thread1 执行...原创 2019-10-21 23:07:29 · 271 阅读 · 0 评论 -
Java多线程基础
进程和线程进程:正在运行的程序实例,是资源分配的基本单位。例如我打开了英雄联盟 lol.exe,就启动了一个进程。多进程:在我启动 lol.exe 之后,又打开了一个 dota.exe,即多个程序在同时运行。线程:线程是进程的一部分,是调度和执行的基本单位,属于进程的一部分。例如在 lol.exe 这个进程中,盖伦攻击亚索就是一个线程实现的。多线程:在同一时刻,盖伦攻击亚索,同时辛德拉在攻...原创 2019-10-21 20:01:56 · 314 阅读 · 0 评论 -
Java匿名内部类和lambda表达式
在定义一个抽象类或接口以后,我们无法将其直接实例化。那么怎么将其实例化呢?最容易想到的是再定义一个类,并继承这个抽象类(或实现这个接口),然后把抽象方法补全,就可以对这个子类进行实例化了。那么实际应用中,定义如此多个class是比较繁琐的,因此这里引入了匿名内部类和Lambda表达式的概念。匿名内部类首先看一段简单的代码: interface Behavior { void eat(S...原创 2019-10-20 12:41:45 · 678 阅读 · 0 评论 -
Java IO操作
什么是流?流可以理解为一系列的数据。在实际应用中分为输入流InputStream 和输出流OutputSteam。文件输入流:将数据从磁盘上的文件读取到JVM中来;文件输出流:将程序中的数据写到磁盘上的文件中去。流下面对应两种不同的形式,分别是 字节流和字符流。字节流以 字节 的形式进行进行读取和写入数据。一个字节对应8位,共128种组合,对应不同的 ASCII 码。例如65对应大写 ...原创 2019-10-19 18:26:25 · 316 阅读 · 0 评论 -
Java泛型
泛型在java中是非常常用的。如果不使用泛型,创建一个ArrayList时,里面的元素都是Object类型的。所有类型的对象都可以保存到ArrayList中,例如String,Integer,Double类型等等,这给开发人员带来了很多不必要的麻烦。因此,如果在创建ArrayList后面加上一个泛型,如代码:ArrayList<Integer> arr = new ArrayLi...原创 2019-10-19 14:20:24 · 341 阅读 · 0 评论 -
Java异常之throw,throws和Throwable
Java异常处理中有throw开头的三兄弟,分别是throw,throws以及Throwable,那么他们之间到底怎么区分呢,且听我慢慢道来。ThrowableThrowable是一个类,该类被异常类Exception以及错误类Error继承,其主要结构如下:Throwable |-- Error 严重错误,如栈溢出...原创 2019-10-19 10:04:43 · 5757 阅读 · 1 评论 -
Java二叉树的创建及遍历
//定义二叉树节点 public static class Node { Node left; //左节点 Node right; //右节点 Integer value; //节点值 public void add(Integer v) //插入节点 { if(value == null) value = v; else { if...原创 2019-10-18 14:30:33 · 332 阅读 · 0 评论 -
Java遍历HashMap的两种方式
通过keySet方法由于Map中的元素都是“key-value”形式的,且key值唯一。因此可以将所有的key值存放到一个集合中,通过遍历这个集合,就能得到所有的key,进而得到对应的value值。方法概述如下:使用keySet方法将Map中的所有key取出来,存放到一个集合中;对这个集合进行遍历(迭代器/增强for),得到每一个key;使用Map中的get方法,得到每一个key值对应的...原创 2019-10-18 09:26:32 · 502 阅读 · 0 评论 -
Java中ArrayList和LinkedList的异同
作为List下面的两个重要实现类,ArrayList和LinkedList在开发中有着不同的应用,其不同点可以大致概括如下:ArrayList是用线性表(数组)实现的,而LinkedList是用链表来实现的;在查找和修改方面,ArrayList速度更快,因为ArrayList可以直接访问到数组的下标,而Linked...原创 2019-10-17 18:46:41 · 418 阅读 · 0 评论 -
Java抽象类与接口的区别
在Java中,抽象类 (abstract class) 和接口 (interface) 的概念是有些相似的,例如两者都不能被实例化,所以比较容易混淆,在这里简单概括一下两者的不同点:一个类只能继承一个 abstract class,但是可以实现多个 interface;interface 中所有的方法都必须是抽象的,而 abstract class 中既可以有抽象方法也可以有非抽象方法...原创 2019-10-17 18:42:30 · 294 阅读 · 0 评论