天道酬勤,学无止境

深入学习JAVA -IO流详解

目录

  • (一)IO流基本概念
  • (二)文件字节输入流
    • (2.1)使用输入流的4个基本步骤
    • (2.2)构造方法
    • (2.2)使用输入流读取文件
  • (三)文件字节输出流
    • (3.1)使用输出流的4个基本步骤
    • (3.2)构造方法
    • (3.3)使用输出流写字节
  • (四)文件字符输入、输出流
  • (五)缓冲流
    • (5.1)缓冲流概述
    • (5.2)构造方法
  • (六)随机流
    • (6.1)概述
    • (6.2)构造方法
  • (七)数组流
  • (八)数据流
    • (8.1)概述
    • (8.2)代码实现
  • (九)对象流

(一)IO流基本概念

Java对数据的操作是通过流的方式,io是java中实现输入输出的基础,它可以很方便的完成数据的输入输出操作,Java把不同的输入输出抽象为流,通过流的方式允许Java程序使用相同的方式来访问不同的输入、输出。
在这里插入图片描述
在这里插入图片描述

(二)文件字节输入流

(2.1)使用输入流的4个基本步骤

1.设定输入流的源。
2.创建指向源的输入流。
3.让输入流读取源中的数据。
4.关闭输入流。

(2.2)构造方法

如果对文件读取需求比较简单,从文件系统中的某个文件中获得输入字节,可以使用文件字节输入流FileInputStream类。

 构造方法:
  // 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定
    FileInputStream(File file)
 // 通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的路径name指定
 FileInputStream(String name)

(2.2)使用输入流读取文件

int read(byte b[])// 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中,返回实际读取的字节数目。到达尾部返回-1.
int read(byte[] b, int off, int len)//将输入流中最多 len 个数据字节读入 byte 数组。返回实际读取的字节数目。到达尾部返回-1。off指定从某个位置开始存取。
long skip()//从源中读取单个字节的数据,该方法返回字节值(0-255),未读取出字节返回-1。
void close()//关闭流

(三)文件字节输出流

(3.1)使用输出流的4个基本步骤

1.设定输出流的目的地。
2.创建指定目的地的输出流。
3.让输出流把数据写入到目的地。
4.关闭输出流。

(3.2)构造方法

如果对文件读取需求比较简单,可以使用==文件字节输出流FileOutputStream类。==字节文件输出流是用于将数据写入到File,从程序中写入到其他位置。

 构造方法:
 FileOutputStream(File file)// 创建一个向指定File对象表示的文件中写入数据的文件输出流
 FileOutputStream(File file, boolean append)// 创建一个向指定File对象表示的文件中写入数据的文件输出流
 FileOutputStream(String name)// 创建一个向具有指定名称的文件中写入数据的输出文件流
FileOutputStream(String name, boolean append)// 创建一个向具有指定name的文件中写入数据的输出文件流

(3.3)使用输出流写字节

字节输出流的write方法以字节为单位向目的地写入单个数据。
void write(int n)输出流调用该方法向目的地写入单个字节。
void write(byte b[])输出流调用该方法向目的地写入一个字节数组。
void write(byte b[],int off,int len)给定字节数组中起始于偏移量off处取len个字节写到目的地。
void close()关闭输出流

(四)文件字符输入、输出流

java中字符流主要由两个基类Reader和Writer,分别对应字符输入流和字符输流。使用字符数组读取数据,即以字符为基本单位处理数据。
Reader的主要方法:
abstract viud close() 关闭流,并且释放该流占用的所有系统资源
**int read() **从流中读取单个字符
**int read(char[] cbuf) **从当前位置读取cbuf.length个字符到cbuf数组中,但实际读取的字符个数取决于流中剩余字符个数。返回值为实际读取的字符个数。
**abstract int read(char[] cbuf, int off, int len)**从当前位置读取len个字符到cbuf中,第一个字符存放在cbuf[off]中,第二个字符存放在cbuf[off+1]中,依次类推。实际读取的字符的个数取决于流中剩余的字符个数,返回值为实际读取的字符个数。
Writer的主要方法:
Writer append(char c) 追加字符c到此Writer流中,追加到尾部。返回值为追加后的此Writer
**Writer append(CharSequence csq) **追加字符序列csq到此Writer流中,追加到尾部,返回值为追加后的此Writer
**Writer append(CharSequence csq,int start,int end) **
追加字符序列csq的子序列到Writer流中,子序列为序列csq的start到end部分,追加到尾部,返回值为追加后的此序列。
**abstract void close()**关闭流,在关闭之前先调用flush()
**void write(String str) **将字符串写入到流中
**void Write(String str, int off, int len) **将字符串str指定位置的子串写入到流中,子串起始位置为off,子串长度为len。

