- 博客(113)
- 收藏
- 关注
原创 ThreadPoolExecutor 线程回收时机详解
这里其实最主要的作用是工作线程的回收。虽然可以通过维护workers来完成对工作线程生命周期的管理,新建线程比较好理解,但是删除线程的时候,工作线程本身就是一种竞争资源了。八股文一般说:keepAliveTime是线程存活时间,如果当前线程池线程数量大于核心池的时候,如果一个线程超过keepAliveTime没有获取到任务,则会触发线程回收。可以看到,workers是HashSet,那么问题来了,线程池有大量的工作线程,频繁创建/清除线程的时候,用线程不安全的HashSet必然是有并发安全问题的。
2024-06-30 22:37:17 1132
原创 Spring MVC+mybatis项目入门:旅游网(五)登录与注销
利用session实现登录逻辑 登录逻辑还是比较简单的,后端调用数据库进行数据匹配,正确则登录,否则返回错误信息:这里可以详细一点,例如声明是账号不存在还是密码错误。这里并没有实现数据加密,而实际上应该是加密的比较好。如果加密的话,可能会将账号与密码合并在一起,所以这样就无法判定就是是账号不存在还是密码错误。 而登录成功以后实际上就可以利用session,将数据...
2024-05-26 14:01:27 924
原创 Spring MVC+mybatis项目入门:旅游网(四)用户注册——mybatis的配置与使用以及Spring MVC重定向
mybatisMyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参...
2024-05-26 13:52:15 697
原创 Spring MVC+mybatis 项目入门:旅游网(三)用户注册——控制反转以及Hibernate Validator数据验证
注册原理 其实很简单,前端页面显示一个表单,然后由dispatcher传递到controller,controller调用数据库验证,如果ok,那就写入数据库,同时返回注册成功的视图,否则可以返回注册页,或者是到一个错误页。依赖注入与控制反转 这里提一下,在最早接触servlet的时候,应该有老师会说,Java的POJO应该只有属性与构造方法,除此之外对于每...
2024-05-26 11:34:21 1109
原创 Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC
MVC模式 既然在使用Spring MVC,那么当然要了解什么是MVC模式。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 ...
2024-05-26 11:17:58 1153
原创 Spring MVC+mybatis 项目入门:旅游网(一)项目创建与准备
项目的创建与IDE 博主的是idea,好长时间没用eclipse了,不管怎样,如果想写Java Web,eclipse必须用企业版。这个就需要自己找破解之类的了,idea的话,如果是在校大学生,可以直接申请教育版,几天就能使用jetbrains全家桶了。GitHub学生开发包也包含。应该没有猛士不用IDE吧?不同的IDE影响不是特别大,但是博主没有用过eclipse企业版,所以用...
2024-05-26 10:31:58 507
原创 Spring MVC+mybatis 项目入门:旅游网(零)前言以及代码下载
前言 博主还是希望这一系列文章能够帮到一些入门Spring MVC的同学,这个所谓的“旅游网”是博主目前上的课的一个作业,正好也学了一点Spring MVC,就想着能不能用框架写了。博主实际上也是入门,对于Spring的理解很多也是仅限于使用,更不用说源码了。项目的话其实因为也没有人带(马上就要有了爽到啊!),所以对于规范还是很虚的,所以这一系列博文我个人感觉适用群体:正在学Sp...
2024-05-26 10:29:47 784
原创 STL学习(4.5) heap的简单应用
什么是heap即堆。一般来说大家第一次碰到这个东西都是在数据结构这门课上的。heap在STL中,底层由完全二叉树实现。heap在STL中并不是作为容器(数据结构)提供,而是作为操作的集合(算法)提供给我们。这个确实是最早没有想到了。博主当初搜STL中堆的时候,发现heap被整合在algorithm库中作为算法被使用的时候真的是一脸懵逼的(当初脑补是给个容器,自己加个泛型,push入堆top返回堆顶...
2024-05-26 01:54:03 234
原创 ACM搜索入门问题模型的构建与分析
写在前面最近一段时间也集中刷了一些搜索的入门题,感觉应该对搜索问题进行一次总结。所以此篇博文是我针对写的题的简单分析,错误无法避免,如果发现欢迎留言改正。另外,由于是分析类的博文,所以代码会很少,算法的代码和题解这里不会出现哒^_^。如果对BFS和DFS的代码都不会,还是推荐学习一下图论以及具体代码,下面写的都是思想了(口胡技能EX)搜索基本算法:BFS与DFS关于BFS与DFS,即广度优先搜索与...
2024-05-19 23:27:25 961
原创 Java 8新特性-stream流
Stream流Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如筛选,排序,聚合等。Stream有以下特性及优点:无存储。Stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。为...
2019-11-07 20:17:44 450
原创 Dubbo入门指北-Spring Boot+Dubbo入门级Demo
Zookeeper至少要装个单机环境,Dubbo需要Zookeeper环境。具体的配置这里不解释了。最后在Zookeeper目录下的bin目录下对zkServer.sh使用start即可开启Zookeeper。记得开放端口,Zookeeper端口需要自己配,默认配2181。Java前提条件了,不多解释装就好了。关于Tomcat,本身Tomcat就是一个Web容器,如果你想跑出来项目,那么还...
2019-11-01 16:59:06 378
原创 Redis实现分布式锁-原理与写法
多线程好玩嘿,以前都不怎么写。。关于实现其实并没有太多看过Redisson,但是推荐还是用这个框架,简单粗暴。并且多线程写的是真的少。。。代码目前我觉得没啥大问题,但是怕有对多线程不熟导致的一些坑,求大佬发现问题一定告诉一下哈。。分布式下的情况分布式与单机情况下最大的不同在于其不是多线程而是多进程。多线程由于可以共享堆内存,因此可以简单的采取内存作为标记存储位置。而进程之间甚至可能都不在...
2019-08-06 10:15:53 658
原创 记 Dubbo-Admin 搭建过程中遇到的大坑(Maven package失败)
Dubbo-Admin 的选择以及开源地址 首先吐槽一下网上的东西好老啊。。大概是17年左右的博客?基本上都是在配Dubbo的时候顺便做了Dubbo-Admin,并且都起名叫“Dubbo环境搭建”,干,这让萌新很苦恼啊,明明Dubbo不需要搭建的,只是如果选择Zookeeper当注册中心的话需要配Zookeeper,而Dubbo本身没有配服务端这种说法,所谓的搭建,其实都是搭建D...
2019-06-02 15:28:09 11525 8
原创 Java 1.8下ArrayList的扩容机制
扩容机制简述 扩容算法是基于方法grow()的,ArrayList的几个构造参数,决定了在初始状态下,容器的大小要么为0要么为自己设定的某个值。那么具体的扩容,就是在add()等方法进行的时候进行一次判定——如果有数组溢出的风险,那么就进行扩容。 扩容的时候先判定数组大小。数组是空或者小于10,那么在扩容的时候将数组直接分配大小到10。这也是一部分人认为Arra...
2019-05-14 19:06:14 2160 1
原创 Java标记接口的作用
什么是标记接口? 最早还是在看源码的时候有印象,例如下面是ArrayList的源码:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable实现了...
2019-05-12 22:23:11 2111 1
原创 纪念2019年春招
大三要结束了啊,好快。 最后也算是拿了个二线厂子的offer。惨的要死,各种挂。说是各大厂小厂都在裁员,也都在说互联网寒冬,不过实习困难的原因还是在自己身上,菜是原罪啊! 两个月,让各大厂按在地上摩擦,腾讯还捞了两次,让额外摩擦两次,字节跳不动专门花了两个小时让一面二面连续摩擦——尤其吐槽一下字节跳动,看牛客发的面经大部分问《剑指offer》难度......
2019-05-12 21:57:55 2836 15
原创 Java异常获取中try-catch-finally块执行顺序实验探究
最近看面试题,发现这个比较好玩,try-catch-finally块的执行顺序问题。一般认为,finally最后执行,做收尾工作,无论try块是否捕获异常,最后finally都会工作。但是这样还是比较笼统,如果没有catch,而是将异常抛出,让其他方法处理,那么是先进入其他方法还是先执行finally?如果try块中return了,那么finally还执行不执行?进一步,如果try、final...
2019-03-27 17:32:20 4048 2
原创 JDK8下HashMap的tableSizeFor方法
感觉HashMap跟其他的容器风格都不太一样,后来看网上是说JDK8相比以前对HashMap的修改非常大。在看构造方法的时候就卡在了tableSizeFor方法。先看一下构造方法: public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) ...
2019-02-15 18:00:38 1361 1
原创 基于JDK TreeMap分析树的后继结点查询算法
只要理解二叉搜索树,就能看懂这个方法了。注释为:Returns the successor of the specified Entry, or null if no such.就是说返回当前结点的后继结点。然而TreeMap底层是红黑树谈何后继结点?这个方法最早出现是在containsValue方法中。也就是传入一个Value,判定是否存在。也就是说我们需要遍历整个...
2019-02-13 11:11:47 1433 1
原创 红黑树的理解与代码实现
红黑树 我们知道对于二叉搜索树而言,无法保证树的平衡性,从而使得进行操作的时候时间复杂度在O(logn)与O(n)之间。这样是不稳定的。而2-3树则借助于3-结点和临时的4-结点,通过分解,解决了平衡问题。例如对于插入,在最终是3-结点的情况下,临时构成4-结点,然后再分解成3个2-结点,这样令树高度+1,但是整体平衡性不变。而红黑树就是为了实现自平衡这个功能而对2-3树进行了扩...
2019-02-11 23:01:20 2972 1
原创 Java并发中生产者消费者模式
生产者消费者模式 很简单的例子,KFC吃饭,柜台前顾客排队点餐,假设KFC只卖汉堡,那么就是这样的情景:消费者排队花钱下单购买,生产者(厨师)在后厨疯狂做汉堡。如果只有一个厨师,柜台只有一个服务员,那么就类似一对一的情况:消费者可能有多个,但是需要好好排队,厨师做一个消费者拿一个。如果厨师正在做,消费者就只能等待——还是在排队的,不能插队。如果没人光顾,厨师就闲着。这就是单线程。...
2019-02-09 11:17:09 308
原创 二叉查找树(Binary Sort Tree)的解析与实现
二叉查找树 关于性质之类的可以参考wiki、百度百科或者其他博客,其实也很简单,推荐看标准的描述。而博主写的内容主要是想写成类似Map底层的。所以有泛型,并且是Key-Value结构。关于二叉查找树,我们一般是类比二分搜索,仿佛跟Key-Value这样的结构并不一致。但是,在Java上,如果我们能在定义节点的时候,专门声明了Key与Value,并且在Key上定义comparato...
2019-01-31 21:40:45 2217
原创 LeetCode 969 pancake sorting 煎饼排序
题目链接LeetCode 周赛 118 场 B题https://leetcode-cn.com/problems/pancake-sorting/题意 先说明所谓的煎饼翻转,例如数组[1,2,3,4]其煎饼翻转后就是[4,3,2,1],就是从后到前翻转过去而已。现在给出一个排序,例如[3,2,4,1],在只能选择煎饼翻转的情况下,需要将其排序成为[1,2,3,4]。煎...
2019-01-10 10:58:34 809
原创 LeetCode 71 simplify-path 简化路径
题目链接https://leetcode-cn.com/problems/simplify-path/题意 给出Unix系统下的一个路径,化简这个路径。其实更类似于输入cd以后,后面写了一个路径,而系统会跳转到一个确定的路径中,我们需要得到的就是这个最终的路径。例如:"/////file/word/../",如果我们在前面加上cd命令,那么实际上跳转的路径是"/file"...
2019-01-06 10:20:29 240
原创 JQuery Mobile默认Ajax异步提交导致URL不跳转问题
最近隔壁实验室把后台交给我们来写了,要求前端用jquery mobile,因为只想在手机上跑。期末了无暇顾及,瞎写的时候就出现了这个大坑= =。例如注册之类的有数据提交的情况,并且还跟数据库大量交互。为了安全,博主写的时候写了重定向,这样在跳转的时候不会出现重复提交表单或者重复对数据库操作的问题,然后这前端框架就炸了:跳转的时候URL没变化! 网上搜了一波,大概是...
2018-12-24 17:49:28 457 1
原创 idea中Maven项目或者Web项目出现 java.lang.ClassNotFoundException 异常的解决方法
首先说明一下,java.lang.ClassNotFoundException异常是有通用的解决方法的。一般而言,都是因为缺少某个jar包。而且在IDE中出现颇多。后面会跟一个包名,说明这个包没有引用。 在IDE中,如果我们需要某个特殊的类,一般会提前引用jar包,就算不引用,IDE会直接飙红,提示没有这个类,所以既然能跑就肯定引用这个jar包了,所以出现这个错误...
2018-12-09 09:48:11 41640 14
原创 Spring MVC实现HTTP协议的LastModified缓存的两种方法与原理
关于缓存方式的大概原理 首先,Spring MVC中,我们发出请求,就会返回view,而实际上这样就引出了一个问题:我的请求如果没有任何改变的话,也就是说上次请求获得的静态资源是没有变化的。此时按照Spring MVC的机制,我们仍然返回了一套静态资源。显然这样增加了服务器的负载,以及网络带宽的使用。 可能Ajax能够解决这个问题——但是我们可以使用HTTP协议...
2018-11-27 23:22:06 2251 1
原创 LeetCode 944 delete-columns-to-make-sorted 删除列以使之有序
题目链接LeetCode 周赛 111场 D题https://leetcode-cn.com/problems/delete-columns-to-make-sorted/题意 吐槽一下111场周赛,2个简单题就不说了,B、D题题目都这么诡异。。。真的是能看懂就能写了。这个题简而言之就是将给出的所有字符串拼成一个二维数组,然后,对于这个二维数组的每一列,可以删除或者不...
2018-11-24 13:35:37 300
原创 LeetCode 942 di-string-match 增减字符串匹配
题目链接LeetCode 周赛 111场B题https://leetcode-cn.com/problems/di-string-match/题意 是有点难懂了,给出一个字符串S,S全部由‘D’和‘I’组成,然后现在需要解出一个数组,而这个数组需要和S相匹配。假设S的长度为N,那么这个数组的长度是N+1,并且值是集合{0...N}的任意排列。给出一个例子,假设有字符串...
2018-11-24 13:26:09 1537 5
原创 LeetCode 937 reorder log files 重新排列日志文件
现在过不了了哈!当时比赛能AC,后期应该添加了新的用例,所以我的代码是不能AC的,详情参考评论,懒得再看了= =,请移步其他题解,抱歉哈。题目链接LeetCode 周赛 110 场A题https://leetcode-cn.com/contest/weekly-contest-110/problems/reorder-log-files/题意 题目很长,总之,就是...
2018-11-12 13:33:35 1002 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人