自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (1)
  • 收藏
  • 关注

原创 分辨率并不是越高越好,因为人眼分辨能力存在极限

显示屏清晰度对于计算机上显示的文字和图片,正常来说显示器分辨率越高清晰度就会更高,不过有时我们切换一些超高分辨率后也识别不出差异,这是为什么?简单来说显示清晰度由物理因素和视力因素。物理因素就是设备显示分辨率,视力的差异会影响到你的视觉体验。显示分辨率越高越好?由于人眼分辨能力存在一定的极限,所以合适的分辨率和观看距离才是最好的。(后文会讲到)先了解一些基本概念。屏幕尺寸:指的是屏幕对角线的长度,单位英寸。屏幕分辨率:是指宽度上和高度上最多能显示的物理像素点个数。设备像素(又叫物理像素):

2021-11-03 15:34:10 5395 2

原创 面试官问:什么布隆过滤器?

布隆过滤器布隆过滤器是一种由位数组和多个哈希函数组成概率数据结构,返回两种结果 可能存在 和 一定不存在。布隆过滤器里的一个元素由多个状态值共同确定。位数组存储状态值,哈希函数计算状态值的位置。根据它的算法结构,有如下特征:使用有限位数组表示大于它长度的元素数量,因为一个位的状态值可以同时标识多个元素。不能删除元素。因为一个位的状态值可能同时标识着多个元素。添加元素永远不会失败。只是随着添加元素增多,误判率会上升。如果判断元素不存在,那么它一定不存在。比如下面,X,Y,Z 分别由 3个状

2021-11-03 15:31:15 168

原创 java中的GC收集器

GC(Garbage collection )程序内存管理分手动和自动。手动内存管理,需要我们编程的时候显式分配和释放空间,但如果忘记释放,会造成严重的内存泄漏问题。如下: //申请40MB内存 int* p = malloc(1024 * 1024 * 10 * sizeof(int)); //释放内存 free(p);显式分配和释放很容易就造成内存泄漏。因此我们希望有一种能自动回收内存的方法,这样就可以消除人为造成的错误。我们将这种自动化称为垃圾收集(简称GC)现

2020-12-16 16:00:45 250

原创 用牛郎织女来解释Https

前言本文尝试使用牛郎织女来解释Https。信息交换传递从古至今都有,只是传递导体和交换方式不断在发生变化。现代信息传递都是通过网络进行。信息传递步骤简化:打包 —> 传输 —> 解包,而像Http这类协议就是指定信息传递的标准,而信息传递一般主要考虑以下两方面问题。可靠性(传递到一半丢失??)安全性(被人拦截修改??)本文主要讨论传递的安全性。众所周知 Https就是http安全版,我们先来看一看古时传递信息怎么保证安全。飞鸽传书在通讯不是很发达的年代,飞鸽传书是一种很有效的

2020-12-13 22:47:26 151

原创 java并发之volatile关键字

Java面试中经常会涉及关于volatile的问题。本文梳理下volatile关键知识点。volatile字意为“易失性”,在Java中用做修饰对象变量。它不是Java特有,在C,C++,C#等编程语言也存在,只是在其它编程语言中使用有所差异,但总体语义一致。比如使用volatile 能阻止编译器对变量的读写优化。简单说,如果一个变量被修饰为volatile,相当于告诉系统说我容易变化,编译器你不要随便优化(重排序,缓存)我。Happens-before规范上,Java内存模型遵行happens-be

2020-06-23 18:11:35 95

原创 java并发之synchronized

Java为我们提供了隐式(synchronized声明方式)和显式(java.util.concurrentAPI编程方式)两种工具来避免线程争用。本章节探索Java关键字synchronized。主要包含以下几个内容。synchronized关键字的使用;synchronized背后的Monitor(管程);synchronized保证可见性和防重排序;使用synchronized注意嵌套锁定。使用方式synchronized 关键字有以下四种使用方式。实例方法静态方法实例方法中

2020-06-19 15:11:45 125

原创 Java并发之同步器设计