(五)缓冲流

(5.1)缓冲流概述

缓冲流是对文件流处理的一种流,增强了读写文件的能力。够更高效的读写信息。因为缓冲流先将数据缓存起来,然后一起写入或读取出来。
flush() 和 close()
flush 是从缓冲区把文件写出,
close 是将文件从缓冲区内写出并且关闭相应的流。

(5.2)构造方法

BufferedReader 字符输入缓冲流
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
BufferedWriter 字符输出缓冲流
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 创建一个使用指定大小输出缓冲区的新缓冲字符输出流。

(六)随机流

(6.1)概述

RandomAccessFile类创建的流称作随机流,RandomAccessFile类既不是InputStream类的子类,也不是OutputStream类的子类。当准备对一个文件进行读写操作时,创建一个指向该文件的随机流即可,这样既可以从这个流中读取文件的数据,也可以通过这个流写入数据到文件。

(6.2)构造方法

==RandomAccessFile(File file, String mode) ==参数file是一个File对象,给出创建的流的源,也是流目的地。参数mode取r(只读)或rw(可读写),决定创建的流对文件的访问权力。
RandomAccessFile(String name, String mode): 参数name用来确定一个文件名,给出创建的流的源,也是流的目的地。参数mode取r(只读)或rw(可读写),决定创建的流对文件的访问权力。

(七)数组流

流的源和目的地除了可以是文件,还可以是计算机内存。不需要手动关闭流。只有字节流,没有字符流
字节数组输入流(ByteArrayInputStream)

byte[] src = "IO is easy".getBytes();
InputStream is = new ByteArrayInputStream(src);
byte[] flush = new byte[1024];
int len =-1;
while(len=is.read(flush)!=-1){
 String str = new String(flush,o,len);
 System.out.println(str);
}

字节数组输出流(ByteArrayOutputStream)

byte[] dest = null;//其实可以不用,为了风格统一
ByteArrayOutputStream baos = new ByteArrayOutputStream();
String str = "IO is easy";
byte[] datas=str.getBytes();//字符串--->字节数组(编码)
baos.write(datas,0,datas.length);
baos.flush();
dest = baos.toByteArray();//获取数据
System.out.println(dest.length + new String(dest,0,dest.length));

(八)数据流

(8.1)概述

数据输入流DataInputStream允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。数据输入流DataInputStream允许应用程序以与机器无关方式从底层输入流中读取基本Java数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

(8.2)代码实现

import java.io.*;
public class text1 {
public static void main(String[] args) throws IOException {
 DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("aa.txt")));
 DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("aa.txt")));
 dos.writeUTF("行大旺");
 dos.writeInt(18);
 dos.writeBoolean(false);
 dos.writeChar('a');
 dos.flush();
 String msg = dis.readUTF();
 int age = dis.readInt();
 boolean flag = dis.readBoolean();
 char ch = dis.readChar();
 System.out.println(msg);
 System.out.println(age);
 System.out.println(flag);
 System.out.println(ch);
 dos.close();
 dis.close();
}
}

(九)对象流

对象流可以将一个对象写出,或者读取一个对象到程序中,也就是执行了序列化和反序列化的操作
序列化将一个对象存放到某种类型的永久存储器上称为保持。如果一个对象可以被存放到磁盘或磁带上,或者可以发送到另外一台机器并存放到存储器或磁盘上,那么这个对象就被称为可保持的。

