关于
我的项目
热度排行
- [转] 宫崎骏用动漫教给我们的人生哲理,每一句都能说到心里! - (日期:[八月 24, 2013] 点击:[53,245])
- Google 网页爬虫报告无法连接站点解决办法 - (日期:[七月 20, 2014] 点击:[38,641])
- 架设Tiny Tiny RSS(TTRSS)阅读器,找回Google Reader! - (日期:[九月 27, 2013] 点击:[27,770])
- SkyDrive、DropBox和Google Drive三大公有云存储服务对比 - (日期:[六月 25, 2013] 点击:[25,575])
- 升级到至强E5440后,与i5 CPU笔记本性能对比 - (日期:[二月 18, 2014] 点击:[23,719])
- 公钥私钥加密解密数字证书数字签名详解 - (日期:[四月 19, 2014] 点击:[22,960])
- 本站建站技术合集 - (日期:[九月 20, 2013] 点击:[22,496])
- 使用OpenerDNS解决无法访问Google的问题 - (日期:[七月 5, 2014] 点击:[21,792])
- WordPress博客添加“返回顶部”按钮 - (日期:[七月 14, 2013] 点击:[21,206])
- Linux文件系统基础之inode和dentry - (日期:[三月 13, 2015] 点击:[20,167])
- 云存储中的HTTP鉴权算法分析 - (日期:[二月 7, 2014] 点击:[18,640])
- 存储基础知识之——磁盘阵列原理及操作实战 - (日期:[二月 9, 2014] 点击:[17,497])
- 精选37条强大的常用linux shell命令组合 - (日期:[九月 4, 2013] 点击:[17,429])
- DNS原理、架构和配置详解 - (日期:[九月 6, 2013] 点击:[16,803])
- Netty和Jetty的Java NIO 网络框架模型分析 - (日期:[七月 13, 2013] 点击:[16,334])
- CoreOS 初识之安装 - (日期:[十一月 16, 2014] 点击:[16,171])
- Windows与Linux文件系统互访的几种方法 - (日期:[八月 21, 2014] 点击:[15,734])
- Dijkstra算法求解最短路径分析 - (日期:[七月 12, 2014] 点击:[14,924])
- NAS解决方案实现多媒体文件共享播放 - (日期:[十二月 21, 2014] 点击:[13,916])
- 简介 - (日期:[九月 1, 2012] 点击:[13,757])
- 如何编程实现 2 + 2 = 5? - (日期:[六月 2, 2014] 点击:[13,269])
- 搭建了一个iNews程序 - (日期:[十月 15, 2013] 点击:[13,239])
- 2014年9月曝出的Bash ShellShock漏洞简析 - (日期:[九月 26, 2014] 点击:[13,140])
- 彻底解决WordPress博客垃圾评论的问题 - (日期:[八月 5, 2013] 点击:[13,091])
- 如何使用1M的内存排序100万个8位数 - (日期:[三月 27, 2014] 点击:[12,554])
- 全部日志列表 - (日期:[十一月 11, 2012] 点击:[12,332])
- 关于回调函数和this指针探讨 - (日期:[八月 24, 2014] 点击:[12,209])
- 给定一个long型常量,其值为x,给定long型变量a,要求a & x 的取值集合 - (日期:[九月 8, 2012] 点击:[11,704])
- WordPress建站必备实用插件 - (日期:[八月 7, 2014] 点击:[11,361])
- Amazon 云计算业务全面介绍 - (日期:[三月 9, 2014] 点击:[11,269])
分类目录
文章归档
- 2024年四月 (1)
- 2024年二月 (1)
- 2023年九月 (1)
- 2023年一月 (1)
- 2022年十月 (1)
- 2022年八月 (2)
- 2022年四月 (1)
- 2022年三月 (1)
- 2021年十二月 (2)
- 2021年十月 (2)
- 2021年九月 (1)
- 2021年八月 (1)
- 2021年五月 (1)
- 2021年三月 (2)
- 2021年一月 (2)
- 2020年十二月 (5)
- 2020年十一月 (2)
- 2020年十月 (2)
- 2020年九月 (1)
- 2020年八月 (5)
- 2020年七月 (2)
- 2019年九月 (1)
- 2018年八月 (1)
- 2018年七月 (1)
- 2018年六月 (1)
- 2018年五月 (1)
- 2018年三月 (1)
- 2018年二月 (1)
- 2018年一月 (2)
- 2017年十二月 (3)
- 2017年十月 (4)
- 2017年九月 (1)
- 2017年七月 (1)
- 2017年六月 (1)
- 2016年十二月 (1)
- 2016年十月 (1)
- 2016年九月 (1)
- 2016年七月 (2)
- 2016年六月 (1)
- 2016年二月 (3)
- 2015年十二月 (3)
- 2015年十一月 (2)
- 2015年十月 (1)
- 2015年八月 (2)
- 2015年七月 (4)
- 2015年六月 (1)
- 2015年三月 (2)
- 2015年二月 (1)
- 2015年一月 (4)
- 2014年十二月 (2)
- 2014年十一月 (2)
- 2014年十月 (5)
- 2014年九月 (8)
- 2014年八月 (11)
- 2014年七月 (17)
- 2014年六月 (7)
- 2014年五月 (15)
- 2014年四月 (16)
- 2014年三月 (14)
- 2014年二月 (5)
- 2013年十二月 (5)
- 2013年十一月 (3)
- 2013年十月 (13)
- 2013年九月 (13)
- 2013年八月 (13)
- 2013年七月 (9)
- 2013年六月 (8)
- 2013年五月 (1)
- 2013年三月 (3)
- 2013年一月 (1)
- 2012年十一月 (1)
- 2012年九月 (12)
- 2012年八月 (3)
- 2011年二月 (1)
- 2009年三月 (1)
- 2009年二月 (1)
- 2008年十一月 (1)
- 2008年六月 (1)
- 2008年四月 (1)
- 2008年三月 (1)
分类目录: 数据库
网传清华学子斩获6个互联网大厂Offer的面试题汇总
看到这些题目忍不住转过来,觉得能把这些都完整解答,功力不是一般深厚了。有具体的coding、大量算法还有一些常用的基础知识和原理等。
转自微信公众号:程序猿石头,PC版链接:羡慕,又一清华学弟斩获 6 个大厂 SSP Offer | 面经分享。
开源照片整理系统jAlbum 0.1.3版本发布
第三个版本,jAlbum完整版差不多完工了:https://github.com/shentar/jAlbum/releases/tag/jAlbum_0.1.3。
最后解决了文件系统监控的问题。利用Java1.7封装的文件系统的通知回调机制,实现对指定目录的递归监控,避免每次全盘扫描性能太低的问题。
注意对于linux系统对于单个用户能够监听的inotify对象个数做了限制,一般是限制为8192,因此需要修改系统内核的配置:在/etc/sysctl.conf文件中,新增一行:fs.inotify.max_user_watches=1000000,表明将该限制修改为100万个。下次重启后会生效,如果希望当前立即生效,则需要执行命令:sysctl –p 。
对于WatchService,只监控当前目录的变化,当前目录下新增文件或者文件夹时,当前文件夹会有修改事件或者创建事件,但是再下一层的文件夹或者文件发生变更时,并不会有任何事件,因此如果要监控指定的文件夹,需要递归监控到最后一层。没有验证文件系统的notify机制对进程性能和文件系统性能的影响,在树莓派上面简单验证了下,能够非常及时的发现新增文件,进程CPU和内存也没有明显的增加。终于解决了每次都有依赖全盘扫描一遍文件才能发现新增的文件的问题。
具体代码请参见源码中的DirWatchService类。
家用网络相册jAlbum安装使用指南
一、简介
在基于自攒的PC搭建了Home NAS系统之后,使用btsync工具将家里的各个终端的照片和视频集中备份到了Home NAS。主要是台式电脑、笔记本和家人的各个手机上面的照片、拍摄视频、微信聊天视频和朋友圈短视频等。备份好之后,发现各个设备上面的图片存放时并没有非常严谨的分类,并且有大量的重复照片,就想着做一个照片、视频管理系统放在Home NAS上面持续运行并提供相册服务。系统前端提供web访问接口,浏览器可以直接访问,后台生成一个简易相册库,以WEB页面的方式供各个终端查看和下载照片。 想到哪儿做到哪儿,并没有非常详尽的需求分析分析和软件设计。最终实现了如下功能:
- 实时监控和搜集指定目录的所有照片文件:jpg,png类型,所有视频文件:mp4。建立一张数据表,存储所有照片的路径、时间、指纹和长宽比等信息。
- 对1步骤生成的照片库根据照片的指纹值进行剔重,生成一张新的表,确保内容相同的照片只存一条记录。并且所有记录按照媒体文件的拍摄时间顺序排列。
- 提供RESTful的接口供浏览器访问和获取相册。提供分年、月、日的视图。在前端呈现上面直接使用Java生成web页面,没有用一些高级的Marker组件。
- 监控文件系统中新建、修改和删除文件,并实时更新媒体库。
- 支持mp4视频文件的呈现。(需要在本机支持ffmpeg和ffprobe命令,下载ffmpeg工具:ffmpeg.org,如果是Windows系统,则需要把exe文件直接放入C:\Windows目录下;Linux系统可以直接使用发行版的软件仓库安装该软件。)
- 新增后台同步照片到Huawei Cloud OBS、Amazon S3对象存储上面,Huawei Cloud OBS支持直接上传冷对象,可以节省约3/4的开支,Amazon S3则需要配置后台任务定期转换对象到冷存储,也可以达到节省开支的效果。按照当前的费率,备份30GB的多媒体数据,每个月的开销大约在¥1多。
- 使用Face++服务实现人像识别,并按照人像对照片进行归集。开启该功能需要根据Face++的提示获取访问API的密钥对。
- 安全方面:基于Cookies机制实现简易认证,可防止搜索引擎抓取私人照片;支持HTTPS访问(需要自行制作JKS格式的证书库并替代默认证书库)。
- jAlbum服务端支持运行在目前各个主流的操作系统:MS Windows、MAC OS和Linux上面,免安装部署。服务端只监控指定目录的照片和视频文件,不会破坏系统上的任何数据。客户端方面,支持所有平台使用浏览器访问,相册页面自适应PC和移动端浏览器。仅仅针对Android手机,提供app程序,在登录相册主页后有下载。
软件架构图:
二、源码获取
源码托管在此GIT服务上面:jAlbum(https://git.codefine.site:3000/Shentar/jAlbum) ,欢迎fork、提交issue和修改代码。
三、软件包下载
以下是适用于X86 Windows系统和Linux系统的软件包。0.3.1及之前的版本运行环境要求Java 1.8,JDK或者JRE都可以;0.3.2版本及其之后的版本仅支持JDK11环境。下载软件包后,解压缩,完成必须的配置即可运行。
版本 | 发布时间 | 更新说明 | 下载链接 |
0.3.3 | 27 Nov 2021 | 1、支持上报metrics到stastd-exporter。 | 下载 |
0.3.2 | 22 May 2021 | 1、升级JDK版本到JDK11; 2、升级Jetty版本; 3、支持HTTP2。 | 下载 |
0.3.1 | 24 Feb 2021 | 1、缩略图显示优化; 2、支持整合图片到单独目录; 3、支持本地自建的人脸识别服务。 | 下载 |
0.3.0 | 3 Mar 2018 | 1、支持使用Google Analytics跟踪访问记录; 2、解决若干已知bug。 | |
0.2.9 | 25 Nov 2017 | 1、支持备份数据到Huawei Cloud OBS对象存储。 | |
0.2.8 | 18 Nov 2017 | 1、支持HTTPS访问; 2、解决响应中重复HTTP头域Date和Expire问题; 3、解决鉴权Bug。 | |
0.2.7 | 19 Jul 2017 | 1、新增“风景”页; 2、使用Maven管理项目; 3、其他问题解决。 | |
0.2.6 | 19 May 2017 | 添加访问权限控制,相册放在外网访问时,发放token才能访问,避免照片被陌生人访问,如:搜索引擎抓取照片。 | |
0.2.5 | 7 May 2017 | 性能提升。 | |
0.2.4 | 3 Apr 2017 | 1、可靠性功能问题解决。 2、性能提升。 | |
0.2.3 | 17 Mar 2017 | 增加人像识别和按照任务归集照片功能。 | |
0.2.2 | 29 Jan 2017 | 1、增加后台同步照片到AmazonS3服务端实现。 2、修改若干重复文件检测bug。 | |
0.2.1 | 8 Jan 2017 | 解决问题:Chrome浏览器Ranges下载时第一个Range时不按照协议实现收取所有数据,最终在页面有多个Video时会导致浏览器挂死。单页面多个Video时,提取视频文件的缩略图呈现。 | |
0.2.0 | 6 Nov 2016 | 1、新增Video的支持,支持对MP4视频文件呈现; 2、修正稳定性和功能细节的bug。 | |
0.1.9 | 14 Aug 2016 | 1、PC端浏览器,增加键盘翻页,左方向键翻上一页,右方向键翻下一页。 2、改进“照片发现”性能,最快在20秒内新增照片可以呈现到页面上。 3、其他bug解决。 | |
0.1.8 | 5 Aug 2016 | 1、优化照片隐藏逻辑,当隐藏的照片被移动或者删除后又添加时,也不会被显示出来。 2、适配移动终端浏览器,实现触控滑动照片翻页。 | |
0.1.7 | 31 Jul 2016 | 自动识别图片的旋转角度,在前端呈现时自动适应浏览器并旋转到正确的方向。 | |
0.1.6 | 24 Jul 2016 | 修正若干bug。使用按钮代替超链接来导航相册。 | |
0.1.5 | 21 Jul 2016 | 1、增加前端照片旋转功能。 2、完善照片删除功能。 3、解决稳定性bug。 | |
0.1.4 | 18 Jul 2016 | 新增删除照片功能。在单张照片显示的页面上面可以点击删除链接“删除”该照片,该照片之后不会再显示,当然照片还存在于磁盘中,只是不再显示。 | |
0.1.3 | 10 Jul 2016 | 1、增加文件系统监控,利用文件系统的notify机制及时处理新的文件变更; 2、不再定时全盘扫描,只在启动时进行全盘扫描; 3、定时根据base表的变更情况刷新辅助表及时呈现新增照片。 | |
0.1.1 | 2 Jul 2016 | 1、支持缩略图; 2、优化编译脚本; 3、增加配置文件。 | |
0.1.0 | 23 Jun 2016 | first release. |
四、安装运行
4.1 源码安装
在Git仓库下载最新的版本的代码包,执行如下命令编译安装,注意需要使用JDK 11版本,其他版本未适配,不保证编译和启动成功 ^_^
cd jAlbum
mvn install
cd distribute
sh jalbum.sh start
如果是Windows系统则运行start.bat批处理文件启动,启动成功界面为:
4.2 直接下载Release包运行
直接下载编译好的软件包,参考软件包下载。
4.3 访问
服务端默认监听2148(http)和5443(https)端口,使用浏览器访问即可,如在本机访问,直接使用http://127.0.0.1:2148即可访问。针对android系统,在相册主页有apk可以下载安装,在设置界面指定服务端地址也可访问。
五、界面截图
最新版本主页截图:
视频合集页面截图:
根据人像识别结果进行照片归集页面截图:
六、升级
停止运行jAlbum,将新版本的软件包中根目录下的jalbum.xml、log4j.xml、keystore和dedup.db文件删除,然后将剩下的所有文件和目录覆盖到原运行目录。重新启动jAlbum即可。
七、配置
7.1 文件类型
7.1.1 照片
当前支持的照片文件类型有:
<picfilesuffix>
<suffix>jpg</suffix>
<suffix>jpeg</suffix>
<suffix>png</suffix>
</picfilesuffix>
将上述代码添加到jalbum.xml的config标签内即可。
7.1.2 视频
当前仅支持mp4文件的分析和呈现,并且需要先安装ffmpeg工具。在ffmpeg官方站点下载当前操作系统的工具,将ffprobe和ffmpeg可执行文件置于系统PATH变量所指向的路径下,如:C:\Windows目录下。jAlbum运行中会调用该工具分析MP4视频文件。 另外,在jalbum.xml内,picfilesuffix标签内增加如下内容:
<suffix>mp4</suffix>
7.2 文件大小
<minfilesize>51200</minfilesize>
<maxfilesize>512000000</maxfilesize>
此配置用于定制最小文件和最大文件大小。
7.3 指定目录
指定jAlbum监控的目录:
<inputdir>
<dir>D:\\</dir>
<dir>C:\\</dir>
</inputdir>
可以配置多个目录。注意Windows系统下,需要使用双斜杠来作为目录分隔符。 指定jAlbum排除某些特定目录,对于某些系统目录或者出于隐私保护而不希望呈现的目录,可以使用此配置排除监控:
<excludedir>
<dir>C:\\windows\\</dir>
<dir>C:\\Program Files\\</dir>
<dir>./</dir>
</excludedir>
指定缩略图存放目录:
<thumbnaildir>./thumbnail</thumbnaildir>
thumbnaildir标签用于指定缩略图文件存放的目录。
7.4 界面定制
maxpicsperonepage标签用于定制单个页面中显示的媒体文件的数量。
7.5 性能调优
threadcount标签用于定制任务并发数量。可以根据当前系统的CPU性能定制该数值。 hashalog用于定制计算照片文件和视频文件的HASH算法,常用的有MD5, SHA-256, SHA-1,一般而言HASH算法强度越高计算要求也越高,对于普通家用照片剔重,MD5比较合适。
7.6 人脸识别
首先需要到旷视科技申请API Key,然后在jalbum.xml中配置如下标签:
<Facer>
<ak></ak>
<sk></sk>
<facesetprefix></facesetprefix>
<maxfacescount></maxfacescount>
</Facer>
其中ak填写为API Key,sk填写为API Secret。facesetprefix为face set的前缀,当有多个应用使用同一个账号时,可以使用此前缀做区分。maxfacescount为相册人像主页上呈现的人物的个数。
7.7 数据备份
jalbum支持将数据备份到华为云对象存储和亚马逊的S3对象存储。当备份到华为云时,默认使用归档存储级别。两种备份目的端的使用是完全相同的。
<s3>
<bucketname></bucketname>
<ak></ak>
<sk></sk>
<useHttps></useHttps>
</s3>
<HuaweiOBS>
<bucketname></bucketname>
<ak></ak>
<sk></sk>
<useHttps></useHttps>
</HuaweiOBS>
其中,bucketname指定用于备份的容器,ak、sk分别为对象存储服务提供的访问凭据,需要到相应的对象存储服务上申请。useHttps指定是否使用https协议上传数据,为提高性能,如数据安全性要求不高,可以直接使用http协议传输。
7.8 访问记录
jalbum本身支持access日志,有log4j.xml配置。可以自行根据需要修改log4j.xml定制日志格式和存放目录。 另外,当相册在互联网上面开放访问时,可以配置Goolge Analytics,实现对访问进行统计。只需要将Goolge Analytics提供的ID写入如下配置:
<GoogleAnalyticsID></GoogleAnalyticsID>
如果配置为空,则不启用统计。
7.9 权限控制
当jalbum开放到互联网访问时,为了避免搜索引擎以及其它爬虫工具抓取照片,系统默认开启了需要输入Token方式来访问。 当不需要此权限控制时,可关闭Token访问,配置如下标签:
<accessAuth>true</accessAuth>
八、后台管理
8.1 权限管理
在开启权限控制时,相册提供后台页面和管理员登录方式来管理Token,启动后台备份和立即刷新数据等操作。
在本地登录时,可以管理Token,使用浏览器或者curl -X GET ${url}命令访问如下地址:
- 生成和获取当前系统的Token:http://127.0.0.1:2148/getToken
- 清除当前所有Token,并重新生成一批新的Token:http://127.0.0.1:2148/clearToken
- 清除指定Token,并重新生成新的Token,其中${token}替换成需要删除的Token:http://127.0.0.1:2148/removeToken?token=${token}
为安全起见,当前jAlbum本身只监听127.0.0.1上的http端口,如果需要外网访问,需要自行添加Nginx反向代理,推荐如下配置:
server
{
listen 5443 ssl http2;
server_name yourdomainname.com;
ssl_certificate /path/of/your/server/cert;
ssl_certificate_key /path/of/your/private/key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
location / {
proxy_pass http://127.0.0.1:2148/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr; # it is important to add this header.
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
}
location ~ /\. {
deny all;
}
access_log on;
}
8.2 数据管理
当使用管理员Token登录,或者在本地登录时:
- 系统在单独的照片页面会显示“隐藏”按钮,用于隐藏不需要显示的照片,被隐藏的照片不会备份到对象存储系统,隐藏的照片永久不再显示,但照片文件仍然存在本地系统盘上面。
- 当系统的数据与磁盘出现不同步到问题时,可以使用如下接口立即是同步硬盘数据与系统记录的数据: http://127.0.0.1:2148/flushnow
- 是否备份媒体文件到远端,需要访问如下地址触发,默认情况下,新增照片不会备份到远端。 http://127.0.0.1:2148/syncnow
Google Spanner 全球分布式数据库
原文地址:Spanner: Google’s Globally-Distributed Database
中文翻译版下载:Google Spanner 中文版
PPT演示文档:spanner-osdi2012.pptx
讲解视频:
Google 公布了分布式关系数据库F1的设计论文
该分布式关系型数据库基于Spanner,F1针对AdWords业务设计,兼具NoSQL的高可用性和扩展性,主要用来替代MySQL的集群。早期的时候已经有F1的介绍文档:幻灯片 F1 – The Fault-Tolerant Distributed RDBMS Supporting Google’s Ad Business
这一次,Google公布了其设计文档,阅读链接: