Java核心技术及面试指南 PDF 全书影印版

  • 更新时间:
  • 8235人关注
  • 点击下载

给大家带来的一篇关于Java面试相关的电子书资源,介绍了关于Java、核心技术、面试指南方面的内容,本书是由北京大学出版社出版,格式为PDF,资源大小220.6 MB,金华编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:7.8分

Java核心技术及面试指南 PDF

Java是程序编写全球深受热烈欢迎的語言,尽管Java技术性在应用中已趋成熟期,但招骋销售市场的Java开发优秀人才却依然紧俏。《Java关键技术及招聘面试手册》一书,从Java关键技术的开发和招聘面试手册的分析2个层面进行,包含基础英语的语法中常见技术性点的精解、结合类与常见的数据结构剖析、异常处理与IO实际操作、多核与高并发程序编写、虚拟机内存优化方法等內容,另外教會用户怎样根据个人简历和招聘面试寻找好的工作。这书既合适在企业中从业Java程序编写和开发工作中的工作人员学习培训,也合适做为大中专高职院校大学毕业生的学习培训用书,非常有利于愿意提升专业技术人员提高效率、根据个人简历和招聘面试寻找好的工作的群体。

目录

  • 第1章 带你走进Java的世界
  • 1.1 搭建Java开发环境,运行基本程序
  • 1.1.1 在MyEclipse中开发**个Java程序
  • 1.1.2 **个程序分析容易犯的错误
  • 1.1.3 开发稍微复杂带函数调用的程序
  • 1.1.4 可以通过Debug来排查问题
  • 1.1.5 输入运行时的参数
  • 1.2 遵循规范,让你的代码看上去很专业
  • 1.2.1 注意缩进
  • 1.2.2 规范命名
  • 1.2.3 在必要的地方加注释,让别人能看懂你的代码
  • 1.2.4 把不同类型的代码放入不同的类、不同的包(package)
  • 1.3 高效学习法,让你不再半途而废
  • 1.3.1 在公司项目中,Web是重点,Core是基础
  • 1.3.2 Core和Web知识点的学习路线图
  • 1.3.3 从基本的LinkedList入手,分享一些学习方法
  • 1.3.4 除非有特殊的需求,否则可以延后学习的知识点
  • 1.3.5 以需求为导向,否则效率不高
  • 1.3.6 提升能力后,成功跳槽时常见的忧虑
  • 第2章 基本语法中的常用技术点精讲
  • 第3章 集合类与常用的数据结构
  • 第4章 异常处理与IO操作
  • 第5章 SQL,JDBC与数据库编程
  • 5.1 项目中常用SQL语句的注意事项
  • 5.1.1 尽量别写select *
  • 5.1.2 count(*)和count(字段名)的比较
  • 5.1.3 insert的注意事项
  • 5.1.4 在delete中,可以通过in语句同时删除多个记录
  • 5.1.5 merge和update的比较
  • 5.1.6 关于存储过程的分析
  • 5.2 通过JDBC开发读写数据库的代码
  • 5.2.1 MySQL数据库中的准备工作
  • 5.2.2 编写读数据表的代码
  • 5.2.3 编写插入、更新、删除数据表的代码
  • 5.2.4 迁移数据库后,JDBC部分代码的改动
  • 5.3 优化数据库部分的代码
  • 5.3.1 把相对固定的连接信息写入配置文件中
  • 5.3.2 用PreparedStatement以批处理的方式操作数据库
  • 5.3.3 通过PreparedStatement对象防止SQL注入
  • 5.3.4 使用C3P0连接池
  • 5.3.5 数据库操作方面的面试题
  • 5.4 通过JDBC进行事务操作
  • 5.4.1 开启事务,合理地提交和回滚
  • 5.4.2 事务中的常见问题:脏读、幻读和不可重复读
  • 5.4.3 事务隔离级别
  • 5.5 面试时JDBC方面的准备要点
  • 第6章 反射机制和代理模式
  • 6.1 字节码与反射机制
  • 6.1.1 字节码和.class文件
  • 6.1.2 Class类是反射实现的语法基础
  • 6.2 反射的常见用法
  • 6.2.1 查看属性的修饰符、类型和名称
  • 6.2.2 查看方法的返回类型、参数和名称
  • 6.2.3 通过forName和newInstance方法加载类
  • 6.2.4 通过反射机制调用类的方法
  • 6.2.5 反射部分的面试题
  • 6.3 代理模式和反射机制
  • 6.3.1 代理模式
  • 6.3.2 有改进余地的静态代理模式
  • 6.3.3 在动态代理中能看到反射机制
  • 6.4 你已经掌握了一种设计模式,就应大胆地说出来
  • 6.4.1 如何在面试时找机会说出“代理模式”
  • 6.4.2 面试时如何说出对代理模式的认识
  • 第7章 多线程与并发编程
  • 7.1 线程的基本概念与实现多线程的基本方法
  • 7.1.1 线程和进程
  • 7.1.2 线程的生命周期
  • 7.1.3 通过extends Thread来实现多线程
  • 7.1.4 通过implements Runnable来实现多线程(线程优先级)
  • 7.1.5 多线程方面比较基本的面试题
  • 7.2 多线程的竞争和同步
  • 7.2.1 通过sleep方法让线程释放CPU资源
  • 7.2.2 Synchronized作用在方法上
  • 7.2.3 Synchronized作用在代码块上
  • 7.2.4 配套使用wait和notify方法
  • 7.2.5 死锁的案例
  • 7.2.6 Synchronized的局限性
  • 7.2.7 通过锁来管理业务层面的并发性
  • 7.2.8 通过Condition实现线程间的通信
  • 7.2.9 通过Semaphore管理多线程的竞争
  • 7.2.10 多线程并发方面的面试题
  • 7.3 对锁机制的进一步分析
  • 7.3.1 可重入锁
  • 7.3.2 公平锁和非公平锁
  • 7.3.3 读写锁
  • 7.4 从内存结构观察线程并发
  • 7.4.1 直观地了解线程安全与不安全
  • 7.4.2 从线程内存结构中了解并发结果不一致的原因
  • 7.4.3 volatile不能解决数据不一致的问题
  • 7.4.4 通过ThreadLocal为每个线程定义本地变量 
  • 7.5 线程池
  • 7.5.1 通过ThreadPoolExecutor实现线程池
  • 7.5.2 通过Callable让线程返回结果
  • 7.5.3 通过ExecutorService创建4种类型的线程池
  • 7.6 多线程综合面试点归纳
  • 7.6.1 说出多线程的基本概念和常规用法
  • 7.6.2 说出多线程并发的知识点
  • 7.6.3 从线程内存角度分析并发情况
  • 第8章 让设计模式真正帮到你
  • 8.1 初识设计模式
  • 8.1.1 设计模式的分类
  • 8.1.2 面试时的常见问题(学习设计模式的侧重点)
  • 8.2 从单例模式入手来了解创建型设计模式
  • 8.2.1 单例模式的实现代码和应用场景
  • 8.2.2 通过工厂模式屏蔽创建细节
  • 8.2.3 简单工厂模式违背了开闭原则
  • 8.2.4 抽象工厂和一般工厂模式的区别
  • 8.2.5 分析建造者模式和工厂模式的区别
  • 8.3 了解结构型的设计模式
  • 8.3.1 简单的装饰器模式
  • 8.3.2 通过适配器模式协调不同类之间的调用关系
  • 8.4 了解行为型的设计模式
  • 8.4.1 通过迭代器了解迭代模式
  • 8.4.2 常见但大多数情况不用自己实现的责任链模式
  • 8.4.3 适用于联动场景的观察者模式
  • 8.5 设计模式背后包含的原则
  • 8.5.1 应用依赖倒转原则能减少修改所影响的范围
  • 8.5.2 能尽量让类稳定的单一职责原则
  • 8.5.3 继承时需要遵循的里氏替换原则
  • 8.5.4 接口隔离原则和*少知道原则
  • 8.5.5 通过合成复用原则优化继承的使用场景
  • 8.6 设计模式方面学习面试经验总结
  • 8.6.1 设计模式方面对于不同程序员的面试标准
  • 8.6.2 设计模式方面学习和面试的误区
  • 8.6.3 面试时如何展示设计模式的能力
  • 8.6.4 设计模式方面的面试题
  • 第9章 虚拟机内存优化技巧
  • 9.1 虚拟机体系结构和Java跨平台特性
  • 9.1.1 字节码、虚拟机、JRE和跨平台特性
  • 9.1.2 虚拟机体系结构
  • 9.1.3 归纳静态数据、基本数据类型和引用等数据的存储位置
  • 9.2 Java的垃圾收集机制
  • 9.2.1 分代管理与垃圾回收流程
  • 9.2.2 不重视内存性能可能会导致的后果
  • 9.2.3 判断对象可回收的依据
  • 9.2.4 深入了解finalize方法
  • 9.2.5 Java垃圾回收机制方面的初级面试题
  • 9.3 通过强、弱、软、虚4种引用进一步了解垃圾回收机制
  • 9.3.1 软引用和弱引用的用法
  • 9.3.2 软引用的使用场景
  • 9.3.3 通过WeakHashMap来了解弱引用的使用场景
  • 9.3.4 虚引用及其使用场景
  • 9.4 更高效地使用内存
  • 9.4.1 StoptheWorld、栈溢出错误和内存溢出错误
  • 9.4.2 内存泄漏的示例
  • 9.4.3 在代码中优化内存性能的具体做法
  • 9.4.4 调整运行参数,优化堆内存性能
  • 9.5 定位和排查内存性能问题
  • 9.5.1 什么情况下该排查内存问题
  • 9.5.2 通过JConsole监控内存使用量
  • 9.5.3 通过GC日志来观察内存使用情况
  • 9.5.4 通过打印内存使用量定位问题点
  • 9.5.5 出现OOM后如何获取和分析Dump文件
  • 9.5.6 出现内存问题该怎样排查
  • 9.6 内部类、final与垃圾回收
  • 9.7 在面试中如何展示虚拟机和内存调优技能
  • 9.7.1 从虚拟机体系结构引出内存管理的话题
  • 9.7.2 如何自然地引出内存话题
  • 9.7.3 根据堆区结构,阐述垃圾回收的流程
  • 9.7.4 进一步说明如何写出高性能的代码
  • 9.7.5 展示监控、定位和调优方面的综合能力
  • 第10章 通过简历和面试找到好工作
  • 10.1 哪些人能应聘成功
  • 10.1.1 公司凭什么留下待面试的简历
  • 10.1.2 技术面试官考查的要点及各要点的优先级
  • 10.1.3 项目经理和人事的考查要点
  • 10.1.4 入职后怎样进行背景调查
  • 10.2 怎样的简历能帮你争取到面试机会
  • 10.2.1 简历中应包含的要素,一个都别落下
  • 10.2.2 如何描述公司的工作情况
  • 10.2.3 描述项目经验的技巧
  • 10.2.4 投送简历时的注意要点
  • 10.3 面试时叙述项目经验和回答问题的技巧
  • 10.3.1 通过叙述项目技能引导后继问题
  • 10.3.2 结合项目实际回答问题
  • 10.4 面试前可以做的准备
  • 10.4.1 事先准备些亮点,回答问题时找机会抛出
  • 10.4.2 事先练习展示责任心和团队协作能力的方式
  • 10.4.3 准备提问环节的问题,以求给自己加分
  • 10.4.4 准备用英文回答问题,以求有备无患
  • 10.4.5 准备些常见刁钻问题的回答,不要临场发挥
  • 10.4.6 准备谈薪资的措辞
  • 10.5 项目经理级别面试的注意要点
  • 10.5.1 把面试官想象成直接领导
  • 10.5.2 在回答中展示良好的沟通和团队协作能力
  • 10.5.3 让面试官确信你会干得长久
  • 10.6 Offer和劳动合同中需要注意的要点
  • 10.7 *后祝大家前程似锦
精选笔记:java String校招面试题过程详解

19小时22分钟前回答

面试题一:判断下列程序运行结果

package String_test;
public class test_1 {
 public static void main(String[] args) {
  String str1 = "HelloWorld";
  String str2 = "HelloWorld";
  String str3 = new String("HelloWorld");
  String str4 = "Hello";
  String str5 = "World";
  String str6 = "Hello" + "World";
  String str7 = str4 + str5;
  System.out.println("str1 == str2 result: " + (str1 == str2)); //1. true
  System.out.println("str1 == str3 result: " + (str1 == str3)); //2. false
  System.out.println("str1 == str6 result: " + (str1 == str6)); //3. true
  System.out.println("str1 == str7 result: " + (str1 == str7)); //4. false
  System.out.println("str1 == str7.intern() result: " + (str1 == str7.intern()));  //5. true
  System.out.println("str3 == str3.intern() result: " + (str3 == str3.intern()));  //6.false
 }
}

画内存图逐个的分析每种情况:第一个:str1与str2指向同一个地址,故相等。

java String校招面试题过程详解

第二个:new代表创建了一个对象,str3指向堆内存中的引用,故str1与str3指向的地址不同。需要注意的是:字符串常量池中不可能存在两个一样的字符串值,向这里堆内存指向的实际还是运行时常量池中的HelloWorld值

