
Java基础知识
文章平均质量分 71
Happywuw
学习如逆水行舟,不近则退!
由于目前公司有很不错的学习平台,以及个人笔记平台,暂停博客更新。但也会定期把笔记批量更新到博客。
展开
-
提纲目录
面试准备提纲目录1.JVM JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接 的交互。(图)2. JAVA 集合 集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。 Co...原创 2019-12-09 08:30:00 · 514 阅读 · 0 评论 -
《Java并发编程实战》学习笔记 任务执行和取消关闭
查看豆瓣读书第六章 任务执行大多数并发应用程序是围绕执行任务进行管理的。设计任务时,要为任务设计一个清晰的任务边界,并配合一个明确的任务执行策略。任务最好是独立的,因为这会提高并发度。大多数服务器应用程序都选择了下面这个自然的任务边界:单个客户请求。任务时逻辑上的工作单元,线程是使任务异步执行的机制。应用程序内部的任务调度,存在多种可能的调度策略:其中,最简单的策略是在转载 2017-10-12 23:03:18 · 479 阅读 · 0 评论 -
《Java并发编程实战》学习笔记 线程安全、共享对象和组合对象
Java Concurrency in Practice,一本完美的Java并发参考手册。查看豆瓣读书推荐:InfoQ迷你书《Java并发编程的艺术》第一章 介绍线程的优势:充分利用多处理器简化模型简化异步事件的处理提供用户界面的响应(时间)线程的风险:安全的风险(不好的事情会发生),提高错误出现的几率活性的风险(好的事情不会发生),如某转载 2017-10-12 23:00:16 · 330 阅读 · 0 评论 -
设计模式学习起点 UML类图笔记
UML定义类之间的关系主要有六种:泛化关系、实现关系、依赖关系、关联关系、聚合关系和组合关系。下面分别学习这几种关系。泛化关系(Generalization)使用带空心三角形的实线表示。汽车与SUV之间为泛化关系:泛化关系相当于面向对象中的继承关系。最终代码中,泛化关系表现为继承非抽象类。 实现关系(Emlpementation)使用转载 2017-10-12 22:58:47 · 398 阅读 · 0 评论 -
Java 内部类笔记
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。 类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。乍转载 2017-10-12 22:55:43 · 288 阅读 · 0 评论 -
Java多线程编程的常见陷阱
1、在构造函数中启动线程我在很多代码中都看到这样的问题,在构造函数中启动一个线程,类似这样:public class A{ public A(){ this.x=1; this.y=2; this.thread=new MyThread(); this.thread.start(); } }转载 2017-10-12 22:50:02 · 309 阅读 · 0 评论 -
web中缓存的几种方式
看了构建高性能的web站点一书,对其中的集中web缓存进行一个总结1 应用程序实现的动态页面缓存应用程序把动态文件生成的html文件缓存到文件服务器,以后用户请求动态文件,直接从文件服务器加载对应的静态缓存的html文件返回给用户,这里面主要节省了动态语言的执行时间和数据库访问时间。但是会增加了缓存框架的加载和缓存查找的时间。 2 把解释执行的开发语言编译成为目标代转载 2017-09-11 13:57:27 · 440 阅读 · 0 评论 -
Java foreach循环, Iterator 迭代和remove方法之间的冲突
转载自:http://blog.youkuaiyun.com/viekie/article/details/7382678代码如下:[java] view plain copyfor (Iterator iter = list.iterator(); iter.hasNext(); ) { if (Int转载 2017-08-11 09:57:25 · 498 阅读 · 0 评论 -
【Java并发编程】并发编程大合集
转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/17539599 为了方便各位网友学习以及方便自己复习之用,将Java并发编程系列内容系列内容按照由浅入深的学习顺序总结如下,点击相应的标题即可跳转到对应的文章 【Java并发编程】实现多线程的两种方法 【Java并发编程】线程的中断 【Java并发转载 2017-07-26 11:27:38 · 455 阅读 · 1 评论 -
彻底理解ThreadLocal
转载自:http://blog.youkuaiyun.com/lufeng20/article/details/24314381ThreadLocal是什么 早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 当使用ThreadLoca转载 2017-07-26 11:25:29 · 391 阅读 · 0 评论 -
Java NIO 系列教程
Java NIO 系列教程Java NIO提供了与标准IO不同的IO工作方式: Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Asynchronous IO(异步IO):Java N转载 2017-08-10 14:24:23 · 340 阅读 · 0 评论 -
【Java并发编程】并发编程大合集
转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/17539599 为了方便各位网友学习以及方便自己复习之用,将Java并发编程系列内容系列内容按照由浅入深的学习顺序总结如下,点击相应的标题即可跳转到对应的文章 【Java并发编程】实现多线程的两种方法 【Java并发编程】线程的中断 【Java并发转载 2017-07-12 14:32:44 · 364 阅读 · 0 评论 -
线程同步,对象级别的锁和类级别的锁
同步指的是多线程情况,一个线程块在一定时间内只能在一个线程内执行。Java支持多线程执行,这就可能会导致两个或者多个线程访问同一个区域或者代码。同步是一个让所有并发的线程同步执行的过程。同步避免由共享内存不一致导致的内存错误,当一个方法被声明为同步的时候,线程保存着那个方法对象的监控,如果另一个线程正在执行这个同步方法,那么你的线程将会堵塞直到那个线程释放这个监控。在java中同步由synch转载 2017-07-12 14:31:45 · 540 阅读 · 0 评论 -
JDK部分源码阅读与理解
原文地址:http://www.coselding.cn/article/2016/05/31/JDK部分源码阅读与理解/不喜欢重复造轮子,不喜欢贴各种东西、JDK代码什么的,让整篇文章很乱。。。JDK源码谁都有,没什么好贴的。。。如果你没看过JDK源码,建议打开Eclipse边看源码边看这篇文章,看过的可以把这篇文章当成是知识点备忘录。。。 JDK容器类中有大转载 2017-06-20 18:26:21 · 418 阅读 · 0 评论 -
JAVA集合类汇总
转载自:http://www.cnblogs.com/leeplogs/p/5891861.html一、集合与数组数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。二、层次关系如图所示:图中,实线边框的是实现类,折线边框的是抽象类转载 2017-04-20 16:08:54 · 397 阅读 · 0 评论 -
《Java程序性能优化》学习笔记 程序优化
这一部分主要介绍代码层的优化。了解如何编写高效而精炼的代码,正确的使用函数方法。1.字符串优化处理Java语言中,String对象可以认为是对char数组的眼神和进一步封装。它主要由3部分组成:char数组、偏移量和String的长度。String对象的三个基本特点:不变性,针对常量池的优化,类的final定义。不变性:是指String对象一旦生成,不能再对它进行改变,即i转载 2017-10-12 23:16:05 · 283 阅读 · 0 评论 -
《Java程序性能优化》学习笔记 JVM和并发优化
第四章 并行程序优化1.非阻塞同步避免了基于锁的同步的缺陷,无锁算法没有锁竞争带来的系统开销,也没有线程间频繁调度带来的开销。CAS算法:包含3个参数CAS(v,e,n)。V表示要更新的变量,E表示预期值,N表示新值2.JDK的java.util.concurrent.atomic包下,有一组使用无锁算法实现的原子操作类,如AtomicInteger/AtomicIntegerAr转载 2017-10-13 11:00:06 · 311 阅读 · 0 评论 -
获取当前的spring容器ApplicationContext
方法一:(获取当前的spring容器,任何java类中适用) ServletContext application = ServletActionContext.getServletContext(); ApplicationContext act = ContextLoader.getCurrentWebApplicationContext();...原创 2019-02-13 15:56:18 · 741 阅读 · 0 评论 -
Jetty源码阅读 - ServerConnector
Java NIO模型的关键类是ServerSocketChannel SocketChannel Selector这两个,其中ServerSocketChannel用于创建服务端端口的监听,且提供了#accept方法用于返回SocketChannel。SocketChannel负责完成与client端的通信以及在Selector中注册关心事件。非阻塞IO的关键是Selector利用操作系统底层提供...转载 2019-02-13 10:37:49 · 369 阅读 · 0 评论 -
线程池:QueuedThreadPool
线程池这个应该是比较重要的一个组件了吧。。。。首先在SelectChannelConnector中,需要建立SelectSet,从而建立selector,而select的执以及I/O的都需要放到线程池中运行,而且需要独占的线程。。而当selector中获取远程连接的数据之后,就需要进行http的处理流程。。。这里又需要将他们派发到线程池中运行。。。从而线程池实现的高效也是jetty是否能够...转载 2019-02-12 20:07:00 · 1282 阅读 · 0 评论 -
Java8 lambda表达式10个示例
1. 实现Runnable线程案例使用() -> {} 替代匿名类://Before Java 8:new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8 "); }}).start();//Java 8 way:n...转载 2018-06-19 19:51:44 · 520 阅读 · 0 评论 -
多线程&JVM&锁相关—乐观的并发策略——基于CAS的自旋
悲观者与乐观者的做事方式完全不一样,悲观者的人生观是一件事情我必须要百分之百完全控制才会去做,否则就认为这件事情一定会出问题;而乐观者的人生观则相反,凡事不管最终结果如何,他都会先尝试去做,大不了最后不成功。这就是悲观锁与乐观锁的区别,悲观锁会把整个对象加锁占为自有后才去做操作,乐观锁不获取锁直接做操作,然后通过一定检测手段决定是否更新数据。这一节将对乐观锁进行深入探讨。上节讨论的Synchron...转载 2018-05-04 16:08:00 · 287 阅读 · 0 评论 -
写接口时需要用到的几个注解
public String index(@RequestParam(value = "action", required = false) String action, @RequestParam(value = "notIncludeTypeId", required = false) int notIncludeTypeId){ @PathParam @Query...原创 2018-04-16 18:19:27 · 2111 阅读 · 0 评论 -
java线程-面试
创建线程的方式及实现继承Thread类创建线程类(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。(2)创建Thread子类的实例,即创建了线程对象。(3)调用线程对象的start()方法来启动该线程。通过Runnable接口创建线程类(1)定义runnable接口的实现类,并重写该接口的run()方法,该run(...原创 2018-03-22 10:29:44 · 358 阅读 · 0 评论 -
Java单例模式——并非看起来那么简单
Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。 单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。如果一个对象有可能贯穿整个应用程序,而且起到了全局统一管理控制转载 2018-01-24 14:28:19 · 400 阅读 · 0 评论 -
八大排序算法Java
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,原创 2016-07-06 17:57:40 · 70747 阅读 · 3 评论 -
缓存穿透和缓存失效的预防和解决
缓存穿透:缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,如果有人恶意破坏,很可能直接对DB造成影响,这就失去了缓存的意义。解决办法:对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。还有最常见的则是采用布隆过滤器,将所转载 2017-10-13 11:10:57 · 313 阅读 · 0 评论 -
Java开发中程序和代码性能优化
现在计算机的处理性能越来越好,加上JDK升级对一些代码的优化,在代码层针对一些细节进行调整可能看不到性能的明显提升,但是在开发中注意这些,更多的是保持一种性能优先的意识,养成良好的编码习惯。 一 条件控制语句中的优化1.在循环中应该避免使用复杂的表达式。在循环中,循环条件会被反复计算,应该避免把一些计算放在循环进行的部分中,程序将会运行的更快。比如:转载 2017-10-13 11:07:35 · 340 阅读 · 0 评论 -
Spring MVC笔记 使用JdbcTemplate
Spring提供了 JdbcTemplate 来封装数据库jdbc操作细节, 包括: 数据库连接[打开/关闭] ,异常转义 ,SQL执行 ,查询结果的转换,其中体现了 模板模式 的设计模式思想。使用了Spring JdbcTemplate 之后,开发人员只需要完成其中两项编码工作。指定数据库连接参数打开数据库连接声明SQL语句预编译并执行转载 2017-10-13 11:03:30 · 364 阅读 · 0 评论 -
《Effective Java》笔记 使类和成员的可访问性最小化
类和接口第13条 使类和成员的可访问性最小化1.设计良好的模块会隐藏所有的实现细节,把它的API与实现清晰的隔离开来,模块之间只通过它们的API进行通信,一个模块不需要知道其他模块的内部工作情况:即信息隐藏或封装,是软件设计的基本原则之一。2.Java提供了许多机制来协助信息隐藏。访问控制(access control)机制决定了类、接口和成员的可访问性(accessi转载 2017-10-13 11:01:59 · 297 阅读 · 0 评论 -
JVM中Java对象的创建
转载自:http://blog.youkuaiyun.com/u010297957/article/details/51173474这里不仅仅是说“对象的创建”,而是站在JVM的角度来看对象的创建过程、内存分配和访问定位,使用对象的创建是为了帮助大家索引进来1. JVM中对象的创建过程在语言层面上创建对象通常仅仅是一个new关键字,而在虚拟机中,对象(普通对象,不包括数转载 2017-02-24 15:35:07 · 375 阅读 · 0 评论 -
图解JAVA对象的创建过程
转载自:http://www.cnblogs.com/chenyangyao/p/5296807.html前面几篇博文分别介绍了JAVA的Class文件格式、JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能真正看明白)。经常有人问我为什么这么喜欢钻研底层的东西,首先,因为我以前的做硬件的转载 2017-02-24 10:37:36 · 427 阅读 · 0 评论 -
java基础---封 装、继 承、抽象、接口
封 装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处:将变化隔离;便于使用;提高重用性;安全性。封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。 this:代表对象。就是所在函数所属对象的引用。this到底代表什么呢?哪个对象调用了this所在的函数,this就代表哪个对象,就是哪个对象的引用。开发时,什么时转载 2016-06-02 20:28:15 · 807 阅读 · 0 评论 -
Java基础知识
打算跳槽,出去一面试发现自己好多的东西都不会,回来就下定决心好好学习了。这是网上找到的一个不错的java基础知识的总结,并非我原创,在此记录一下。在人家总结的基础上,我会结合面试中被问到的问题进行查漏补缺,希望这成为一份完美的java基础知识的笔记!写代码:1,明确需求。我要做什么?2,分析思路。我要怎么做?1,2,3。3,确定步骤。每一个思路部分用到哪些语句,方法,和转载 2016-06-02 20:16:36 · 400 阅读 · 0 评论 -
java基础知识---java语法基础
二:java语法基础: 1,关键字:其实就是某种语言赋予了特殊含义的单词。 保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。2,标示符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。包含 0-9、a-z、$、_ ; 注意: 1),数字不可以开头。 2),不可以使用关键字。3,常量:是在程序中的不会变化的数据。4,转载 2016-06-02 20:25:13 · 558 阅读 · 0 评论 -
java基础-----面向对象
三:面向对象:★★★★★特点:1:将复杂的事情简单化。2:面向对象将以前的过程中的执行者,变成了指挥者。3:面向对象这种思想是符合现在人们思考习惯的一种思想。 过程和对象在我们的程序中是如何体现的呢?过程其实就是函数;对象是将函数等一些内容进行了封装。 匿名对象使用场景:1:当对方法只进行一次调用的时候,可以使用匿名对象。2:当对象对成员进行多次调用时,不能使用转载 2016-06-02 20:26:22 · 528 阅读 · 0 评论 -
java基础---多 态、异常
多 态★★★★★(面向对象特征之一):函数本身就具备多态性,某一种事物有不同的具体的体现。 体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a = newCat();多态的好处:提高了程序的扩展性。多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有的方法。(前期不能使用后期产生的功能,即访问的局限性)多转载 2016-06-02 20:30:43 · 561 阅读 · 0 评论 -
java基础知识---多线程、同步
多线程:★★★★进程:正在进行中的程序。其实进程就是一个应用程序运行时的内存分配空间。线程:其实就是进程中一个程序执行控制单元,一条执行路径。进程负责的是应用程序的空间的标示。线程负责的是应用程序的执行顺序。 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区、自己的变量。jvm在启动的时转载 2016-06-02 20:31:48 · 762 阅读 · 0 评论 -
java基础知识----API
API:(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。 ---- String字符串:★★★☆java中用String类进行描述。对字符串进行了对象的封装。这样的好处是可以对字符串这种常见数据进行方便的操作。对象转载 2016-06-02 20:33:00 · 697 阅读 · 0 评论 -
java基础知识---集合框架
集合框架:★★★★★,用于存储数据的容器。特点:1:对象封装数据,对象多了也需要存储。集合用于存储对象。2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合。因为集合是可变长度的。 集合和数组的区别:1:数组是固定长度的;集合可变长度的。2:数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。3:数组存储的元素必须是同一个数据类型;集转载 2016-06-02 20:35:01 · 654 阅读 · 0 评论