在 Java并发之内存模型了解到多进程(线程)读取共享资源的时候存在竞争条件。计算机中通过设计同步器来协调进程(线程)之间执行顺序。同步器作用就像登机安检人员一样可以协调旅客按顺序通过。在Java中,同步器可以理解为一个对象,它根据自身状态协调线程的执行顺序。比如锁(Lock),信号量(Semaphore),屏障(CyclicBarrier),阻塞队列(Blocking Queue)。这些同步器在功能设计上有所不同,但是内部实现上有共通的地方。同步器同步器的设计一般包含几个方面:状态变量设计(同

2020-06-17 17:28:15 204

原创 Java并发之内存模型

Java是一门支持多线程执行的语言,要编写正确的并发程序,了解Java内存模型是重要前提。而了解硬件内存模型有助于理解程序的执行。本文主要整理以下内容Java内存模型硬件内存架构共享对象可见性竞争条件Java内存模型Java内存模型最新修订是在Java5。 JSR-176 罗列了 J2SE5.0 相关发布特性,包含其中的 JSR-133(JavaTM内存模型与线程规范),java虚拟机遵循此规范。延续至今该内存模型在Java8中依然奏效。JSR 全称 Java Specificatio

2020-06-09 11:19:30 126

原创 你使用过Java8中的parallelStream?

前言并行编程势不可挡,Java从1.7开始就提供了Fork/Join 支持并行处理。java1.8 进一步加强。并行处理就是将任务拆分子任务,分发给多个处理器同时处理,之后合并。Stream APIJava 8 引入了许多特性,Stream API是其中重要的一部分。区别 InputStream OutputStream,Stream API 是处理对象流而不是字节流。执行原理如下,流分串行和并行两种执行方式// 串行执行流stream().filter(e -> e > 10

2020-06-05 21:23:02 238

原创 并发与并行

前言​ 软件的运行依赖硬件基础设施。编程技术也因为硬件的不断发展而更新。通过了解计算机硬件发展,可以知道一些编程语言的设计目标发展方向。过去半个世纪中,摩尔定律一直指导半导体与科技产业的发展。英特尔一直遵循摩尔定律,一般每隔两年左右就会发布新成果。不过现在有一些专家指出计算机已经达到摩尔定律的物理极限。科技的不断进步,晶体管制作不断缩小,但任何物质都有物理极限。当单个物体接近物理极限时,一般会选择了多个并行运算,从而达到提升效率的目的。摩尔定律:摩尔定律是由1965年英特尔联合创始人戈登•摩尔,

2020-06-05 14:10:30 284

原创 双重检查锁定在Java中的陷阱

简介双重检查锁定(也叫做双重检查锁定优化)是一种软件设计模式。它的作用是减少延迟初始化在多线程环境下获取锁的次数,尤其是单例模式下比较突出。软件设计模式:解决常用问题的通用解决方案。编程中针对一些常见业务固有的模版。延迟初始化:在编程中,将对象的创建,值计算或其他昂贵过程延迟到第一次使用时进行。单例模式:在一定范围内,只生成一个实例对象。Java中的双重检查锁定单例模式我们需保证实例只初始化一次。下面例子在单线程环境奏效,多线程环境下会有线程安全问题(instance被初始化多次)。

2020-06-01 18:30:36 136

原创 一篇文章,全面掌握Git

版本控制版本控制就是记录项目文件的历史变化。它为我们查阅日志,回退,协作等方面提供了有力的帮助。版本控制一般分为集中化版本控制和分布式版本控制。集中化主要的版本数据都保存服务端。分布式版本数据分散在多端。GitGit属于分布式版本控制,也是现在比较流行的一种版本管理工具。Git项目有三个区块:工作区 / 暂存区 / 版本库工作区存放从版本库提取出来的文件,供我们编辑修改;暂存区保存了下一次要提交的目录信息;版本库保存项目版本元数据和Objects数据,后文会详解。Git工作流

2020-05-30 22:39:11 252

原创 Deno来了,Node要凉了吗?

背景故事最近Deno讨论比较热门,并且有说 “Deno很可能是下一个前端的大事件”,所以关注下。Node.js 和 Deno 的起源作者都是Ryan Dahl他从2009年开始从事Node项目,但是几年后却退出了该项目。在2018年的时候,他发表了我对Node.js感到遗憾的10件事,另外他宣布了创建全新的Deno项目 。作者GitHub https://github.com/ryRyan DahI 提到的Node十个设计错误,很多都是基层方面的设计错误,要深入理解需要有专业功底。本人作为小白

2020-05-27 17:52:48 331

原创 如何用利特尔法则调整线程池大小

利特尔法则利特尔法则派生于排队论,用以下数学公式表示:L=λWL = λWL=λWL 系统中存在的平均请求数量。λ 请求有效到达速率。例如:5/s 表示每秒有5个请求到达系统。W 请求在系统中的平均等待执行时间。排队论:研究服务系统中排队现象随机规律的学科,探究排队有关的数量指标的概率规律性。场景我们先假设一个店铺员工调整场景。前提每个客户一次只买一只炸鸡;每位员工制作一个炸鸡需要1分钟。客户买炸鸡时等待时间越短,体验越好。如果你是一家炸鸡店老板,今年受

2020-05-26 21:24:06 347

原创 Go语言入门

GO语言耳闻已久的Go语言,今天入门了解一下。Go之所以火爆的原因之一是,拥有CoreOS,Kubernetes(Google),InfluxDB知名大客户,另外Docker也是Go语言所编写。Go语言的功能特性(所有这些特性,以后慢慢学习了解)并发支持简单性和一致性面向对象指针编译器包管理Go语言标准库地址https://golang.org/pkg 官网https://studygolang.com/pkgdoc 中文项目源码地址https.

2020-05-25 18:38:11 160

原创 学习仿今日头条疫情地图+用户画像(echarts)

Echarts Chartjs最近由于公司图表展现需求较多,所以学习整理下相关资料。前端图表框架也比较多,这里介绍两款。Apache EchartsChartjsApache Echarts 涵盖各行业图表,满足各种需求,功能相当丰富。而后起之秀chartjs以其简单灵活特性,也深得开发设计人员喜爱。https://echarts.apache.org (Echarts)https://www.chartjs.org (Charts)两者都是开源项目,托管在Githubhttps

2020-05-24 18:37:05 1481 5

原创 简版在线聊天Websocket

序言What is Webscoket ?websocket 应用场景简版群聊实现代码例子小结WebscoketWebsokcet 是一种单个TCP连接上进行全双工通信的协议,通过HTTP/1.1 协议的101状态码进行握手。http://websocket.orgWebsocket 应用场景Websocket 和 http 协议都是web通讯协议,两者有何区别?先说Http,它是一种请求响应协议,这种模型决定了,只能客户端请求,服务端被动回答。如果我们有服务

2020-05-19 23:08:43 187

原创 推荐几个程序员常用的工具

IDEVisual Studio宇宙第一IDE,不用多说。https://visualstudio.microsoft.com/zh-hans/vsVisual Studio Code最流行的代码编辑器,开发 IDE,也属于微软产品。编写JavaScript,python等首选。而且有着庞大的插件生态。https://code.visualstudio.comJetbrains家族无论是java,web,python ,Golang 开发都能在这里找到不错的IDE。http

2020-05-18 23:26:09 544

原创 简单聊聊CQRS

序言Domain Driven Design (DDD)CQRSAxonframeworkMvc vs CQRS参考Domain driver design​ 领域驱动设计 也就是我们在设计系统时的一种模式。领域是个很宽泛的概念,比如银行领域,消费领域等,可大可小。驱动也意味推动,也就是用领域方面的知识来推动软件的设计。(那么也可以有产品驱动设计,测试驱动设计(TDD),也就是产品测试催着开发办事么?哈哈,这里是我瞎掰!)​CQRS (命令查询责任隔离)CQRS 属于DDD应用领域的

2020-05-17 21:50:05 334

原创 springboot+vue前后端免费开源

序言继上一篇 一套管理系统基础模版详细梳理一下安装流程,功能说明,开发规范等。后端项目结构?如何从零搭建环境开发?如何打包部署?接入开发及规范项目地址小结后端项目结构​ shop-server 依赖以下项目https://github.com/cuteJ/ot-server-parent (统一版本插件管理)https://github.com/cuteJ/ot-server-commons (公共基础类)https://github.com/cuteJ/ot-boot-st

2020-05-17 10:50:04 1052

原创 管理系统模版

管理系统模版前言一套管理系统基础模版,提供了些基础功能(包含:系统用户,菜单,权限,调度任务,常量,数据字典等功能) 方便开发人员专注于业务功能开发。项目前后端分离,前端采用 vue+element-ui,后端采用 spring-boot项目地址:https://github.com/cuteJ/shop-server (后端)https://github.com/cuteJ/shop-web-mgt (前端)项目简介项目结构前端src -- 源码目录├── api -- API

2020-05-17 10:47:14 1411

Golang.zip

Go是一种开放源代码编程语言,可轻松构建 简单,可靠且高效的软件。Golang语言安装包(包含windows Macos linux平台)

2020-05-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除