java String校招面试题过程详解

第三个:由于“Hello”与“World”都是常量,用+号在编译时会被自动编译成String str6 = "HelloWorld",所以两个引用都是指向常量池中的地址

第四个:关键点在于理解String str7 = str4+str5。在jdk文档中有这么一段话

java语言提供了字符串串联运算符特殊支持( + ),和其他对象转换为字符串。字符串连接是通过StringBuilder实施(或StringBuffer)类及其append方法。字符串的转换是通过方法toString实施,由Object和继承的所有类的java。

可见jvm会在堆中创建一个以str4为基础的StringBuilder对象,在通过append方法添加,最后通过toSting()返回一个String对象。故str7指向的还是堆内存的对象而str1指向的是常量池中的地址,两者指向地址不相同。

第五个:intern方法使用:一个初始为空的字符串池,它由类String独自维护。当调用 intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(oject)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用。这里str1指向常量池中的“HelloWorld”对象,str7.intern():此时常量池中已经有"HelloWorld"字符串值,所以地址指向相同

第六个:str3指向的是堆内存,而str3.intern()返回的是常量池中已有字符串“HelloWorld”的引用,故两者指向地址不同。

面试题二:java中的String为什么设计为final类?

1. 允许String对象缓存hashCode值:在java中String类型是非常常用的,涉及到大量的增删改查。字符串不变性保证了hashCode的唯一性,这是一种优化手段意味着不必每次都去计算hash值,这也是为什么HashMap建议用String,Integer这种不可变对象当作Key值

