什么是 Viewport? viewport 是用户网页的可视区域。 viewport 翻译为中文可以叫做"视区"。 手机浏览器是把页面放在一个虚拟的"窗口"(viewport)中,通常这个虚拟的"窗口"(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分。 设置 Viewport 一个常用的针
1. 前言 消息队列是一个容器,可以对程序产生的消息进行存储。消息队列的主要用途是削峰、异步、解耦,我们用一个实际场景来解释下。 有一家果汁生产企业,张三是采购员,负责采购水果;李四、赵五是配送员,分别负责将苹果、香蕉配送到生产车间。 1.1 削峰 传统模式下,张三采购完成,回到公司后,联系李四、赵五配送采购的水果。但是随着公司业务量大增,张三一次性采购的水果,李四、赵五得需要几天才能配送完。所以
1. 前言 Redis 其实就是基于内存的键值型数据库,与 Oracle 、 SQL Server 、 MySQL 等传统关系型数据库相比,它最大的优势就是读写速度快。 到底有多快呢,我曾经使用 Windows 版本的 Redis 进行过真实测试,每秒读写次数均可以超过1 万次。据了解 Redis 每秒的读写操作次数其实是可以达到 10 万多次的。 所以 Redis 非常适合作为热点数据的缓存,这
1. 前言 Spring 最重要的两个功能,就是依赖注入(DI)和面向切面编程 (AOP)。 AOP 为我们提供了处理问题的全局化视角,使用得当可以极大提高编程效率。 Spring Boot 中使用 AOP 与 Spring 中使用 AOP 几乎没有什么区别,只是建议尽量使用 Java 配置代替 XML 配置。 本节就来演示下 Spring Boot 中使用 AOP 的常见应用场景。 2. 构建项
直播应用中,RTMP和HLS基本上可以覆盖所有客户端观看(参考:DeliveryHLS),HLS主要是延时比较大,RTMP主要优势在于延时低。 低延迟的部署实例参考:Usage: Realtime 应用场景 低延时应用场景包括: 互动式直播:譬如2013年大行其道的美女主播,游戏直播等等各种主播,流媒体分发给用户观看。用户可以文字聊天和主播互动。 视频会议:SRS的DEMO就有视频会议应用,我们要
为了实现在移动设备上的访问,这里就以riot.js为例做一个简单的Demo。不过,首先我们需要在后台判断用户是来自于某种设备,再对其进行特殊的处理。 移动设备处理 幸运的是我们又找到了一个库名为django_mobile,可以根据用户的User-Agent来区别设备,并为其分配一个移动设备专用的模板。因此,我们需要安装这个库: pip install django_mobile 并将'django
Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。 Hello world 现在让我们来试试 $ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world 刚才你启动了你的第一个容器! 那么刚才发生了什么? 我们逐步来分析 docker run 命令做了哪些事情。 首先,
Rails 是一个非常受欢迎的 Web 应用程序框架(从某种意义上说,是由于它被广泛应用而不是人们真正喜欢它)。 因此,在某些时候,你可能会被要求管理它。 本节要介绍的处方包含了安装一台运行 Rails 应用程序服务器所要做的绝大部分工作。 本处方假定你会使用 Nginx 和 Passenger 作为 Web 服务器, 然而你也可以轻松地修改本处方,使用 Apache 替换它。 操作步骤 创建 r
Appium 的核心理念之一是,你不应该为了测试而改变被测的应用程序。在这种理念中,可以使用像 Selenium 测试 Web 应用的方式去测试混合应用。Appium 需要知道你是想自动化应用的原生部分还是 Web 视图,这在技术上有一点复杂。但值得庆幸的是,我们可以继续使用 Selenium WebDriver 做所有的事。 一旦测试处于 Web 视图上下文之中,所有 Selenium WebD
让我们用async/.await建立一个回声服务器! 开始之前,运行rustup update stable,以确保你有 stable Rust 1.39 或更新的版本。一旦完成,就cargo new async-await-echo创建新项目,并打开输出的async-await-echo文件夹。 让我们将一些依赖项,添加到Cargo.toml文件: [dependencies] # The la
两个辅助指针变量挖字符串 //分清楚赋值指针变量和操作逻辑之间的关系 int splitString(const char *buf1, char c, char buf2[10][30], int *count) { //strcpy(buf2[0], "aaaaa"); //strcpy(buf2[1], "bbbbbb"); char *p=NULL, *pTmp =
自然语言处理 3.7 一面 差不多80min 3.14 二面 120min 我太菜了,许愿三面
应用逻辑漏洞不同于其他我们讨论过的类型。虽然 HTML 注入、HTML 参数污染和 XSS 都涉及到提交一些类型的潜在恶意输入,应用落地及漏洞实际上涉及到操纵场景和利用 Web APP 代码中的 Bug。 这一类型攻击的一个值得注意的例子是 Egor Homakov 对 Github 的渗透,Github 使用 RoR 编写。如果你不熟悉 Rails,他是一个非常流行的 Web 框架,在开发 We
HomeBrew & HomeBrew Cask Homebrew 是 Mac 下最好用的包管理器,推荐所有控制台应用都尽可能使用 brew 管理。 安装 HomeBrew: ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)” Homebrew Cask 是 Homeb
Rescue Time 记录你一周内的软件使用时间分配情况,以周为单位返回效率报告。 brew cask install rescuetime FlashLight Flashlight 是 Spotlight 的扩展工具,是 Alfred 的免费 clone。 源代码:w0lfschild/Flashlight 安装:brew cask install mysimbl flashlight。