- 博客(51)
- 收藏
- 关注
转载 用代码说话:如何在Java中实现线程
并发编程是Java语言的重要特性之一,“如何在Java中实现线程”是学习并发编程的入门知识,也是Java工程师面试必备的基础知识。本文从线程说起,然后用代码说明如何在Java中实现线程。一、什么是线程?线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,也可以使用多线程对运算密集型任务提速。如果使用得当,线程可以有效...
2019-08-28 22:10:00 246
转载 用代码说话:synchronized关键字和多线程访问同步方法的7种情况
synchronized关键字在多线程并发编程中一直是元老级角色的存在,是学习并发编程中必须面对的坎,也是走向Java高级开发的必经之路。一、synchronized性质synchronized是Java提供的内置锁机制,有如下两种特性:互斥性:即在同一时间最多只有一个线程能持有这种锁。当线程1尝试去获取一个由线程2持有的锁时,线程1必须等待或者阻塞,知道线程2释放这个锁。如果线...
2019-08-24 16:46:00 211
转载 RabbitMQ(四):使用Docker构建RabbitMQ高可用负载均衡集群
本文使用Docker搭建RabbitMQ集群,然后使用HAProxy做负载均衡,最后使用KeepAlived实现集群高可用,从而搭建起来一个完成了RabbitMQ高可用负载均衡集群。受限于自身条件,本文使用VMware虚拟机的克隆功能克隆了两台服务器进行操作,仅作为一个demo,开发中可根据实际情况进行调整。为什么要搭建高可用负载均衡集群?一句话来说就是:引入消息队列,可以实现异步操作...
2019-08-03 19:41:00 491
转载 RabbitMQ(三):RabbitMQ与Spring Boot简单整合
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitMQ进行简单整合,实现生产和消费消息。配置Spring Boot使用了这么久,套路差不多摸清楚了。Spring Boot与其他组件进行整合,无非就是加入pom依赖,接着配置一些基本信息,然...
2019-07-27 18:46:00 312
转载 RabbitMQ(二):RabbitMQ高级特性
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要了解一下相关知识,RabbitMQ(一):RabbitMQ快速入门已经入门RabbitMQ,本文介绍RabbitMQ的高级特性。过期时间(TTL)Time To Live,也就是生存时间,是一条消息在队列中的最大存活时间,单位是毫秒。了解Redis的朋友应该一看就明白...
2019-07-21 15:37:00 342
转载 RabbitMQ(一):RabbitMQ快速入门
RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用。作为一名合格的开发者,有必要对RabbitMQ有所了解,本文是RabbitMQ快速入门文章,主要内容包括RabbitMQ是什么、RabbitMQ核心概念、常用交换器类型、用Docker安装RabbitMQ等。RabbitMQ简介以熟悉的电商场景为例,如果商品服务和订单服务是两个不同的微服务,在下...
2019-07-20 11:00:00 150
转载 使用Docker部署Spring Boot项目
本文使用Docker部署Spring Boot项目。部署之前需要环境中已经安装Docker和Maven(用于打包),所以本文先进行安装Docker和Maven;接着搭建一个Spring Boot项目,使其支持Docker部署;最后进行部署和测试。环境搭建安装Docker检查系统内核版本Docker运行在CentOS 7上,要求操作系统为64位,内核版本为3.10及以上。确认本机...
2019-06-24 19:29:00 1980
转载 一文快速入门Docker
Docker提供一种安全、可重复的环境中自动部署软件的方式,拉开了基于与计算平台发展方式的变革序幕。如今Docker在互联网公司使用已经非常普遍。本文用十分钟时间,带你快速入门Docker。Docker是什么Docker是什么?官网首页的介绍:Enterprise Container Platform for High-Velocity Innovation. Securely...
2019-06-22 09:13:00 207
转载 Spring Boot整合Mybatis完成级联一对多CRUD操作
在关系型数据库中,随处可见表之间的连接,对级联的表进行增删改查也是程序员必备的基础技能。关于Spring Boot整合Mybatis在之前已经详细写过,不熟悉的可以回顾Spring Boot整合Mybatis并完成CRUD操作,这是本文操作的基础。本文先准备一个测试的数据库,然后使用MyBatis Generator进行部分代码自动生成,再以一个例子来展示稍微高级点的操作:使用Mybat...
2019-06-06 15:45:00 473
转载 面试必备:Maven核心知识点梳理
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。核心功能依赖管理:Maven工程对jar包的管...
2019-05-21 15:35:00 175
转载 设计模式:如何优雅地手写单例模式
单例模式是一种常用的设计模式,该模式提供了一种创建对象的方法,确保在程序中一个类最多只有一个实例。单例有什么用处?有一些对象其实我们只需要一个,比如线程池、缓存、对话框、处理偏好设置和注册表的对象、日志对象,充当打印机、显示等设备的驱动程序对象。其实,这类对象只能有一个实例,如果制造出来多个实例,就会导致许多问题,如:程序的行为异常、资源使用过量,或者是不一致的结果。Single...
2019-04-22 20:00:00 481
转载 来聊一聊不low的Linux命令——find、grep、awk、sed
前几天面试,被一位面试官嫌弃了“你的Linux命令有点low”。被嫌弃也挺正常的,因为我的简历写的我自己都有点看不下去:了解Linux常用命令,如ls,tail -f等命令,基本满足日常的开发。面试官人很好,整个面试进行地也很愉快。说心里话,还是挺感激的,因为很少有面试官会指出我的简历上出现的问题。所以呢,今天就来聊一聊不low的Linux命令——搜索文件的find命令、搜索文件内容的g...
2019-04-15 20:56:00 185
转载 我们一起来排序——使用Java语言优雅地实现常用排序算法
破阵子·春景燕子来时新社,梨花落后清明。池上碧苔三四点,叶底黄鹂一两声。日长飞絮轻。巧笑同桌伙伴,上学径里逢迎。疑怪昨宵春梦好,元是今朝Offer拿。笑从双脸生。排序算法——最基础的算法,互联网面试必备技能。春来来了,排序的季节来了!本文使用Java语言优雅地实现常用排序算法,希望对大家有帮助,早日拿到Offer!冒泡排序最暴力、最无脑、最简单的排序算法。名字的由来是...
2019-04-02 17:10:00 150
转载 拼多多大数据开发工程师SQL实战解析
不久前,裸考国内知名电商平台拼多多的大数据岗位在线笔试,问答题(写SQL)被虐的很惨,完了下来默默学习一波。顺便借此机会复习一下SQL语句的用法。本文主要涉及到的SQL知识点包括CREATE创建数据库和表、INSERT插入数据、SUM()求和、GROUP BY分组、DATE_FORMAT()格式化日期、ORDER BY排序、COUNT()统计行数、添加排名、MySQL实现统计排名、并列...
2019-03-25 09:19:00 617
转载 如何在MySQL中查询每个分组的前几名【转】
问题在工作中常会遇到将数据分组排序的问题,如在考试成绩中,找出每个班级的前五名等。 在orcale等数据库中可以使用partition语句来解决,但在mysql中就比较麻烦了。这次翻译的文章就是专门解决这个问题的原文地址: How to select the first/least/max row per group in SQL翻译在使用SQL的过程中,我们经常遇到这样一类问题...
2019-03-23 18:21:00 159
转载 在MySQL中实现Rank高级排名函数【转】
MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名。尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名效果。在这里我用一个简单例子来实现排名的查询:首先我们先创建一个我们需要进行高级排名查询的players表,CREATE TABLE `players` ( `pid` int(2...
2019-03-22 14:59:00 98
转载 从源码解读线程(Thread)和线程池(ThreadPoolExecutor)的状态
线程是比进程更加轻量级的调度执行单位,理解线程是理解并发编程的不可或缺的一部分;而生产过程中不可能永远使用裸线程,需要线程池技术,线程池是管理和调度线程的资源池。因为前不久遇到了一个关于线程状态的问题,今天就趁热打铁从源码的层面来谈一谈线程和线程池的状态及状态之间的转移。线程JDK中,线程(Thread)定义了6种状态: NEW(新建)、RUNNABLE(可执行)、BLOCKE...
2019-03-14 09:00:00 217
转载 LeetCode重建二叉树系列问题总结
二叉树天然的递归特性,使得我们可以使用递归算法对二叉树进行遍历和重建。之前已经写过LeetCode二叉树的前序、中序、后序遍历(递归实现),那么本文将进行二叉树的重建,经过对比,会发现二者有着许多相似之处。准备工作二叉树节点定义://Definition for a binary tree node.public class TreeNode { int...
2019-02-27 11:26:00 91
转载 LeetCode二叉树的前序、中序、后序遍历(递归实现)
本文用递归算法实现二叉树的前序、中序和后序遍历,提供Java版的基本模板,在模板上稍作修改,即可解决LeetCode144. Binary Tree Preorder Traversal(二叉树前序遍历),94. Binary Tree Inorder Traversal(二叉树中序遍历),145. Binary Tree Postorder Traversal(二叉树后序遍历)。基...
2019-02-27 11:13:00 147
转载 Redis持久化方式的选择
本文将介绍Redis持久化的两种方式:快照持久化和AOF持久化,并对两种方法进行分析和对比,方便在实际中做出选择。持久化什么是持久化Redis所有数据保存在内存中,对数据的更新将异步地保存到磁盘上,使得数据在Redis重启之后仍然存在。这么做这有什么实际意义呢?将数据存储到硬盘是为了以后可以重用数据,将数据进行备份,可以在系统故障的时候从备份进行恢复。还有一点,存储在Redi...
2019-02-20 09:28:00 166
转载 Redis客户端——Jedis的使用
本文介绍基于Java语言的Redis客户端——Jedis的使用,包括Jedis简介、获取Jedis、Jedis直连、Jedis连接池以及二者的对比的选择。Jedis简介Jedis 是Redis官方首选的基于Java语言的客户端开发包。Jedis功能强大,提供了完整Redis命令,与 Redis 2.8.x, 3.x.x及以上版本完全兼容。而且使用简单方便,绝对是Java语言的...
2019-02-03 21:50:00 154
转载 Redis初识
本文将从Redis简介、Redis特性回顾、Redis安装、Redis典型应用场景四部分进行介绍Redis,读完本文,你将会对Redis的特性和功能有初步的了解。Redis简介Redis是什么?Redis是一个开源的(BSD许可)、速度非常快的非关系数据库(non-relational database),它可以存储键(key)与5中不同数据类型的值(value)之间的映射(...
2019-01-30 17:45:00 74
转载 @GeneratedValue源码解析
JPA要求每一个实体必须有且只有一个主键,而@GeneratedValue提供了主键的生成策略,这就是@GeneratedValue注解存在的意义。本文将浅析@GeneratedValue的源码。@GeneratedValue的源码如下:/* * Copyright (c) 2008, 2009, 2011 Oracle, Inc. All rights reserved...
2019-01-07 10:50:00 158
转载 @Controller和@RestController源码解析
2018年不知不觉已经走到了尾声,你还在为分不清@Controller和@Restcontroller而烦恼吗?这篇博文从源码层面分析这两个注解,值得一读。首先贴一张源码的图,对比一下,左边是@Controller的源码,右边是@RestController的。如果觉得不清楚,看下面代码:@Controller:@Target({ElementType.TYP...
2018-12-23 20:26:00 314
转载 Spring Boot整合Mybatis并完成CRUD操作
MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作。为什么要使用Mybatis?我们需要掌握Mybatis吗?说的官方一点:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBati...
2018-12-17 21:38:00 283
转载 Redis数据结构和常用API
Redis是一个速度非常快的非关系型数据库,可以存储键与5中不同数据结构类型之间的映射。这5种数据结构分别是STRING(字符串)、LIST(列表)、SET(集合)、HASH(散列)、ZSET(有序集合)。STRING(字符串)和其他编程语言或者其他键值存储提供的字符串非常相似。SET 设置值GET 获取值DEL 删除值127.0.0.1:6379> s...
2018-12-15 16:28:00 114
转载 Spring Boot实现仿博客园发送通知邮件
邮件服务已经是基础性服务了 ,是网站的必备功能之一,当注册了某些网站的时候,邮箱里通常会收到一封注册成功通知邮件或者点击激活账号的邮件,博客园也是如此。本文使用Spring Boot,通过QQ邮箱来模仿博客园发送一封通知邮件。博客园发送的“欢迎您加入博客园”的主题邮件如图所示。这种通知邮件,只有登录用户名在变化,其它邮件内容均不变,很适合用邮件模板来处理。模板可以实现显示与数...
2018-12-12 15:01:00 172
转载 Spring Boot 2.x整合Redis
最近在学习Spring Boot 2.x整合Redis,在这里和大家分享一下,希望对大家有帮助。Redis是什么Redis 是开源免费高性能的key-value数据库。有以下的优势(源于Redis官网http://www.redis.net.cn/):性能极高– Redis能读的速度是110000次/s,写的速度是81000次/s 。丰富的数据类型 – ...
2018-12-05 20:54:00 166
转载 Spring Boot配置定时任务
在项目开发过程中,经常需要定时任务来做一些内容,比如定时进行数据统计(阅读量统计),数据更新(生成每天的歌单推荐)等。Spring Boot默认已经实现了,我们只需要添加相应的注解就可以完成定时任务的配置。下面分两步来配置一个定时任务:创建定时任务启动类添加注解创建定时任务这里需要用到Cron表达式,如果对Cron表达式不是很熟悉,可以查看cron表达式详解。...
2018-12-03 15:09:00 99
转载 Spring Boot配置拦截器及实现跨域访问
拦截器功能强大,能够深入方法前后,常应用于日志记录、权限检查和性能检测等,几乎是项目中不可或缺的一部分,本文就来实现Spring Boot自定义拦截器的配置。理论指导问:Spring Boot怎么配置拦截器?答:配置一个拦截器需要两步完成。自定义拦截器,实现HandlerInterceptor这个接口。这个接口包括三个方法,preHandle是请求执行前执行的,pos...
2018-12-03 09:52:00 83
转载 Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作
只需两步!Eclipse+Maven快速构建第一个Spring Boot项目构建了第一个Spring Boot项目。Spring Boot连接MySQL数据库连接了MySQL数据库。本文在之前的基础上,使用Spring Data Jpa对MySQL数据库进行CRUD——增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete) 操作。Sp...
2018-12-02 15:56:00 150
转载 Spring Boot连接MySQL数据库
上篇 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 已经构建了一个Spring Boot项目,本文在此基础上进行连接MySQL数据库的操作。1. pom.xml添加依赖 <dependency> <groupId>org.springframework.boot</group...
2018-11-30 15:58:00 158
转载 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目
随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简洁的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多。配置繁琐,容易出错,让人无比头疼,简化Spring配置简直可以说是民心所向。Spring Boot是由Pivotal团队提供的一个基于Java的全新的开源框架,其设计目的是用来简化新Spring应用的初始搭建以及开...
2018-11-29 10:44:00 90
转载 Java将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)...
本文使用jxl.jar工具类库将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)。/** * 按列写入Excel并设置格式 * * @param outputUrl * 输出路径 * @param sheetName * 工作薄名称 ...
2018-11-27 15:51:00 594
转载 PyCharm出现TabError: inconsistent use of tabs and spaces in indentation最简单实用的解决办法...
本文使用PyCharm的格式化代码功能解决TabError: inconsistent use of tabs and spaces in indentation。当把代码从别处复制进来PyCharm,然后运行报错:TabError: inconsistent use of tabs and spaces in indentation这个报错的意思是说IDE分不清tab和空格...
2018-11-24 19:01:00 100
转载 Python编程从入门到实践笔记——异常和存储数据
Python编程从入门到实践笔记——异常和存储数据#coding=gbk#Python编程从入门到实践笔记——异常和存储数据#10.3异常#Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。#如果编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个tr...
2018-11-24 10:53:00 85
转载 Python编程从入门到实践笔记——文件
Python编程从入门到实践笔记——文件#coding=gbk#Python编程从入门到实践笔记——文件#10.1从文件中读取数据#1.读取整个文件file_name = 'pi_digits.txt'with open(file_name) as file_object: contents = file_object.read() pri...
2018-11-24 10:51:00 83
转载 Python编程从入门到实践笔记——类
Python编程从入门到实践笔记——类#coding=gbk#Python编程从入门到实践笔记——类#9.1创建和使用类#1.创建Dog类class Dog():#类名首字母大写 """一次模拟小狗的简单尝试""" def __init__(self,name,age): """初始化属性name和age"""...
2018-11-24 10:50:00 71
转载 Python编程从入门到实践笔记——函数
Python编程从入门到实践笔记——函数#coding=gbk#Python编程从入门到实践笔记——函数#8.1定义函数 def 函数名(形参):# [缩进]注释+函数体#1.向函数传递信息#2.形参、实参概念和其余语言的概念相同def greet_user(username): """显示简单的问候语""" ...
2018-11-24 10:48:00 92
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人