2. 字符串常量池需要:java中将字符串值存放在字符串常量池中,如果String对象是可变的,会产生很多逻辑错误,比如改变一个对象会影响到另一个独立对象。

3. 安全性:网络地址的url,文件路径path通常情况啊下都是用String类型来保存,如果不是固定不变的可能产生很多安全隐患。

面视题三:有什么办法可以改变String?

如果问了这个就很尴尬,sun公司特意设计的不可变,要强行改变只能通过反射这种骚操作

package String_test;
import java.lang.reflect.Field;
public class test_2 {
 public static void main(String[] args) throws Exception {
  String str = "王老吉真解渴";
  System.out.println("str=: "+str);
  
  //通过反射改变获取内部的value字符数组
  Field field = String.class.getDeclaredField("value");
  field.setAccessible(true);
  field.set(str, new char[]{'加','多','宝','也','解','渴'});
  
  System.out.println("str=: "+str);
 }
}

面试题四:下列代码创建了几个对象?

String st1 = new String(“abc”);

常量池一个“abc”对象,堆中一个"abc"对象,总共两个。

String st1 = new String(“abc”);
String st2 = new String(“abc”);

3个对象。 字符串在常量池中是唯一的,堆内存中有两个,常量池中一个。

面试题五:谈一下String,StringBuilder,StringBuffer的区别?

1.String类是字符串常量,而StringBuilder与StringBuffer是字符串变量。前者不可变后者可变

2.StringBuilder是非同步的,StringBuffer类的API都套上了一层synchronized同步修饰,所以StringBuffer适合在多线程场景使用(实际基本不用),StringBuilder类适合单线程使用,它两用的多的就是append和insert方法

