走进 PostgreSQL 世界第一篇章--内部结构
在日常的应用程序开发过程中,都离不开数据库的使用。今天就带大家走进非常有名的关系型数据库管理系统:PostgreSQL。
1 安装 PostgreSQL
在深入了解 PostgreSQL 前,先得在我们得主机上安装一下 PostgreSQL。
对于 macOS 用户非常简单,使用以下命令安装
1brew install postgresql
一开始我也是这么安装的,它也可以支持升级新的 PostgreSQL,是非常方便的。但是这里我更加推荐一种安装方式,使用 Docker 来安装启动 PostgreSQL,因为它可以跨平台按需使用,更加方便且易于后期修改。
关于 Docker 的安装,可以在 Docker Desktop for Mac and Windows 安装对应的客户端软件。
1docker run --name postgres -p 5432:5432 -v ~/Documents/docker-volumn/postgres:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres -d postgres:12- ...
提升学习和生活的软件服务清单
最新,为了提升自己的学习效率和生活体验,我的工具库列表又多了一些新的选项。
1. 浏览器
上次说到桌面浏览器的选择时,我已经开始使用 Microsoft Edge 代替 Google Chrome 的使用了t。目前移动端也不例外了,开始转向移动端的 Microsoft Edge。目前移动端的 Edge 目前功能并不齐全,比如并不支持中文朗读功能,我自己测试 Android 的版本在华为手机上英文朗读也有问题。
为什么想要朗读功能呢?还是因为不想长时间盯着手机看,但是又想要了解文章内容。
如果目前非常想要在移动端想要中文朗读功能,Android 可以考虑 荟萃浏览器。当然也可以慢慢等 Edge 浏览器支持了。
iOS 端的浏览器除了 Edge,我以前使用较多的就是 Alook 浏览器.
2. 管理文档类
为了自己规划自己的学习计划,目前开始使用 Jira 进行学习任务的拆分和整体把控。另外其提供的时间报告可以让我清晰地观察到进度情况已经时间花费分布。
由于 Office 的三合一软件的发布,再也不需要单独安装 Word,Excel 和 PowerPoint 了。并且提供的一 ...
日常桌面软件第一弹
在日常工作与休闲娱乐中,我们总是离不开电脑的使用,虽然智能手机和平板的横空出世,分流了一大部分的电脑使用场景,但是我们依然无法完全脱离电脑。那下面就带大家讲讲有哪些必需和好用的软件,提升工作效率和娱乐度。
1. 浏览器
日常使用软件频率第一毫无疑问是浏览器了,挑选一款合适的浏览器就变得尤为重要,直接影响我们的使用体验。
Microsoft Edge
没错,首推的就是改版后的 Microsoft Edge 浏览器,使用 Chromium 架构后,我已经没有理由再去使用 Google Chrome 浏览器了。
比较有特色的优点:
朗读功能,亲测效果不错
比 chrome 要更省资源
Linux 系统的用户可能得等上一段时间了,好消息是 Microsoft 已经决定出 Linux 版本的 Edge 浏览器了,可以暂时使用其他浏览器。
2. 视频播放器
看电影怎么能少一个称心如意的播放器呢?Windows 首推 PotPlayer,而 macOS 首推 IINA
PotPlayer
支持多种视频格式
支持倍速播放
简洁干净
3. 下载器
由于免不了需要下载一些文件,一 ...
深入理解 JVM 内存结构
在日常的编程活动中,我们经常使用 Java 编程语言编写代码,那么你们知道每天使用的 Java 语言中对象是分配在内存的何处呢,今天就带大家了解一下 JVM 的内存结构。
JVM 的内存区域主要可以分为线程隔离的数据区域和线程共享的数据区域,还有一块经常被我们忽略的直接内存区域。
JVM 运行时数据区域
线程隔离的数据区域
程序计数器(PC):占用内存空间较小,主要存储字节码的行号指示器,控制程序的执行
JVM 栈:默认一个线程的栈大小为 1 MB
栈帧
局部变量表:储存基本数据类型和对象引用(地址信息)
方法参数
局部变量
操作树栈(基于栈的指令集执行)
动态连接
一个指向运行时常量池中该栈帧所属方法的引用
方法出口
方法返回地址:主调方法的 PC 计数器值或者发生异常时异常处理器表确定的返回地址
本地方法栈:为本地方法服务,在 Hotspot 虚拟机中与 JVM 栈合而为一
线程共享的数据区域
Java 堆:存储对象的实例
运行时常量池(Java 8+)
字面量
符号引用
类或接口
字段
类中方法
接口中方法
对象的内 ...
小而美的 Android 应用
以前一直使用的是 iPhone,最近一年开始使用 Android 手机,这也不可避免的在软件方面需要重新选择。下面就来介绍我觉得 Android 平台的一些好软件。
1. Android 独有的软件
应用商场
国内的应用软件一般我会在手机自带的应用商场和酷安这两个软件上进行下载安装;而在这两个应用商场没有软件,我会选择使用 APKPure 进行安装。如果你能在 Google Play 安装那自然是更好不过了。
酷安
APKPure
酷安上又很多小众的软件,我个人非常喜欢。
新浪微博
Share 微博客户端
个人非常喜欢的第三方微博客户端,没有广告,体验是真的号。除了每次升级过后,残忍拒绝一下它的高级版诱惑。
浏览器
Via 浏览器
不多说了,500 KB 的浏览器,你值得拥有。
网易新闻
Mere 新闻
没有广告,没有多余内容的新闻阅读体验,不要太舒服哦。
日记
时间戳日记
其实我主要是喜欢基于时间线的记录风格,如果能在桌面端操作就完美了。
倒计时
时光提醒
比倒数日更美观的 UI 页面,时钟式的显示方式很有感觉
RSS
...
深入理解 Java Map
在日常的编程活动中,使用 Map 类型是十分常见的,那么你们知道每天使用的 Map 底层是如何实现的呢?今天就带大家来深入了解一下内部的构造。
1. 常见的 Map 类型
HashMap
HashTable
ConcurrentHashMap
2. HashMap
a. 存储结构
HashMap 的底层结构采用可扩容的动态数组,而数组中的每个格子里则存储着另一种结构,它有两种可能性:
当元素个数较少时,存储的是一个链表结构
当元素个数大于等于一个阈值(默认是8)时,存储的是一个红黑树(Java 8 才引入的),而在扩容中会去判断是否需要转换成链表结构
引入红黑树的目的是减少链表查找的时间开销,从 O(n){O(n)}O(n) 减少到 O(log(n)){O(\log(n))}O(log(n))
初始数组大小(capacity)
在 Java 8 中的 HashMap 的初始大小设置为 16,是 2n{2^n}2n 的整数次方,之所以选择 16,其实更多的是一种经验值,其实只要是 2n{2^n}2n 的大小都是合适的。
之所以选择 2n{2^n}2n 作为容量,当数组扩 ...
写在 2020 年前的技术趋势分享
是不是每天都在面对繁杂无比的业务代码,是时候出来走走,舒缓一下心情,浏览一下外面最前沿的技术趋势。
1. 容器安全
现在越来越多的应用是使用容器(Docker)进行部署在生产环境,容器由于比虚拟机更加轻量便捷,及其容易扩展的特点广受大家喜爱。于此同时,容器的安全问题也受到越来越多人的关注。
一种行之有效的做法就是在 CI/CD 的过程中对容器进行安全扫描。
trivy:容器漏洞扫描程序
trivy 是一个容器漏洞扫描工具,它可以检测出容器的操作系统以及应用所用依赖的漏洞和瑕疵,提早在生产环境中发现潜在的安全问题。
安装方法可以参考文章底部的链接,在安装完成后,其检查容器的命令是非常简单明了的。
12# 推荐不要检查使用 latest 标签的容器trivy [YOUR_IMAGE_NAME]
容器的二进制鉴证
除了容器的漏洞需要提防,容器有没有被篡改过也是一件值得关注的安全问题。
Google Cloud Binary Authorization 提供了二进制授权,只允许签名被认可的容器被部署。但其与特定云厂商绑定,不太适合所有的场景。
in-toto 用来保证软件生产环节中的安全性 ...
轻松管理不同的 Java 版本
是不是每次换新电脑或者安装了新系统,都要烦恼应该如何下载安装 Java 以及进行相应的配置?今天就来介绍一下如何从这种烦恼中解脱出来。
1. Java 版本控制工具
普通常规的安装配置方式除了步骤繁琐以外,最大的缺陷就在于不能支持 Java 版本的快速切换,其必须通过更改环境变量的方式进行版本切换。
针对以上的问题,我们需要选择一款 Java 版本控制工具,将我们从烦恼中解脱出来。以下是我找的几款工具:
sdkman: https://github.com/sdkman/sdkman-cli
jabba: https://github.com/shyiko/jabba
jenv: https://github.com/jenv/jenv
2. 抉择
考虑到工具的维护情况,本人选择了 sdkman 作为目前 Java 版本控制的工具。如果需要安装 Orcale JDK,可以考虑使用 jabba(sdkman 不支持下载),个人推荐安装 AdpotOpenJDK。
3. 配置 sdkman
由于本人使用的是 macOS 和 Ubuntu,下面的步骤都是基于这些系统,Windows ...
2019 软件工程师现状
热门工作(需求增长率)
区块链工程师(517%)
安全工程师(132%)
数据工程师(38%)
后端工程师(33%)
机器学习工程师(27%)
全栈工程师(7%)
最受欢迎的编程语言
Go
Scale
Ruby
TypeScript
Kotlin
最常使用的编程语言
JavaScript(62%)
Java(42%)
Python(42%)
HTML(36%)
C++(14%)
TypeScript(12%)
Ruby(10%)
Go(7%)
Scale(3%)
Kotlin(2%)
编程习惯
56% 喜欢使用 Tabs,而 24% 喜欢 Spaces
37% 喜欢动态语言,而 23% 喜欢静态语言
面试
经验为王
46% 有计算机科学教育文凭,而 21% 通过自学的方式获得计算机科学知识
最难的面试环节
编程测试
白板会议
行为面试
想学习的热门技术
机器学习
用户体验
区块链
工作方式
工程师最喜欢结对编程的工作方式
结对编程对初级工程师有好处,但对于有更多经验的人意义不大
工程师比较希望能够为开 ...
拍照指南--相机参数
参数讲解
ISO:感光度
提高 ISO(对光线更敏感)会使快门时间变快
高 ISO 值可以弥补光线的不足
ISO 值越高,相片的亮度就越高
缺点
高 ISO 会增加相片噪点
EV:曝光补偿,俗称补光
改变相片的亮度
EV 值每增加 1.0,相当于摄入的光线量增加一倍
EV 值每减小 1.0,相当于摄入的光线量减小一倍
快门速度(S):曝光时间
一般情况下 1/30 比较适合
光线较差时,可以适当提高快门时间
对焦模式
单次自动对焦(AF-S)
连续自动对焦(AF-C)
手动对焦(MF)
一般情况使用单词自动对焦;手动对焦模式极为实用,可以根据自己想要拍摄的效果,选择对应的焦距
测光模式:告诉相机哪里才是相片的重点
矩阵
中央重点
点测光
舞台摄影,个人艺术照,新闻特写照片等一般采用点测光,拍摄局部某块区域时选用点测光
WB:白平衡,控制色彩还原
可以单独调节色温
针对具体的拍摄场景,选择合适的白平稳
Python 2018 使用状况
最常用的 Python 版本
推荐使用 Python3 进行开发
Python3(84%)
Python2(16%)
安装 Python 来源
注意 Python3 和 Python2 安装可能存在差异,系统自带包管理可能默认安装 Python2
系统自带或者包管理安装(38%)
Python 官网(33%)
Anaconda(22%)
Python 版本控制
推荐使用 Virtualenv 来进行 Python 版本号的管理和切换
Virtualenv / pipenv(64%)
Docker(31%)
Conda(22%)
IDE
PyCharm(35%)
VS Code(16%)
应用领域
目前数据分析领域使用 Python 最为火热,而 DevOps 方向的增速十分快捷
数据分析(58%)
Web 开发(52%)
DevOps(43%)
机器学习(38%)
非 Python 语言使用
JavaScript(50%)
HTML/CSS(47%)
Bash / Shell(45%)
SQL(56%)
Web 框架
Flask(47%)
Dj ...
Java 2018 使用状况
最常用的 JDK
Oracle JDK(70%)
OpenJDK(21%)
IDE
IntelliJ IDEA(45%)
Eclipse IDE(38%)
Build Tool
Maven(60%)
Gradle(19%)
CI Tool
Jenkins(57%)
Travis CI(2%)
Test
JUnit(78%)
Mockito(45%)
非 JVM 语言使用
JavaScript(57%)
SQL(56%)
Web 框架
Spring Boot(40%)
Spring MVC(36%)
ORM 框架
Hibernate(54%)
MyBatis(6%)
Database
Oracle Database(27%)
MySQL(21%)
PostgreSQL(20%)
MongoDB(7%)
Application Server
Tomcat(41%)
Jetty(9%)
寻找答案
Stack Overflow(62%)
官方文档(41%)
[^note]
Largest Java Developer Survey 2018
htt ...