import java.io.*;
public class text1 implements Serializable{
 String xing;
 int age;
 public text1(){
 }
 public text1(String xing,int age){
  this.xing=xing;
  this.age=age;
 }
}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 阿里云技术专家深入拆解Java虚拟机,独家资料大放送
    前言 JVM对实际简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少有人能很好的去学习及理解什么是JVM,以及弄清楚JVM的工作原理,其实我个人认为这块还是非常有必要去认真了解及学习的,特别是刚入门或入门不久的Java开发来说,这是Java的基石。 其次,从各大招聘平台来看,一线互联网企业招聘需求(尤其是阿里巴巴),第一条就明确了要掌握JVM原理,因为JVM是中高级程序员必须要掌握的技术,学JVM也是为了更深入地理解Java以及更好的解决线上排查问题。 网上有关Java虚拟机的资料主要还是周志明的《深入理解Java虚拟机》,今天我就带大家来看看阿里云大师如何深入拆解Java虚拟机,让你更深入更通俗的理解JVM。 本期《深入拆解Java虚拟机》学习资料获取方式:帮忙转发一下,关注后添加助理vx:yunduoa2019或扫描下图二维码,跟随助理指引自行获取 Java代码是怎么运行的? Java的基本类型 Java虚拟机是如何加载Java类的 JVM是如何执行方法调用的?(上) JVM是如何执行方法调用的?(下) JVM是如何处理异常的? JVM是如何实现反射的? JVM是怎么实现invokedynamic的?(上) JVM是怎么实现invokedynamic的?(下) Java对象的内存布局 垃圾回收(上) 垃圾回收(下)
  • 阿里云面试官深入拆解Java虚拟机,拆解资料限时开源
    前言 JVM对实际简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少有人能很好的去学习及理解什么是JVM,以及弄清楚JVM的工作原理,其实我个人认为这块还是非常有必要去认真了解及学习的,特别是刚入门或入门不久的Java开发来说,这是Java的基石。 其次,从各大招聘平台来看,一线互联网企业招聘需求(尤其是阿里巴巴),第一条就明确了要掌握JVM原理,因为JVM是中高级程序员必须要掌握的技术,学JVM也是为了更深入地理解Java以及更好的解决线上排查问题。 网上有关Java虚拟机的资料主要还是周志明的《深入理解Java虚拟机》,今天我就带大家来看看阿里云大师如何深入拆解Java虚拟机,让你更深入更通俗的理解JVM。 本期《深入拆解Java虚拟机》学习资料获取方式:帮忙转发一下,关注后添加助理vx:yunduoa2019或扫描下图二维码,跟随助理指引自行获取 Java代码是怎么运行的? Java的基本类型 Java虚拟机是如何加载Java类的 JVM是如何执行方法调用的?(上) JVM是如何执行方法调用的?(下) JVM是如何处理异常的? JVM是如何实现反射的? JVM是怎么实现invokedynamic的?(上) JVM是怎么实现invokedynamic的?(下) Java对象的内存布局 垃圾回收(上) 垃圾回收(下)
  • 腾讯技术官深入解析Java虚拟机的资料,在GitHub火了
    前言 JVM对实际简单开发的来说关联的还是不多,一般工作个一两年(当然不包括爱学习的及专门做性能优化的什么的),很少有人能很好的去学习及理解什么是JVM,以及弄清楚JVM的工作原理,其实我个人认为这块还是非常有必要去认真了解及学习的,特别是刚入门或入门不久的Java开发来说,这是Java的基石。 其次,从各大招聘平台来看,一线互联网企业招聘需求(尤其是阿里巴巴),第一条就明确了要掌握JVM原理,因为JVM是中高级程序员必须要掌握的技术,学JVM也是为了更深入地理解Java以及更好的解决线上排查问题。 网上有关Java虚拟机的资料主要还是周志明的《深入理解Java虚拟机》,今天我就带大家来看看阿里云大师如何深入拆解Java虚拟机,让你更深入更通俗的理解JVM。 本期《深入拆解Java虚拟机》学习资料获取方式:帮忙转发一下,关注后添加助理vx:yunduoa2019或扫描下图二维码,跟随助理指引自行获取 Java代码是怎么运行的? Java的基本类型 Java虚拟机是如何加载Java类的 JVM是如何执行方法调用的?(上) JVM是如何执行方法调用的?(下) JVM是如何处理异常的? JVM是如何实现反射的? JVM是怎么实现invokedynamic的?(上) JVM是怎么实现invokedynamic的?(下) Java对象的内存布局 垃圾回收(上) 垃圾回收(下)
  • 深入浅出Android性能调优,Android篇
    持续更新中,并完善答案------ 最近博主身边的安卓朋友换个坑,接到BAT等大厂面试邀请,回来聊天,博主记录下各大厂必问的部分有用面试题.希望对你学习,工作,面试有所帮助.(博主会持续收集更新这些面试题),博主会对分享和投稿的面试题做一些过滤,在此再次感谢分享面试题各位朋友和读者 最近很多人说,Android越来越不好找工作了,学习NDK开发会不会好点,今天就聊聊这个问题。是否应该选择学NDK? 1.哪些场景下要用到NDK开发? 跨平台的库,如FFmpeg, skip,weex, 加固,防逆向 签名校验 图片压缩 音视频解码 OpenGL ES 高级特效 热修复 andfix 人脸识别 face++ 加密算法 微信apk中的so文件 手机淘宝apk中so文件 2.NDK开发,和JNI开发有什么区别? JNI是JAVA NATIVE INTERFACE, JNI只是一个中间层。JNI中要用c/c++作具体实现。达到c/c++与Java通信的作用。不一定要编译成so文件,才叫JNI开发。也不是Android上才有,Java程序员一样可以做JNI,不会写Activity也可以。Java最简单Main函数,可以声明一个Native方法,在VS中,写一段c/c++代码,按照JNI规范。编译成dll文件,放到Java工程中,一样可以执行。而so是只是不同平台动态链接库的产物
  • 新冠疫情在家快疯了?来学习这些Java架构书籍备战接下来的面试环节吧
    关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,Java程序员你们准备好了吗?双手奉上Java程序员必读之热门书单JVM+Redis+Nginx+Tomact+Spring全家桶。 还有文档资料分享喔,转发+关注,然后私信回复我“书”即可获得这些书籍的免费领取方式! 1.《深入理解Java虚拟机:JVM高级特性与最佳实践》 本书共分为五大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对JVM进行了全面而深入的分析,深刻揭示了JVM的工作原理。   第一部分从宏观的角度介绍了整个Java技术体系、Java和JVM的发展历程、模块化,以及JDK的编译,这对理解本书后面内容有重要帮助。   第二部分讲解了JVM的自动内存管理,包括虚拟机内存区域的划分原理以及各种内存溢出异常产生的原因;常见的垃圾收集算法以及垃圾收集器的特点和工作原理;常见虚拟机监控与故障处理工具的原理和使用方法。   第三部分分析了虚拟机的执行子系统,包括类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。   第四部分讲解了程序的编译与代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;讲解了虚拟机的热点探测方法、HotSpot的即时编译器、编译触发条件,以及如何从虚拟机外部观察和分析JIT编译的数据和结果。
  • 带着问题深入学习Handler,安卓系列学习进阶视频
    背景 前段时间朋友辞去了北京一家小创公司Android开发的工作,准备寻找新的工作的时候,要和我聊聊天。告诉我再找不到工作就考虑转行了! 话语间无不感叹安卓有点强弩之末的味道!聊天过程中,朋友也顺带分享了一波阿里饿了么、百度Android岗的面经。我也帮他内推了几份工作岗位,却因为技术欠缺和经验不足等问题被友好的回绝了! Java相关 Java基础 HashMap1.7和1.8的实现原理final关键字,为什么匿名内部类使用局部引用要用final Java多线程 线程池的使用和原理 锁机制:synchronized、Lock volatile关键字 ThreadLocal原理 JVM Java内存结构Java垃圾回收机制Java类加载过程 Android相关 Android基础Handler通信机制跨进程通信方式Activity启动模式内存优化、布局优化View的绘制流程Android事件分发机制动画的分类及其原理MVC、MVP和MVVM模式SparseArray原理 Android开源框架 Android网络库:Volley、OkHttp和Retrofit的使用、原理和对比Android图片库:Glide和Picasso的使用、原理和对比EventBus的使用和原理RxJava的使用和原理Router的使用和原理 网络基础 HTTP相关:包括HTTP2.0、HTTPS等TCP相关
  • 看完豁然开朗!三年老Android经验面经,内含福利
    起由 搞了7年多Android了,前阵子面试了一家不大不小的公司。公司不大,面试官架子还不小,一副目中无人高高在上的样子,搞得好像我一万个想进他们公司、我进不了他们公司我全家都得喝西北风一样。搞得我是真的郁闷:现在搞Android的找工作这么卑微??? 给大家分享一下我的面试经历 国外的IT大佬,都是那种技术大牛,他们40多岁,50多岁,依然还在做程序员,他们依靠的就是技术,当然,如果还是像国内一样,每天早晨过去打个卡,喝点水,和同事聊一聊中午吃什么,上午的工作推到下午,下午的工作加班完成,等到35岁的时候,一定会被新人超越,因为你做的他们都能做,他们要的工资还比你低,老板当然会放弃你了。 古人云:生于忧患,死于安乐。 现有岗位上玩命干。就是要用牛逼的技术搞定别人口中的难题,就是要加班完成时间紧任务重的项目,业界不服不罢休。跳槽。问下自己要多少钱,那些公司给得了,自己有别人要求的这些技术与管理能力没。没有就好好学,有就投简历吧。 程序员常见发展路径有两种:管理路径、技术路径,以下,enjoy: 你适合学什么?你需要学什么? 1.Java语言进阶与Android相关技术核 Android应用是由Java语言进行开发的,SDK也是由Java语言编写,对于Android来说,只要SDK没有用Kotlin重写,那么Java语言是都需要学习的。而且Android
  • 为了跳槽强刷1000道Android真题,附面试题答案
    大厂offer是每个技术人的追求? 我觉得每一个程序员的梦想大概就是能够找一份大厂的 Offer,我觉得这很正常,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。但不是每个人都能够进入大厂的,这往往取决于我们的能力、学历、面试表现等因素。 现在面试大公司你说你没有 Android Jetpack、协程、 Jetpack Compose 、Flutter 等理论等等已然大厂面试所必须的知识。但是,你真进入大厂了,可能几年都用不上这些知识,还是老老实实去写CRUD 对于想进阶成为资深的Android开发者,我认为第一步你得会搭建自己的知识体系,整理自己已经掌握的知识点和需要了解深入的知识点,再去拓展自己的知识面,而不是盲目无方向的学习,什么’‘火’‘什么’‘热’'就去跟风学习什么技术,现在大前端很热,就放弃原生去学习跨平台,其实**跨平台,flutter开发的定位,都不是替代原生,而是在原生开发上拓展技能和能力。**学习进阶是一步一步来的,自己脑子的存货充足,了解学习新技术新架构也会得心应手一些。 那么下面就展示安卓进阶学习要接触到哪些体系!(图上总结的知识技术点都是时下学习Android的重点也包括难点
  • Android面试必问!为了跳槽强刷1000道Android真题,实战解析
    大厂offer是每个技术人的追求? 我觉得每一个程序员的梦想大概就是能够找一份大厂的 Offer,我觉得这很正常,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻炼几年,相信对自己能力的提升还是非常大的。但不是每个人都能够进入大厂的,这往往取决于我们的能力、学历、面试表现等因素。 现在面试大公司你说你没有 Android Jetpack、协程、 Jetpack Compose 、Flutter 等理论等等已然大厂面试所必须的知识。但是,你真进入大厂了,可能几年都用不上这些知识,还是老老实实去写CRUD 对于想进阶成为资深的Android开发者,我认为第一步你得会搭建自己的知识体系,整理自己已经掌握的知识点和需要了解深入的知识点,再去拓展自己的知识面,而不是盲目无方向的学习,什么’‘火’‘什么’‘热’'就去跟风学习什么技术,现在大前端很热,就放弃原生去学习跨平台,其实**跨平台,flutter开发的定位,都不是替代原生,而是在原生开发上拓展技能和能力。**学习进阶是一步一步来的,自己脑子的存货充足,了解学习新技术新架构也会得心应手一些。 那么下面就展示安卓进阶学习要接触到哪些体系!(图上总结的知识技术点都是时下学习Android的重点也包括难点
  • 从零开始手写 spring ioc 框架,深入学习 spring 源码
    IoC Ioc 是一款 spring ioc 核心功能简化实现版本,便于学习和理解原理。 创作目的 使用 spring 很长时间,对于 spring 使用非常频繁,实际上对于源码一直没有静下心来学习过。 但是 spring 源码存在一个问题,那就是过于抽象,导致学习起来成本上升。 所以本项目由渐入深,只实现 spring 的核心功能,便于自己和他人学习 spring 的核心原理。 spring 的核心 Spring 的核心就是 spring-beans,后面的一切 spring-boot,spring-cloud 都是建立在这个地基之上。 当别人问你 spring 的时候,希望你可以谈谈自己对于 spring ioc 自己更深层的见解,而不是网上人云亦云的几句话。 什么是 IOC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 其中最常见的方式叫做依赖注入(Dependency Injection,简称DI)。 通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体,将其所依赖的对象的引用传递给它。 也可以说,依赖被注入到对象中。 为什么需要 IOC IoC 是解耦的一种方法。 我们知道Java 是一门面向对象的语言,在 Java 中 Everything is Object
  • 程序员课余知识的补给站
    前言:小白入门的话,个人建议还是看视频,书籍只是作为课后知识的补充,并不是作为小白入门的前提。 视频的话,在此推荐黑马程序员(传智播客)的教学视频,讲的都很全面,透彻。 获取方式:自己可以上网下载(免费的)。 文章目录 基础知识相关方面书籍《图解HTTP》:《大话数据结构》:《数据结构与算法分析:C语言描述》:《算法图解》:《算法 第四版》: Java相关方面书籍《Effective java 》:《Head First Java.第二版》:《Java多线程编程核心技术》:《JAVA网络编程 第4版》:《Java核心技术卷1+卷2》:《Java编程思想(第4版)》:《Java并发编程的艺术》:《实战Java高并发程序设计》:《Java程序员修炼之道》:《深入理解Java虚拟机(第2版)周志明》:《Netty实战》:《从Paxos到Zookeeper》: JavaWeb相关方面书籍《深入分析Java Web技术内幕》:《Spring实战(第4版)》:《Java Web整合开发王者归来》(已过时):《Redis实战》:《Redis设计与实现》《深入剖析Tomcat》:《高性能MySQL》:深入理解Nginx(第2版):《RabbitMQ实战指南》:《Spring Cloud微服务实战》:《第一本Docker书》: 操作系统相关方面书籍《鸟哥的Linux私房菜》: 架构相关方面书籍
  • kotlin实战!360°深入了解Flutter,附超全教程文档
    前文 本文希望通过揭开一些 React 隐藏的技术细节, 来辅助对官方文档中某些概念的理解 读者可以将本文看做对官方文档的补充 行文方式我采用的是提问-解答的方式, 即先根据官方文档给出的使用规则, 提出Why, 然后我们根据实际的调试再来解答这些Why, 最后系统的整理这些 Why 变成 How, 如果你们有更好的行文方式, 也欢迎留言讨论 另外为了阅读体验, 我不会粘贴过多的源码, 避免打断各位读者的思路. 刷题 我刷题的方式都是老套路了,LeetCode+《剑指offer》,虽然老,但是效果非常不错,除此之外,再搜一搜网上的一些大厂面试题、看了很多面经。这个过程不仅是个脑力活还是体力活,由于不能在公司刷题,我一般的选择方式是在晚上回到家后,刷题、刷面经一个小时到两个小时。当然也可以在上下班的路上抽时间看看题。 边刷题,边整理,方便自己以后可以复习,偶然间一看,居然整理了一千六百多页,下面把我的学习大纲分享给大家: 学习总纲 Java部分 Java基础Java并发Java虚拟机 Android部分 Android基础Android进阶开源框架 数据结构 线性表栈和队树图散列查找排序海量数据处理 算法 剑指offerLeetCode 设计模式 创建型模式结构型模式行为型模式 计算机网络 操作系统 数据库 最后 其实要轻松掌握很简单,要点就两个: 找到一套好的视频资料
  • 移动开发如何规划学习路线?掌握这些,从6k跳到20k小意思!
    开篇: 本人也是众多Android开发道路上行走的一员,听了不少大神的知乎live,自己也看了不少书,也和不少前辈交流过,所以在这里分享一下Android开发应该学习的书籍以及知识,当然,也包括一些方法,希望对更多想进入这个行业的人有所帮助。 众所周知,现在移动开发早就不是最热门的程序员职业了,如果你没一点真功夫,仅仅靠两三个月的集训已经很难在这个行业中占有一席之地了。因此,想拥有真正的“真本事”是要花相当长时间的,我的这篇学习计划主要面向的人群是敢于花时间,切能坚持下来的同学,比如说:想从事Android开发的在校大学生,想进阶的在职开发人员,以及因为个人原因想从其它方向转向Android开发的程序员。 入门阶段:快速上手,增加自信 怎样做可以让初学者觉得编程是容易学的,是有趣的?那自然就是得到一些能快速看到结果的反馈,自己写的程序能立刻运转起来并实现一些效果,是非常鼓舞人心的,因此这个阶段的第一目的是通过学习能真正动手写两个程序,并能得到快速反馈,因此推荐一些相对简单的书籍。 1.Java初级入门: 推荐书籍:《Head First Java》,《Java从入门到精通》《Head First Java》不用多说,业界公认的Java入门佳作,如果你的编程底子非常薄,可以通过这本书快速学习Java。而对于这本《Java从入门到精通》,也许很多人嗤之以鼻,觉得是只教表面
  • Java后端工程师要具备哪些技能或技术?这是Java的系统学习路线!
    首先你确定你要进入Java开发?决定学习Java是要下很大决心的,因为Java技术的世界是个无底洞,永远也学不完,不废话了,我就简单的说一下自己的看法(偏重Java方面,什么html、css、js这些不在这次的讨论之内,虽然JavaServer开发有时候也都需要懂点): 1.Core Java,就是Java基础、JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不足够,知其然还要知其所以然,JDK的源代码写的非常好,要经常查看,对使用频繁的类,比如String,集合类(List,Map,Set)等数据结构要知道它们的实现,不同的集合类有什么区别,然后才能知道在一个具体的场合下使用哪个集合类更适合、更高效,这些内容直接看源代码就OK了 2.多线程并发编程,现在并发几乎是写服务端程序必须的技术,那对Java中的多线程就要有足够的熟悉,包括对象锁机制、synchronized关键字,concurrent包都要非常熟悉,这部分推荐你看看《Java并发编程实践》这本书,讲解的很详细。 3.I/O,Socket编程,首先要熟悉Java中Socket编程,以及I/O包,再深入下去就是Java NIO,再深入下去是操作系统底层的Socket实现,了解Windows和Linux中是怎么实现socket的 4.JVM的一些知识,不需要熟悉,但是需要了解,这是Java的本质,可以说是Java的母体
  • JVM学习资源
    【官方文档】oracle JVM 规范说明书https://docs.oracle.com/javase/specs/jvms/se8/html/ 包含:JVM 的介绍;结构;编译;class 文件的结构;加载、链接、初始化;JVM 指令集;JVM 指令操作码对照表。 链接是 JDK 1.8 的版本,如需看其他版本修改 url 中的 se 后的数字即可。 【书籍】《Java虚拟机规范(Java SE 8版)》豆瓣 上面 JVM 规范说明书的中文解读,如果不习惯看官方英文文档,可以看下本书。阐释了 JVM 各方面的细节,围绕 JVM 整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对 JVM 进行全面的分析,揭示 JVM 的工作原理。 【书籍】《深入理解Java虚拟机(第2版)》豆瓣 对 JVM 进行了全面而深入的分析,深刻揭示了 JVM 的工作原理。这本书很经典,推荐。 【博文】JVM 规范阅读系列https://www.cnblogs.com/chanshuyi/p/jvm_specification_00_guide.html 【博文】JVM 基础系列https://www.cnblogs.com/chanshuyi/p/jvm_serial_00_why_learn_jvm.html 【教程】易百-Java虚拟机教程https://www
  • 安卓面试宝典,BAT等大厂必问技术面试题,详细的Android学习指南
    现在的IT行业竞争压力越来越大,尤其是Android开发行业。而很多Android程序员却每天都在重复CRUD,原地徘徊! 今年年初,你就想改变现状,于是在网上刷了大量面试题,强行记下之后,开始参加面试!但是你发现,现在的面试,却越来越难了。 投了10份简历,只有一家给了面试邀请。面试官平时的工作内容都不问,问的都是没怎么听过的名词,**什么hybird,NDK,难得问到背过的题,却不按套路出牌问原理,上来就是一顿连环炮,让你措手不及!**甚至怀疑自己是个假的程序员,感觉什么都不懂! 每个人都变得越来越浮躁了,欠的技术债太多, 到了要面试的时候,就开始病急乱投医, 一味为了面试去学习些面试题的星星点点, 或者接受各个技术群/博客/资讯网站关于技术的/关于人生的狂轰滥炸, 却积攒不到扎实的深入的技术知识或者应用经验, 这样下去只会越来越焦虑而毫无真正意义上的技术提高 知识点详细清单 总是很多人在谈做Android如何艰难,大环境差,坑位少,工资低,裁员多。 其实哪有什么互联网寒冬?只是你穿的少而已! 而想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~。 对于现在的Android及移动互联网来说,我们需要掌握的技术,我做了一个清单: 泛型原理、反射原理、Java虚拟机原理、线程池原理、注解原理、序列化、Activity知识体系
  • Android程序员的春天!该如何高效实用Kotlin?系列篇
    关于面试题 打个比方,如果把找工作理解成考大学,面试就是高考,市面上的“真题”就是模拟试卷。我们会很容易倾向于在面试前寻找对应公司的面试“真题”,重点准备,期待“押题”成功。但实际上,即使面试同一家公司,它会有不同部门,不同业务线,不同面试官,即使遇到同一面试官,他也不一定就每次考察完全一样的内容。想想高考中那些考的好的同学,他们肯定不是靠“押题”才能取得好成绩吧,他们大多靠的是平常积累及对知识点灵活掌握,那面试也一样啊。执着于搜题,把面试题当做重点进行“复习”,还不如自己划出“考纲”,各个知识点逐一检查掌握情况,复习的更全面呢。 我对于面试题的看法一直是相对保守的,这类文章一般只是内容搬运,它会存在一些偏差和误读,最重要的那就是几道题往那一扔,并没有产出有价值的东西。这也是为什么我上篇面试总结,会加了一些面试技巧,整理面试题时,也没提他们是出自哪家公司,就是不希望大家把题目区别看待。 说了这些并不是说面试题没用啊,而是希望大家不要迷信面试题,更多地去关注那些有质量有深度的技术文章。面试考核的是知识点而不是具体的某些题目,面试题的作用在于,衡量我们的知识掌握情况,便于我们查漏补缺,越说越像是针对一次“考试”了。 计划 以人为镜可以明得失, 看到了自己的不足就要针对性地做一些改变. 以下思路转变要切记: 1.核心思想, 从项目出发, 打牢基础, 逐步深入; 2
  • Android开发五年,一线互联网大厂面试真题系统收录!面试真题解析
    历时半年,我们终于整理出了这份市面上最全面的最新Android面试题解析大全! 章节目录 第一章:Android 基础 面试题 第二章:Android 高级 面试题 第三章:开源框架实战面试解析 第四章:Java 面试题 第五章:Flutter相关面试题全解析 第六章:一线大厂Android高频面试题集锦 这份最新整理的面试解析包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目加真题技术点和思维解析 可以说,如果你熟知这份PDF里面的大部分知识点(熟知,而不是深入理解原理和架构),随便去哪个互联网公司面试个20k以上的移动开发岗位很简单。 初级 初级研发工程师的定义是掌握基础的Android知识,能够独立完成一个功能,工作年限大概在1-2年,这个层级大部分人通过看一些资料书籍再经过项目练习很快可以达到。这个级别的人往往需要掌握如下一些技能: 掌握Android 四大组件知识,深入了解相关生命周期,对于Application、Fragment、Intent常见的开发知识也必须掌握。掌握Android 基本布局和控件的属性和使用,常用布局有LinearLayout、RelativeLayout、ConstraintLayout等,控件有- TextView、ImageView、RecyclerView、ScrollView等
  • java程序员看什么书籍比较好?(小白升级路线)
    最近秋招完之后想静下心好好沉淀下java的知识,因为总是感觉有好多基础知识总是掌握的不太熟,然后就开始看以前买来的书籍,作为一个已经学习了两年java的初级程序员,在学习的过程中真的是走了好多弯路,个人感觉学习java或者说是任何的编程语言,入门到熟练的最快捷径就是多看书,看好书,当然这些书籍要有相应的阅读路线,如果刚开始就看比较有深度的书籍,自信心受到打击,那学习的欲望可能就会不强,所以我推荐一些学习的路线,仅仅按照我买的书籍来推荐,当然我在买的过程在豆瓣和知乎上请教过很多前辈,本人最近也在啃。大神勿喷,本文仅适合小白,以下推荐要有一定的java基础。 java基础部分 Java编程思想Java核心技术卷一(编程思想可能比较难啃,但确实是一本好书,核心技术卷一前提是有java基础,不适合入门) java进阶部分 深入理解java虚拟机HeadFirst设计模式Effective Java(提高编写java代码) java并发编程 java并发编程之美(基础,小白可以直接看,最近在看这本书)java并发编程的艺术(要有并发基础)java并发编程实战(这本书评分很高,但是真的难啃,我买了,打算以后看) 数据库(对我来说很重要,数据库优化不仅仅是DBA的事) SQL必知必会MySQL必知必会高性能MySQL(还没买,有这个打算) 算法和数据结构 大话数据结构(C语言版,不过不影响
  • 流行语言的语言书籍/教程(Language Books/Tutorials for popular languages)
    问题 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 不久之前,我还是一名初学者,试图找到有关我想学习的语言的好书/教程。 即便如此,有时候我还是需要相对较快地为正在从事的新项目选择一种语言。 这篇文章的重点是记录这些语言的一些最佳教程和书籍。 我将以我能找到的最好的列表开始,但希望你们在那里能为您提供更好的建议/新语言。 这是我发现的: 由于现在可以进行Wiki编辑,因此我将控制权交给了社区。 如果您有任何建议,请在本节中提出。 我决定还添加一个部分,以便更好地成为一本更好的程序员书籍和在线参考。 再次欢迎所有建议。 通用编程 在线教程编程的基础作者:Karl Seguin-来自Codebetter,它基于C#,但是其思想全面适用,无法相信还没有人发表过这篇文章。 如何编写不可维护的代码-一部反手册,教您如何以最不可维护的方式编写代码。 如果这些建议中有很多没有如此正确,那将是很有趣的。 维基书籍的编程部分-由吉姆·罗伯特(Jim Robert)建议,在完成的各个阶段都有大量有关多种语言的书籍/教程只是基础知识可以体会一种语言。 图书代码完整-这本书不用多说,在很多方面都非常出色。 The Pragmatic Programmer-与主编码器一起工作的第二件事,即教您他们所知道的一切。 掌握正则表达式