它三的适用场景可以看下知乎:https://www.zhihu.com/question/20101840

小结:

关于String类和它的成员方法,都是被final修饰的,意味着Strin类不可被继承。String底层是采用字符数组对数据进行操作的,关于String的一切操作jdk底层都是会new一个新的String对象,在它的基础上进行操作。所以String是不可变的。

关于String,基础性的理论大致就这些,更多的还会考察字符串的一些算法,这部分也是需要攻克的一个难点!!

参考链接:https://www.jb51.net/article/102181.htm

参考链接:https://www.jb51.net/article/124070.htm

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

展开阅读

资源下载

相关资源

  • java,android面试宝典

    大小:280 KB面试

    立即下载
  • Java面试大全(备战2021) 必问合集

    Java面试大全2021是一套最新Java面试必问合集,这本面试手册包含了Java基础、Java集合、JVM、Spring、Spring Boot、Spring Cloud、Mysql、Redis、RabbitMQ、Dubbo、Netty、分布式及架构设计等方面的技术点。内容难度参差,满足初中高级Java工程师的面试需求。本套Java面试题大全,全的不能再全,需要的朋友可下载试试! 内容 一、Java基础知识面试题 1、Java概述 2、基础语法 3、面向对象 4、IO流? 5、反射 6、网络编程 7、常

    大小:11.4 MBjava面试

    立即下载
  • Java程序员面试笔试真题库

    Java程序员面试笔试真题库

    《Java程序员面试笔试真题库》 针对当前各大IT企业面试笔试中的特性与侧重点,精心挑选了近3年来18家IT企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机A

    大小:291.9 MBJava面试

    立即下载
  • Java程序员面试笔试宝典

    Java程序员面试笔试宝典

    本书是程序员求职面试笔试必备图书,以独特的视角对面试过程中求职者存在的各类问题进行了深度剖析,是一本适合计算机相关专业毕业生阅读的求职指导用书

    大小:73.4 MBJava面试

    立即下载

学习笔记

1小时47分钟前回答

阿里、华为、腾讯Java技术面试题精选

阿里、华为、腾讯Java技术面试题精选,具体内容如下 JVM的类加载机制是什么?有哪些实现方式? 类加载机制: 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法去内,然后在堆区创建一个java.lang.Class对象,用来封装在方法区内的数据结构。类的加载最终是在堆区内的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。 类加载有三种方式: 1)命令行启动应用时候由JVM初始化加载 2)通过Class.forName()方法动态加载 3)通过ClassLoader.loadClass()方法动态加载 JVM的常见垃圾回收算法? 1)标记-清楚算法:……

20小时26分钟前回答

面试题:用 Java 逆序打印链表

昨天的 Java 实现单例模式 中,我们的双重检验锁机制因为指令重排序问题而引入了 volatile 关键字,不少朋友问我,到底为啥要加 volatile 这个关键字呀,而它,到底又有什么神奇的作用呢? 对 volatile 这个关键字,在昨天的讲解中我们简单说了一下:被 volatile 修饰的共享变量,都会具有下面两个属性: 保证不同线程对该变量操作的内存可见性。 禁止指令重排序。 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。 可见性:一个线程对共享变量值的修改,能够及时地被其它线程看到。 对于重排序,不熟悉的建议直接 Google 一下,这里也就不多提了……

15小时17分钟前回答

值得收藏的2017年Java开发岗位面试题

下面是我自己收集整理的2017年Java岗位的面试题,可以用它来好好准备面试。 一、Java基础 1. String类为什么是final的。 2. HashMap的源码,实现原理,底层结构。 3. 说说你知道的几个Java集合类:list、set、queue、map实现类咯。。。 4. 描述一下ArrayList和LinkedList各自实现和区别 5. Java中的队列都有哪些,有什么区别。 6. 反射中,Class.forName和classloader的区别 7. Java7、Java8的新特性(baidu问的,好BT) 8. Java数组和链表两种结构的操作效率,在哪些情况下(从开头开始,从结尾开始,从中间开始),哪些操作(插入,查找,删除)的效率高 9. Java内存泄露的问题调查定位:jmap,jstack的使用等等 10. string、stringbuilder、stringbuffer区……