IFTTT 类似于一个自定义的触发器,和 Google Now,有异曲同工之妙,Google Now 能够实现的,是基于使用 Google 的数据,而 IFTTT 则是使用这个互联网的数据。稍微举几个例子, IFTTT 能够实现的神奇功能,原先可能需要自己操作很多才能实现的功能,IFTTT 可以自动化的完成。
比如, Gmail 收到一封带附件的邮件,你可能的操作就是查看邮件内容,下载附件,修改附件,然后回复邮件,而通过 IFTTT ,你可以设定一个触发,收到一份携带附件的邮件,自动将附件保存到 Dropbox ,这样当你查看邮件内容时, 可免去下载过程,直接修改本地文件,然后回复即可。https://ifttt.com/recipes/98759-save-all-your-gmail-attachments-to-dropbox
如果有人使用 Kindle ,会用 @Kindle.com 邮箱吧, 那我可以做一个触发,当我把文件保存到 Dropbox 下的 kindle 文件夹中的时候,自动将文件 通过 Gmail 发送到 @kindle.com 。
还有我想保存我加心的 Instagram 图片到 Dropbox ,我想同步 Blogger 等等,只要你能想到,只要这个平台够开放,IFTTT 就能实现。
Share broadcasted articles from Inoreader to Blogger https://ifttt.com/recipes/299846-share-broadcasted-articles-from-inoreader-to-blogger
Kindle 标注内容分享到 Goodreads 自动同步到 Evernote https://ifttt.com/recipes/278505-kindle-to-goodreads-to-evernote
Instagrams 加心的图片自动保存到 Dropbox https://ifttt.com/recipes/14475-save-the-instagrams-you-like-to-a-dropbox-folder
Instagram 点赞照片自动存入 Google Drive https://ifttt.com/recipes/301649-save-the-photos-you-liked-on-instagram-to-google-drive
保存新浪微博到 Google Drive spreadsheet https://ifttt.com/recipes/197676-track-all-posts-you-publish-on-sina-weibo-in-a-google-spreadsheet
自动同步特定 #hashtag 的推文到新浪微博 https://ifttt.com/recipes/301676-share-your-tweets-with-specific-hashtag-to-sina-weibo
当然官方也提供了很多,可以视自己的需求来添加自己的 recipes https://ifttt.com/recipes
可能是受 InoReader 的影响,我在使用 InoReader 的时候,产生了自动化的想法,可以依靠 IFTTT 来实现, 比如 InoReader 的广播文章自动发布到 Blogger, 因为 InoReader 集成了 Pinterest 所以我可以很方便的将文章图片保存到 Pinterest ,因此我有产生了一个想法,将 Pinterest 中的图片保存到云盘link。 InoReader 中有些文章,我加上 tag Evernote,我可以自动将这些文章备份到 Evernote。 当然作为一个深度 InoReader 用户,可能觉得会很方便。然而脱离了 InoReader , 其实 IFTTT 的应用场景也并不是那么的多。
当然应用的多少和平台的开放程度也密不可分,比如上面提到的 Pinterest ,它并不提供直接的 API ,而只是我们拿到了它的 RSS ,所以可以用来做一个触发器。 而打开 InoReader 的 Trigger 可以发现慢慢一屏幕可以作为触发器。
如何将网页文件保存到云盘?
网页上右击直接将文件保存到云盘 Google Drive , Dropbox 中 Chrome 插件 Balloon for Chrome https://chrome.google.com/webstore/detail/kbmligehjhghebleanjcmenomghmcohn
原文地址:https://docs.google.com/document/d/1GQIkkM_maAolbBp_hrJeDFjbsRvS5Il3s_eCxsj6CII/edit?usp=sharing
今天启动shadowsocks,突然发现本地1080端口被占用,原本是只要改一下配置中的本地端口即可,但是不想修改Chrome和Proxifier中的配置,所以就找了一下Windows查找下端口占用的方法。
##查看所有端口占用情况
cmd命令行下
netstat -ano
查看所有端口占用情况
##查看特定端口占用情况
cmd命令行下
netstat -ano|findstr "1080"
查看特定本地1080端口占用
以上两个命令中最后一列就是PID,程序对应进程ID,知道了进程ID,在任务管理器中杀死该进程即可,而在我的情况下就是NVIDIA的一个进程占用了1080端口,杀死该进程重启shadowsocks即可。
##查看PID对应进程
用以下命令查看PID对应进程
tasklist|findstr "5376"
查看PID为5376的进程名字,在我重启了shadowsocks之后就显示了以下
shadowsocks.exe 5376 Console 1 28,020 K
##附录
shadowsocks报错内容
Error: listen EACCES
##下载地址
i386是给32位机器使用的,而x86_64适用于64位机器。前者只能使用32位软件,后者可以兼用32位软件,这就是两者区别。如果你的服务器内存超4GB,强烈建议使用64位版本;如果只在虚拟机器里安装学习,那么32位就行了,也就是选择i386版本。如果想做服务器,则建议选64位。
http://mirrors.pubyun.com/centos/6.6/isos/
##版本区别
我们看到共分为LiveCD、LiveDVD、bin-DVD、bin-DVD和netinstall五种,分别作下介绍:
BinDVD版:这就是普通安装版,需安装到计算机硬盘才能用,bin版也是最完整的版本,一般都比较大,因为包含了大量的常用软件,安装时无需再在线下载。如果是安装到虚拟机里学习使用的,选它没错。
DVD1:基本系统+部分软件包。
DVD2:更多的软件包。
TrueCrypt 是一款功能强大的开源加密工具,利用 TrueCrypt 可以创建一个加密文件作为虚拟加密卷,将需要保护的文件保存在这个加密文件之中,也可以对硬盘分区进行加密,甚至是对系统分区进行加密。
下面我们一起来认识一下强大的 TrueCrypt。
首先到官方网站下载 TrueCrypt,进入下载页面之后,在 “Windows 7/Vista/XP/2000” 下方点击 Download 按钮下载 Windows 版本。
安装过程是英文界面,请按照以下的步骤进行安装:
创建加密文件/分区是 True Crypt 最基本的加密功能,两者统称为加密卷。在创建方法和使用方法上两者并无太大区别。
按照下述步骤创建加密卷。
选择第一项或者第二项,点击下一步继续。
这里选择第一项,后文将对隐藏加密卷这一功能做介绍。点击下一步继续。
加密卷需要挂载才能使用,请按以下步骤进行挂载:
挂载完成之后在资源管理器就可以看到加密卷了,使用加密卷与使用普通分区无异,解密处理自动在后台进行,对用户透明。
使用完这个加密卷之后请在 TrueCrypt 主界面下方点击“卸载”按钮卸载这一加密卷,以确保数据安全。
假如你需要修改加密卷密码的话,请先将加密卷卸载,然后点击“加密卷工具”按钮,在菜单中选择“更改加密卷密码”,然后在弹出的对话框中更改密码即可。
隐藏加密卷是一种迷惑入侵者、隐藏加密数据的方法,即是通过在加密卷中隐藏另一个加密卷来保护保密数据,如果你被强迫要求提供加密卷密码,可以提供外层加密卷密码,入侵者不能证明存在隐藏加密卷。
创建隐藏加密卷的步骤实际上与创建普通加密卷很类似,在创建加密卷向导第二步选择创建隐藏加密卷,然后选择创建隐藏加密卷模式,有以下两种模式可供选择:
此后步骤与创建普通加密卷类似,请按照向导操作即可。
挂载隐藏加密卷的方法是直接输入隐藏加密卷的密码,也就是说,载入的加密卷是外层加密卷还是隐藏加密卷是依靠输入的密码来决定的,而非先载入外层加密卷,再载入隐藏加密卷。
由于隐藏加密卷和外层加密卷共用空间,所以向外层加密卷写入数据可能破坏隐藏加密卷,所以在隐藏加密卷创建完成之后不要再修改外层加密卷的内容,如果需要修改请在挂载时对隐藏加密卷进行保护,以免导致隐藏加密卷被破坏。方法如下:
在挂载外层加密卷输入密码时,点击“加载选项”,在弹出的“加载选项”对话框中选择“向外层加密卷写入数据时保护隐藏加密卷”,然后输入隐藏加密卷密码加载即可对隐藏加密卷进行写入保护。但是应该注意的是保护隐藏加密卷会使别人很容易发现隐藏加密卷,因为 TrueCrypt 中显示的加密卷类型是“外层”。
在对系统分区进行加密之前请做好以下的准备工作:
请按照以下步骤进行设置:
此处我们选择第二项,点击下一步继续。
请根据自己的需要选择,点击“下一步”继续。
假如你需要对加密的系统进行解密的话,运行 TrueCrypt,选择“系统”菜单中的“永久解密系统分区/驱动器”,确认之后即可开始解密。
TrueCrypt 是一个既专业又易用的加密软件,可以为本机的机密数据提供高质量的加密保护,推荐对数据安全有较高要求的朋友使用。
2011 年 3 月 20 日:初稿完成 2011 年 8 月 13 日:精简文字,调整结构
原文地址:加密入门(三):TrueCrypt http://terrychen.info/encryption-truecrypt/
Gpg4win 是一款基于 GPG 的非对称加密软件。非对称加密方式,简单理解就是用公钥加密文件,用私钥解密文件。如果你需要发送加密信息,首先获取接收者的公钥,然后利用该公钥加密后传递,对方利用对应的私钥就可解密。也就是说,公钥是锁,私钥是钥匙。非对称加密方式很好地解决了传递机密信息的问题。
GPG,又称为 GnuPG,全称是 Gnu Private Guard,即 GNU 隐私卫士。GPG 是以 PGP 算法为核心的强大的加密软件。但 GPG 项目是一套命令行程序,而且是为 Linux 等开源操作系统设计的。好在开发者为 GPG 开发了许多图形前端并将其迁移到 Windows 平台,Gpg4win 就是 Windows 平台 GPG 及图形前端的集合安装包,本文将介绍 Gpg4win 中图形前端的使用方法,不会涉及 GPG 的命令行使用方法。
首先到官方网站下载 Gpg4win,进入下载页面之后点击下载按钮即可下载。
在开始安装 Gpg4win 之前,我们先来了解一下 Gpg4win 是由哪些组件组成的。Gpg4win 的核心是 GPG,并包括 Kleopatra、GPA、GpgOL、GpgEX 和 Claws Mail 五个相关工具,其中 Kleopatra 和 GPA 是 GPG 的密钥管理器,用于生成、导入和导出 GPG 密钥(包括公钥和私钥),GpgOL 是 Outlook 2003 和 2007 的 GPG 支持插件,GpgEX 是资源管理器的 GPG 支持插件(不支持 Windows 64 位),Claws Mail 则是一个内置 GPG 支持的邮件客户端。本文将介绍 Kleopatra 和 GpgEX 的使用方法。
运行 Gpg4win 安装程序,选择安装组件时建议修改默认设置,默认 Gpg4win 将安装 GnuPG 核心、Kleopatra、GpgOL、GpgEX 以及支持文档(英文和德文)。我推荐只选择 Kleopatra 和 GpgEX。
其余的安装过程保持默认设置即可。安装完成之后安装程序会要求设置信任的根证书,勾选下方的“Root certificate defined or skip configuration”(根证书已定义或跳过设置),该设置只对 S/MIME 加密造成影响,而通常我们使用的是 OpenPGP 标准,即 PGP 算法。最后结束整个安装过程即可。
GPG 作为非对称加密软件,进行加密解密之前必须生成密钥对,也就是生成对应公钥和私钥。请按以下步骤使用 Kleopatra 生成密钥对:
生成密钥对之后,我们必须导出公钥,请按以下步骤导出公钥:
除此之外,菜单中其他两项导出选项含义如下:
导入公钥可以通过 File(文件)菜单中的 Import Certificates(导入证书)选项进行,也可以直接利用拖拽操作将公钥文件拖到 Kleopatra 的密钥列表,然后在弹出的菜单中选择 Import Certificates(导入证书)即可。
对于导出到服务器的公钥,选择 File(文件)菜单中的 Lookup Certificates on Server(在服务器上搜索公钥)选项,输入 Email 地址点击 Search(搜索)按钮就可以找到对应的公钥,点击 Import(导入)按钮就可以导入公钥。
##4. 加密解密文件
导入公钥之后,我们就可以加密文件了。启动加密操作向导有三种途径,一种是在 Kleopatra 主界面中选择 File(文件)菜单中选择 Sign/Encrypt Files(签名 / 加密文件),一种是将要加密的文件或文件夹拖拽到 Kleopatra 主界面中,然后在弹出的右键菜单中选择 Sign/Encrypt(签名 / 加密),一种则是在想要加密的文件或文件夹的右键菜单中选择 Sign and encrypt(签名与加密)。这三种途径没有本质区别,除了第一种途径无法选择文件夹因此只能加密文件。下面对加密向导进行介绍:
接收到已经加密的文件之后应该怎么解密呢?方法和加密非常类似,也是通过向导完成的。启动解密向导的途径同样有三种,一是在 Kleopatra 主界面中选择 File(文件)菜单中选择 Decrypt/Verify Files(解密 / 验证文件),一是将要解密的文件或文件夹拖拽到 Kleopatra 主界面中,然后在弹出的右键菜单中选择 Decrypt/Verify(解密 / 验证),一种则是在想要解密的文件或文件夹的右键菜单中选择 Decrypt and verify(解密和验证)。
以上述任意一种方式启动加密向导,点击解密向导对话框的 Decrypt/Verify(解密 / 验证)按钮,假如弹出对话框,请输入你的私钥的 Passphrase,输入之后点击 OK 就可以使用你的私钥进行解密了,注意在本用户对话期间你再次使用私钥是不需要输入 Passphrase 的,也就是说,使用私钥之后最好注销一下以保证安全。
GnuPG 和其他加密工具相比,其非对称性加密的特点使其更适合于机密信息的传递。除了加密解密之外,GPG 还可以对文件进行签名和验证,功能非常强大。而且由于 GPG 图形化前端功能的日益完善,GPG 的使用已经不再困难,Gpg4win 已经可以成为大众的加密工具。
2011 年 4 月 4 日:初稿完成 2011 年 8 月 13 日:精简文字
原文地址:加密入门(四):Gpg4win http://terrychen.info/encryption-gpg4win
EFS 是 Encrypting File System 的缩写,意为加密文件系统,是 NTFS 文件系统的内建安全功能,Windows XP 之后的版本都完全支持这一特性(注意:Windows 入门版、家庭版和家庭高级版并不支持这一功能)。
EFS 的最大特点是简单易用,因为 EFS 是基于用户帐户的加密方案,也就是说只有用对文件进行加密的用户帐户登录才能使用,尽管这种加密方案存在着诸多缺点与限制,但是无疑是最简单的加密方案,用户只要能进入自己的账户即可访问,无需记忆多余的密码。
EFS 必须在 NTFS 分区才能使用,如果硬盘分区是 FAT32 分区格式,请按照以下步骤转换为 NTFS 分区格式:
注意不要在转换过程中关闭命令提示符窗口,以免造成数据丢失。
使用 EFS 加密非常简单,仅需三步即可完成:
如果将未加密的文件复制到 EFS 加密的文件夹中,这些文件将会被自动加密。如果将加密数据移动或复制到其他 NTFS 分区时,数据依旧保持加密属性,如果将其移动或复制到 FAT32 分区时,Windows 会询问是否解密,确认之后 Windows 会将其解密后复制或移动。
加密之后的文件或文件夹在资源管理器中将以绿色文字显示,如果你使用加密时所用的用户身份登录,那么 Windows 会在你访问这些加密数据时自动解密。但是对于攻击者来说,加密数据是无法读取修改的,因为这些数据已被 Windows 加密。
如果需要将 EFS 加密的数据解密,只要按照上述步骤取消“加密内容以便保护数据”选项即可。
由于 EFS 与用户帐户绑定,所以强烈推荐大家导出 EFS 数据恢复密钥,以免 Windows 出现问题导致加密数据无法访问。请按以下步骤导出数据恢复密钥。
请按照以下步骤导入数据密钥:
EFS 作为一种简单的加密手段,适合对于数据安全要求不高的用户使用,对于数据安全要求较高的用户来说,BitLocker 或者更为专业的加密软件无疑是更好的选择。
2011 年 3 月 11 日:初稿完成 2011 年 8 月 13 日:将 EFS 与 Bitlocker 拆分为两篇文章,并进行改写。
不知为何,原博客已经无法访问,我根据 Google Cached 将文章做备份。感谢 InoReader 帮我缓存了这么好的博客。
原文地址:加密入门(一):EFS http://terrychen.info/encryption-efs/
BitLocker 是 Windows 7 提供的基于分区的加密方式。BitLocker 不仅仅可以加密本机硬盘分区,还可以加密移动硬盘、U 盘、SD 卡等移动存储设备。不过为了保证加密后的移动存储设备在 Windows XP 下面可以正常访问,请将其格式化为 FAT32 文件系统。
BitLocker 定位于商务用户,微软只在 Windows 7 企业版和旗舰版提供这一功能,使用之前请检查 Windows 版本。
本文操作只涉及本地硬盘非系统分区及移动存储设备。加密系统分区需要 TPM 支持,或者通过 U 盘启动,在此不作详细介绍,具体设置请参阅 http://blogs.technet.com/b/xiwang/archive/2009/05/19/windows-7-bitlocker.aspx。
请按照以下步骤对驱动器进行加密:
BitLocker 加密过程较为缓慢,请耐心等待,假如需要暂时移除移动存储设备,请暂停加密,以免造成数据丢失。
在 Windows 7 中插入 BitLocker 加密的驱动器,Windows 会自动弹出对话框让你输入密码,正确输入密码后就可以正常使用,而且使用时对性能的影响很小。
经过 BitLocker 加密之后的驱动器的图标与普通驱动器不同,Windows 7 会以不同颜色的锁和钥匙图标来反映目前的存储器状态,其中灰色代表加密的磁盘已经解锁,黄色则是未解锁。
对于已经使用 BitLocker 加密的驱动器,我们可以修改 BitLocker 密码和解密驱动器。
在 Windows 资源管理器中右击已经使用 BitLocker 加密的驱动器,选择“管理 BitLocker”,在此处我们可以修改 BitLocker 密码。
在开始菜单搜索框中输入“BitLocker”,选择“BitLocker 驱动器加密”选项,然后在相应驱动器处选择“关闭 BitLcoker”即可对驱动器解密。
只有 FAT32 格式的移动存储设备在使用 BitLocker 加密之后能在 Windows XP 中读取,在 Windows XP 中双击加密分区,Windows 会要求输入密码,输入密码之后会弹出 BitLocker To Go 阅读器允许你读取加密分区中的文件,不过只能读不能写。
BitLocker 是一种比较简易的加密方式,推荐安装了 Windows 7 旗舰版或企业版的朋友一试。
2011 年 3 月 11 日:初稿完成 2011 年 8 月 13 日:将 EFS 与 Bitlocker 拆分为两篇文章,并进行改写。
原文地址:加密入门(二):BitLocker http://terrychen.info/encryption-bitlocker/
如今,我们的生活充斥着各色各样的密码。所谓密码管理器,就是用一个主密码来保护所有其他密码。使用密码管理器,可以减轻记忆负担,而且只要在主密码不泄漏或者遗忘的情况下,我们的账户安全就能够得到保障。
本文所要介绍的 KeePass 就是一款出色的密码管理器,KeePass 具有以下优点:
下面,我们一起来学习如何使用 KeePass。
KeePass 有经典版本 1.x 和专业版本 2.x 两种版本,主要有如下两点区别:
由于 KeePass 2.x 功能更为全面,我推荐大家选用这一版本。下文将以 KeePass 2.x 版本为例进行讲解。
访问 KeePass 官网下载页面 http://keepass.info/download.html ,左栏的 Classical Edition 为 KeePass 1.x 版本,右栏的 Professional Edition 为 KeePass 2.x 版本,每一栏中都有两个下载链接,分别是 Installer EXE for Windows 和 ZIP Package,即安装程序和移动版本,请按照自己的需要选择下载。
KeePass 的安装过程非常简单,按照提示安装即可。
安装 KeePass 完成之后,请访问 http://keepass.info/translations.html 下载中文语言包,页面中 Chinese, Simp. 即是简体中文语言包(五星红旗处),注意选择对应版本语言包。下载解压之后将 KeePass 的语言文件(*.lngx)复制到 KeePass 的安装目录。复制完成之后启动 KeePass,选择 View 菜单,点击 Change Language,在弹出的对话框中选择 Simplified Chinese,KeePass 将要求重新启动,点击 Yes 重新启动 KeePass 即可。
对于 Ubuntu 用户,请参阅如何在 Ubuntu 中安装 KeePass 2 进行安装设置。
开始使用 KeePass 之前,首先需要创建密码数据库以保存密码,步骤如下:
三种方式可以叠加使用,但是推荐大家使用主密码的方式进行保护。
此处将以 Gmail 为例讲解如何保存密码和自动输入,步骤如下:
运行 KeePass,点击添加记录(或者按下 Insert 键),弹出添加记录对话框。
在记录标签页中需要填写的项目主要有以下几项:
在自动输入标签页,还可以勾选双通道自动输入混淆选项,以阻止木马通过键盘记录窃取你的密码,但是只有支持 Ctrl + V 快捷键粘贴的窗口才能使用。 设置完成之后启动浏览器(如果设置网址的话可在选中相关条目后按下 Ctrl + U 启动),按下快捷键左 Ctrl + Alt + A(注意关闭中文输入法),KeePass 将自动输入密码并登录 Gmail。除此之外还可以先选择浏览器窗口,然后调出 KeePass(快捷键左 Ctrl+Alt+K),在相应密码条目右击,选择执行自动输入,KeePass 就会自动输入账户密码,注意 KeePass 是按照前一焦点窗口的原则选择输入窗口的,所以请保证前一焦点窗口是正确的。
由于 KeePass 按照 {USERNAME}{TAB}{PASSWORD}{ENTER} 的序列输入密码的,一些网站或者软件不能正常登录。例如 TM 启动之后默认焦点是在密码输入框处,使用默认序列会出错。这时我们可以通过自定义自动输入序列来解决这一问题。
首先参照上述方法建立新密码条目,标题填入 TM,网址填入 CMD://”C:\Program Files\Tencent\TM2009\Bin\TM.exe”(由于目录中含有空格,因此必须包括英文双引号)。然后切换到自动输入标签页,勾选替代默认规则后,在输入框中输入以下内容:
+{TAB}{USERNAME}{TAB}{PASSWORD}{ENTER}
现在切换到 TM,按下左 Ctrl + Alt + A 即可自动登录。QQ 的设置与之类似,只要注意标题改为 QQ 即可。
下面我来介绍一下自动输入序列,默认输入序列是{USERNAME}{TAB}{PASSWORD}{ENTER},其中{USERNAME}是用户名,{PASSWORD}是密码,{TAB}是 Tab 键(用于切换焦点),{ENTER}是 Enter 键。一些特殊键的对应表可见官网文档 http://keepass.info/help/base/autotype.html#autoseq ,上面所用的 + 所对应的就是 Shift,和 Tab 组合之后可以跳到前一个输入框从而输入用户名。知道特殊键对应和写作规律之后我们也可以按照自己的情况写作特殊的自动输入序列。
在新建密码条目时,点击确认密码文本框右侧的生成密码,选择打开密码生成器,就可以打开如下图所示的密码生成器。
在密码生成器中可以对密码生成方案进行配置,如密码长度、密码组成等等,设置完成后点击确定回到添加记录对话框,点击密码文本框右侧的用星号 显示 / 隐藏密码按钮,将密码复制出来用于注册,最后按照通常步骤添加密码记录即可。
上面就是使用 KeePass 的一些基本方法,除此之外,KeePass 还具有插件机制,请大家自行探索。
2011 年 4 月 26 日:初稿完成 2011 年 5 月 1 日:第一次修改 2011 年 8 月 11 日:将标题由“KeePass 使用全攻略”修改为“KeePass 教程”,删除“KeePass 插件使用”一节,并精简文字。
原文地址:KeePass 教程 http://terrychen.info/keepass-tutorial/
Java 的注释,单行,多行的语法就不在赘述了。
给 Java 源码文件书写注释,使用常见的 Java 注释可以实现一些,也可以通过如下的 Javadoc 的 Tags 来实现一些特殊的比如跳转,参数返回值等特殊标记。
javadoc 标记有如下一些:
不过已经不建议在 Java 源文件中使用 @author
标记,现代的 git 完全能够满足模块作者的追溯,甚至可以精确到每一行的作者。
@see
允许用户引用其他类的文档
@see classname
@see fully-qualified-classname
@see fully-qualified-classname#method
see 也可以使用一个超链接
/**
* @see <a href="https://docs.oracle.com/en/java/">Java Dcoumentation</a>
*/
@link
是 inline
tag
上面的方法可以给类,方法,参数等等编写注释,如果要给一个包添加注释,就需要额外添加 package-info.java
的文件。
从 Java 1.5 版本开始可以在包下新建一个名为 package-info.java
的文件,在这个文件中可以使用标准 Java 注释来给 package 书写文档:
com/foo/package-info.java:
/**
* com.foo is a group of bar utils for operating on foo things.
*/
package com.foo;
//rest of the file is empty
如果要在 javadoc 中书写代码,尤其是想要展示一些例子的时候,不可避免的会用到 <
, >
以及 @
等等特殊的符号。Javadoc 默认是 html 的 tag 来渲染格式,所以这种情况下有 <pre>
和 <code>
选择,然后 javadoc 还提供了 {@code}
语法。这三个方式都可以用来注释代码,但各自又不相同。
<pre>
标记是 html 默认的格式化标签,如果使用 <pre>
标签,那么所有的 html 的标记都需要转义。
/**
* <pre>
* public class JavadocTest {
* // indentation and line breaks are kept
*
* @SuppressWarnings
* public List<String> generics(){
* // '@', '<' and '>' have to be escaped with HTML codes
* // when used in annotations or generics
* }
* }
* </pre>
*/
public class PreTest {}
Java 安装完成之后在 Java Path 的目录中自带了 javadoc 这个命令行,如果不想使用 maven-javadoc-plugin 可以使用这个命令来生成 javadoc.
用法:
javadoc [options] [packagenames] [sourcefiles]
选项:
Intellij 默认会在创建文件的时候给文件添加一些注释,这些注释可以在如下的设置中修改:
File -> Setting -> Editor-> File and Code Template-> File Header
本文为《深入理解 Java 虚拟机》的笔记。
Java 虚拟机规范中定义了一种 Java 内存模型,用来规避各种硬件和操作系统的内存访问差异,让 Java 在各种平台下都能达到一致的并发效果。Java 内存模型的主要目标是定义程序中各个变量的访问规则,在 JVM 中将变量存储到内存和从内存中取出变量这样的底层细节。
Java 内存模型的目标是定义程序中各个变量的访问规则,这里的变量 Variable 包含了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量和方法参数,因为后者是线程私有的,不会被共享。
Java 内存模型规定所有变量存储在主存 Main Memory 中,每个线程都有自己的工作内存 Working Memory。线程的工作内存中保存了被该线程使用到的主存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写内存中变量。不同线程无法访问对方工作内存的变量,线程间变量传递需要通过主存来完成。
主存和工作内存之间定义了如下的操作。
定义了这些操作之后,就有一些规则,必须满足。
volatile 是 Java 虚拟机提供的最轻量的同步机制。当变量定义成 volatile 后,具备两种特性:
为了提升执行速度,计算机在执行代码的时候会对指令进行重排序。
包括:
指令重排序,指的是 JVM 优化指令执行的顺序,提高程序的运行速度,在不影响单线程程序执行结果的前提下,尽可能提高并发。
在 JDK1.5 之后,使用 volatile
变量禁止指令重排序。针对 volatile 修饰的变量,在读写操作指令前后会插入内存屏障,指令重排序时不能把后面的指令重排序到内存屏
double pi = 3.14;
double r = 2.1;
double area = pi*r*r;
代码在执行时,1->2->3,或者 2->1->3 对结果并没有影响,编译和运行时可能对 1,2 语句进行重排序。
JVM 内存屏障插入策略: