• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

2019年02月11日的内容

Java中HashMap底层数据结构

HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。在HashMap中,key-value总是会当做一个整体来处理,系统会根据hash算法来来计算key-value的存储位置,我们总是可以通过key快速地存、取value。下面就来分析HashMap的存取。一、定义Has……

JDK1.8 十大新特性详解

接口的默认方法Java8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:interfaceFormula {    doublecalculate(int a);    defaultdoublesqrt(int a) {        return Math.……

Java多线程和线程池

1.为什么要使用线程池在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或……

超详细的Java面试题总结(四 )之JavaWeb基础知识总结

下面的都是自己之前在学习JavaWeb的时候总结的,对于巩固JavaWeb的基础知识应该有很大帮助。后面还会把框架的面试题总结一下。Servlet总结:在Java Web程序中,Servlet主要负责接收用户请求HttpServletRequest,在doGet(),doPost()中做相应的处理,并将回应HttpServletRespons……

超详细的Java面试题总结(二)之Java基础知识篇

简述线程,程序、进程的基本概念。以及他们之间关系是什么?(参考书籍:《Java程序设计基础》第五版) 线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,……

Netty Client 重连实现

当我们用Netty实现一个TCP client时,我们当然希望当连接断掉的时候Netty能够自动重连。Netty Client有两种情况下需要重连:Netty Client启动的时候需要重连在程序运行中连接断掉需要重连。对于第一种情况,Netty的作者在stackoverflow上给出了解决方案,https://……

泪流满面的 11 个 Git 面试题

在今年的 Stack Overflow 开发者调查报告中,超过 70% 的开发者使用 Git,使其成为世界上使用人数最多的版本控制系统。Git 通常用于开源和商业软件开发,对个人、团队和企业都颇有益处。Q1: 什么是 Git 复刻(fork)?复刻(fork)、分支(branch)和克隆(clone)之间有什么区别?主题:Git 难度:⭐⭐……

搞不懂微信,QQ,微博认证?看这篇 OAuth2 就够了!

对于 OAuth2 我相信,多数人都不会陌生。我前面也写过《Shiro 集成 OAuth2》的教程,最近一段时间,我们再来深入学习学习 OAuth2。 OAuth2 协议很简单,理解起来也不难,难在集成 spring security。于是,Spring 搞了一个 spring-security-oauth2,我们使用它就能很方便的完成基于……

设计和实现一款轻量级的爬虫框架

说起爬虫,大家能够想起 Python 里赫赫有名的 Scrapy 框架, 在本文中我们参考这个设计思想使用 Java 语言来实现一款自己的爬虫框(lun)架(zi)。 我们从起点一步一步分析爬虫框架的诞生过程。我把这个爬虫框架的源码放在 github(https://github.com/biezhi/elves) 上,里面有几个例子可以运……

Spring Boot快速开发利器:Spring Boot CLI

Spring Boot CLI(Command Line Interface)是一个命令行工具,您可以用它来快速构建Spring原型应用。通过Spring Boot CLI,我们可以通过编写Groovy脚本来快速的构建出Spring Boot应用,并通过命令行的方式将其运行起来。下来,我们来学习一下如何安装和使用Spring Boot CLI。……

高性能服务端漫谈

一、背景进入多核时代已经很久了,大数据概念也吵得沸沸扬扬,不管你喜欢不喜欢,不管你遇到没遇到,big-data或bigger-data都必须正视。处理大数据,基本都离不开分布式计算和分布式存储,这其中以hadoop最为使用广泛和经典。分布式系统,就离不开计算系统、网络系统、文件系统和数据库系统。这么多系统,之间又是如何协作的呢?……

大型网站技术架构

早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分、数据拆分、应用解耦)**,向分布式系统转型,涉及到以下环节改造。主要环节业务拆分:将整个网站业务拆分成不同的应用,每个应用独立部署维护,应用之间通过RPC或消息队列通信。集……

JDK8新特性之接口默认方法与静态方法

接口默认方法与静态方法有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题。接口静态方法类似于默认方法,但是我们不能在实现类中覆盖它们,可以避免默认方法在实现类中被覆盖实现。之前讲过的JDK8的list.foreache方法,……

Docker完全指南,入门必读好文!

1、快 速 入 门Docker 最初 dotCloud 公司内部的一个业余项目Docker 基于 Go 语言Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案Docker 的基础是 Linux 容器(LXC)等技术Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多D……

九大工具助你玩转 Java 性能优化

Java性能优化工具可以帮助你改进你的Java代码之前我写过一篇关于5个工具帮助写出更好的Java代码的文章。合适的工具可以改进我们的代码,并且提高开发效率。在IDR解决方案中,我们一直在找一些方法来改进我们的代码。但最近,我们在考虑改进PDF HTML5转换器和Java PDF类库代码时,发现最近我们的关注点已经开始转换到如何提升Java性……

架构思想

关于什么是架构,一种比较通俗的说法是 “最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终的蓝图。从这个意义上说,人生规划也是一种架构。选什么学校、学什么专业、进什么公司、找什么对象,过什么样的生活,都是自己人生的架构。具体到软件架构,维基百科是这样定义的:“有关软件整体结构与组件的抽象描述,用于指导大型软件系统各……

JDK8之新特性扩展篇

之前分篇章讲了一些JKD8中添加的新特性,还有一些新特性这里也一并讲下。BASE64base64编码解码已经被加入到了jdk8中了。import java.nio.charset.StandardCharsets;import java.util.Base64;publicclassBase6……

难得的好文:如何构建一套高可用的 APP 消息推送平台

消息推送作为移动 APP 运营中的一项关键技术,已经被越来越广泛的运用。本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,消息丢失、延迟,接入复杂性,统计缺失等问题,提供了一整套平台级的高可用消息推送解决方案。实践中,借助于该平台,不仅能提能显著提高消息到达率,还能提高研发效率,……

后端架构高可用可伸缩

 下面来分层介绍实践方法。一、入口层高可用nigix两个 keeplive保活 心跳做好。使用心跳技术:keeplive提供这个技术比如机器A IP是1.2.3.4,机器B IP是1.2.3.5,那么再申请一个IP (1.2.3.6)我们称之为心跳IP,平时绑定再A上面,如果A宕机,那么IP会自动绑定到B上面……

阿里内部分享 | 如何让你的后端服务更健壮?

对每一个程序员而言,故障都是悬在头上的达摩克利斯之剑,都唯恐避之不及,如何避免故障是每一个程序员都在苦苦追寻希望解决的问题。对于这一问题,大家都可以从需求分析、架构设计 、代码编写、测试、code review、上线、线上服务运维等各个视角给出自己的答案。本人结合自己两年有限的互联网后端工作经验,从某几个视角谈谈自己对这一问题的理解,不足之处,……

10 行 Java 代码实现最近被使用(LRU)缓存

在最近的面试中,我曾被多次问到,怎么实现一个最近最少使用(LRU)的缓存。缓存可以通过哈希表来实现,然而为这个缓存增加大小限制会变成另一个有意思的问题。现在我们看一下怎么实现。最近最少使用缓存的回收为了实现缓存回收,我们需要很容易做到:查询出最近最晚使用的项给最近使用的项做一个标记链表可以实现这两个操作。检测最近最少……

Java序列化与反序列化的底层实现

在深拷贝与浅拷贝中,提到可以采用「序列化与反序列化」的方式来实现深拷贝,今天主要来填一下序列化的坑。其中,序列化是一种对象持久化的手段,普遍应用于网络传输和远程方法调用(RMI)等场景中,建议关注。什么是Java序列化和反序列化?参考答案:在Java中,序列化是指将Java对象转换为字节序列的过程,而反序列化是指将字节序列转换为Java……

jwt思维导图,让jwt不再难懂

一般情况下,web项目都是通过session进行认证,每次请求数据时,都会把jsessionid放在cookie中,以便与服务端保持会话。前后端分离项目中,通过token进行认证(登录时,生成唯一的token凭证),每次请求数据时,都会把token放在header中,服务端解析token,并确定用户身份及用户权限,数据通过json交互。但……

分布式 Unique ID 的生成方法一览

分布式的Unique ID的用途如此广泛,从业务对象Id到日志的TraceId,本文总结了林林总总的各种生成算法。1. 发号器我接触的最早的Unique ID,就是Oracle的自增ID。特点是准连续的自增数字,为什么说是准连续?因为性能考虑,每个Client一次会领20个ID回去慢慢用,用完了再来拿。另一个Client过来,拿的就是……

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00