- 博客(59)
- 资源 (1)
- 收藏
- 关注
转载 链表顺序表常见面试题(4)——Java语言实现
判断两个链表是否相交,若相交,求交点。(假设链表不带环)step1:在不带环的情况下对链表是否相交进行判断,即遍历两个链表,链表的最后一个节点的值相等则表明链表相交。step2:求交点,我们可以先对两链表的长度进行比较,使得长的链表先走长度差步,然后两个链表一起走,当两个链表遇到第一个所对应节点的值相等时,则就是交点。1234/** *@Description: 判断两个链表是否相交...
2020-03-29 21:20:55 190
转载 链表顺序表常见面试题(3)——Java语言实现
查找单链表的中间节点,要求只能遍历一次链表在只能遍历一遍链表的基础上我们需要查找到中间节点,则需设置一个快慢节点fast&slow,当我们每次只让慢节点走一步快节点走两步,则当快节点为空时,则慢节点即为要查找的中间节点。123package com.struct.interview_question.list_interview_question.findmiddlenode;...
2020-03-29 21:19:48 204
转载 链表顺序表常见面试题(2)——Java语言实现
逆置/反转单链表同从尾到头打印单链表一样,我们可以分别采用递归和栈来进行操作。1单链表排序(冒泡排序&快速排序)冒泡排序:对相邻的两个节点的值进行比较,若是逆序则交换其值。1package com.struct.interview_question.list_interview_question.listsort;public class BubbleSort { ...
2020-03-29 21:12:51 220
转载 链表顺序表常见面试题(1)——Java语言实现
从尾到头打印单链表(知道链表的头结点)针对从尾到头打印链表,我们可以采用两种方式:(1)利用栈的特性(先进后出),遍历链表将元素入栈,当链表为空时,依次出栈。(2)采用递归方法,但是当数据量足够大时可导致栈溢出。123package com.struct.interview_question.list_interview_question;//定义链表的节点public class...
2020-03-29 21:09:19 203
原创 List以及arrayList,linkedlist,vector,以及stack的区别
首先List是接口,而后面四个是它的实现类。List在Collection的基础上引入了有序的概念,位置精确;允许相同元素。在列表上迭代通常优于索引遍历。特殊的ListIterator迭代器允许元素插入、替换,双向访问,从列表中的制定位置开始(根据index获取index位置的元素)。未实现get方法。AbstractList实现了List中的一些方法,支持随机访问。lastIndex...
2020-03-26 23:06:27 481
原创 SynchronizedList和Vector的区别
Vector是java.util包中的一个类。 SynchronizedList是java.util.Collections中的一个静态内部类。在多线程的场景中可以直接使用Vector类,也可以使用Collections.synchronizedList(Listlist)方法来返回一个线程安全的List。那么,到底SynchronizedList和Vector有没有区别,为什么java...
2020-03-26 13:03:45 947
原创 Collections.synchronizedList使用方法
ArrayList众所周知ArrayList是非线程安全的,在多线程的情况下,向list插入数据的时候,可能会造成数据丢失的情况.并且一个线程在遍历List,另一个线程修改List,会报ConcurrentModificationException(并发修改异常)错误.VectorVector是一个线程安全的List,但是它的线程安全实现方式是对所有操作都加上了synchronized...
2020-03-26 13:03:10 1026
转载 ArrayList源码剖析
ArrayList简介ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的Copy...
2020-03-25 23:58:41 371
转载 Java - 虚拟机学习笔记2 类加载机制
之前写了篇关于Java虚拟机内存管理方面的学习总结,点击查看,主要总结了Java虚拟机运行时不同数据区域的作用(堆、方法区、栈等等),以及内存分配和内存回收的原理,本篇文章主要介绍Java虚拟机类加载机制,搞懂虚拟机是怎么加载编译后的类文件的。一、Class类文件二、类加载机制三、类加载器四、类的初始化五、总结一、Class类文件Sun公司于1995年5月正式推出...
2020-03-24 17:57:46 128
转载 什么是自动垃圾回收
自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存由回收器负责。本文接下来将介绍垃圾回收机制的基...
2020-03-24 14:05:17 1128
转载 Spring、Spring MVC、MyBatis整合文件配置详解
使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了。先总结一下SSM整合的文件配置。其实具体的用法最好还是看官方文档。Spring:http://spring.io/docsMyBatis:http://mybatis.github.io/mybatis-3/基本的组织结构和用法就不说了,前面的博客和官方文档上都非常的全面。jar包可以使用Maven来组织管理。来看配置文件。...
2020-03-23 20:02:39 144
转载 深入理解Java虚拟机读书笔记2----垃圾收集器与内存分配策略
二 垃圾收集器与内存分配策略1 JVM中哪些内存需要回收? JVM垃圾回收主要关注的是Java堆和方法区这两个区域;而程序计数器、虚拟机栈、本地方法栈这3个区域随线程而生,随线程而灭,随着方法结束或者线程结束内存自然跟随着回收了,因此不需要过多考虑内存分配和回收的问题。2 判断对象是否存活的算法 (1)引用计数算法 基本思路:给对象添加一...
2020-03-23 15:47:22 146
转载 ThreadLocal源码解读
1. 背景ThreadLocal源码解读,网上面早已经泛滥了,大多比较浅,甚至有的连基本原理都说的很有问题,包括百度搜索出来的第一篇高访问量博文,说ThreadLocal内部有个map,键为线程对象,太误导人了。ThreadLocal非常适合对Java多线程编程感兴趣的程序员作为入门类阅读,原因两方面:加上注释源码也不过七八百行。 结构清晰,代码简洁。本文重点导读ThreadLoc...
2020-03-23 14:57:10 213
转载 多线程同步锁synchronized(对象锁与全局锁)总结
<div id="article_content" class="article_content clearfix"> <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-833878f763.css"> ...
2020-03-20 18:32:06 166
转载 Lock锁的使用
在Java多线程中,可以使用synchronized关键字实现线程之间的同步互斥,在jdk1.5后新增的ReentrantLock类同样可达到此效果,且在使用上比sy...
2020-03-20 12:38:03 330
原创 Lock和synchronized的区别和使用
Java并发编程:Lock今天看了并发实践这本书的ReentantLock这章,感觉对ReentantLock还是不够熟悉,有许多疑问,所有在网上找了很多文章看了一下,总体说的不够详细,重点和焦点问题没有谈到,但这篇文章相当不错,说的很全面,主要的重点都说到了,所有在这里转载了这篇文章。 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探...
2020-03-19 15:40:09 113
转载 Java多线程编程—锁优化
正文并发环境下进行编程时,需要使用锁机制来同步多线程间的操作,保证共享资源的互斥访问。加锁会带来性能上的损坏,似乎是众所周知的事情。然而,加锁本身不会带来多少的性能消耗,性能主要是在线程的获取锁的过程。如果只有一个线程竞争锁,此时并不存在多线程竞争的情况,那么JVM会进行优化,那么这时加锁带来的性能消耗基本可以忽略。因此,规范加锁的操作,优化锁的使用方法,避免不必要的线程竞争,不仅可以提高程序...
2020-03-18 23:53:08 84
转载 为什么阿里巴巴要禁用Executors创建线程池?
看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过源码分析禁用的原因写在前面首先感谢大家在盖楼的间隙阅读本篇文章,通过阅读本篇文章你将了解到:线程池的定义 Executors创建线程池的几种方式 ThreadPoolExecutor对象 线程池执行任务逻辑和线程池参数的关系 Executo...
2020-03-17 23:55:29 94
原创 Java细粒度锁实现的3种方式
最近在工作上碰见了一些高并发的场景需要加锁来保证业务逻辑的正确性,并且要求加锁后性能不能受到太大的影响。初步的想法是通过数据的时间戳,id等关键字来加锁,从而保证不同类型数据处理的并发性。而java自身api提供的锁粒度太大,很难同时满足这些需求,于是自己动手写了几个简单的扩展…1. 分段锁借鉴concurrentHashMap的分段思想,先生成一定数量的锁,具体使用的时候再根据key...
2020-03-16 22:55:52 264
原创 OutOfMemoryError(内存溢出)
产生的原因:1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据。2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。,3,3.代码中存在死循环或循环产生过多重复的对象实体。4.使用的第三方软件中的BUG。5.启动参数内存值设定的过小。重点排查以下几点:1.检查代码中是否有死循环或递归调用。2.检查是否有大循环重复产生新对象实体。3...
2020-03-15 21:30:51 3489
原创 Java内部类的经典总结
一、 含义在Java编程语言里,程序是由类(class)构建而成的。在一个类的内部也可以声明类,我们把这样的类叫做内部类。二、 作用实现了更好的封装,我们知道,普通类(非内部类)的访问修饰符不能为private或protected,而内部类可以。当我们将内部类声明为private时,只有外部类可以访问内部类,很好地隐藏了内部类。内部类可以继承(extends)或实现(impl...
2020-03-15 00:44:05 108
转载 Java8特性详解 lambda表达式 Stream
1.lambda表达式Java8最值得学习的特性就是Lambda表达式和Stream API,如果有python或者javascript的语言基础,对理解Lambda表达式有很大帮助,因为Java正在将自己变的更高(Sha)级(Gua),更人性化。--------可以这么说lambda表达式其实就是实现SAM接口的语法糖。lambda写的好可以极大的减少代码冗余,同时可读性也好过冗长的内部...
2020-03-15 00:11:10 425
转载 理解、学习与使用 JAVA 中的 OPTIONAL
从 Java 8 引入的一个很有趣的特性是Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但...
2020-03-13 21:13:20 97
原创 深入理解Java接口和抽象类
对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。一.抽象类在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为...
2020-03-12 23:33:14 105
原创 手把手实例对比String、StringBuilder字符串的连接效率及StringBuilder和StringBuffer线程安全的比较
一、字符串连接的效率问题使用String连接字符串时为什么慢?小知识点java中对数组进行初始化后,该数组所占的内存空间、数组长度都是不可变的。创建一个字符串,为字符串对象分配内存空间,会耗费掉一定的时间(CPU)与空间(内存)代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能。过多无用的中间对象每次连接字符串时都会创建一个新的String对象,随着...
2020-03-12 15:06:12 182
原创 Java 异常处理的误区和经验总结
本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳。只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验,提高产品的价值。误区一、异常的选择图 1. 异常分类图 1 描述了异常的结构,其实我们都知道异常分检测异常和非检测异常,但是在实际中又混淆了这两种异常的应用。由于非检测异常使用方便,很...
2020-03-11 16:53:02 794
原创 跳槽之后面试20余家公司的总结
最近换了个公司,从三月底开始面,面到四月底,面了有快二十家公司。我是一个喜欢总结经验的人,每经过一场面试,我在回来的路上都会仔细回想今天哪些问题可以答的更好,或者哪些问题是自己之前没遇到过的,或者是哪个知识点今天又问了等等。四月中旬的时候,我就在构思要写一篇面经,主要是想着可能对那些跟我相同处境的人有点帮助,再者就是稍微记录下这为期一个月的面试过程。个人介绍:首先介绍下我面试时的自身...
2020-03-11 14:06:20 287
原创 SVN使用
SVN文件冲突:同一个文件,两个人修改,A修改完后提交,B修改完后则提交失败提交失败,必须更新-----------------------------------------------------------------------------------------------------------------------------------------------...
2020-03-11 13:00:57 326 1
原创 SVN创建分支/合并分支/切换分支
在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发trunk是主分支,是日常开发进行的地方。branches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。tags目录一般是只读的,...
2020-03-10 17:39:49 319
原创 log4j2----JAVA日志打印
注意:本篇文章是以log4j2.x 为例的,并不是log4j 1.xlog4j 就是log for java , log4j已经被移植到了C,C++,C#,Perl,Python和Ruby等语言中一.首先下载去官网下载log4j的jar 包http://logging.apache.org/log4j/2.x/download.html一般来说:Source是源代...
2020-03-09 23:44:33 343
转载 @SCHEDULED(CRON = "0 0 * * * ?")实现定时任务
//每一个小时执行一次@Scheduled(cron = "0 0 * * * ?")public void saveDailyScoreScheduled() {try {logger.info("loadDeviceEvents start>>>>" + new Date());loadDeviceEvents(ZonedDateTime.now().toE...
2020-03-09 17:54:51 11626
转载 单点登录原理与简单实现
(2017-09-22更新)GitHub:https://github.com/sheefee/simple-sso一、单系统登录机制1、http无状态协议 web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这...
2020-03-09 17:41:04 125
转载 必备idea 插件plugins 提高编码效率
最近发现了几个非常好用 提高编码效率 的idea 插件 跟大家分享一下,,,不用谢我!!!!!!!!!!!!!因为idea自带的插件下载可能连接不上服务器而导致插件下载失败,所以这里推荐使用引入外部插件的方式插件包也给你们准备好了(你们无需去下载啦),对照此篇博客配置即可: 链接:https://pan.baidu.com/s/1VKXJ74W3s6RZHL-3YHl...
2020-03-09 17:39:25 326
转载 关于烂代码的那些事
1. 摘要 最近写了不少代码,review了不少代码,也做了不少重构,总之是对着烂代码工作了几周。为了抒发一下这几周里好几次到达崩溃边缘的情绪,我决定写一篇文章谈一谈烂代码的那些事。这里是上篇,谈一谈烂代码产生的原因和现象。 2. 写烂代码很容易 刚入程序员这行的时候经常听到一个观点:你要把精力放在ABCD(需求文档/功能设计/架构设计/理解原理)上,写代码只是把想法翻译成编程语...
2020-03-09 17:36:28 166
原创 Spring配置 数据源datasource和连接池 的7种方式
1、spring-jdbc-DriverManagerDataSource使用org.springframework.jdbc.datasource.DriverManagerDataSource说明:需要jar包:spring-jdbc.jar。DriverManagerDataSource只是新建连接,根本没有连接池的作用,不推荐使用 <bean id="dat...
2020-03-09 17:33:46 2600
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人