首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

干货 | 从资深软件工程师学到避坑大法

每次代码审查时都问自己:「他们为什么这样做?「。每当我找不到合适答案时,就会去和他们谈谈。 在第一个月后,开始在同事代码中找到错误(就像他们对代码做一样)。...这里想法是尝试捕获单元和系统测试无法捕获错误。例如,请求系统和响应系统之间 API 不匹配。个人项目小公司情况大不一样。不是每个人都有资源来搭建自己设备。...这可以防止组件之间出现差异,保持整个代码「现代化」; 确保一直修剪你不想要/旧东西。 部署 将功能进行捆绑部署还是逐个部署呢?如果答案是将功能捆绑在一起,则会出现问题。...在你集群中出现一台「垮掉」机器也应当是同样做法——在试图找出机器出了什么问题之前,先把它停了,并标记它不可用。...如果不知道 bug 在哪就不能修改错误。其中一种最糟糕感觉是从客户那里知道有 bug。 「做了什么?!甚至不知道系统出了什么问题?」

55620

八种最常见Docker开发模式 别说你还不知道

Docker已迅速成为本人最喜欢基础工具之一,以便构建可重复软件产品,从而带来尽可能静态服务环境。   在本文中将概述在使用Docker过程中开始反复出现几种模式。...就许多应用程序而言,它让可以让与合适基于文件-系统-变更代码重载一起运行应用程序处于开发模式,那样容器就可以封装操作系统/发行版层面的依赖项,并且帮助证实捆绑应用程序在原始环境中运行,用不着针对每处代码变更...过去开发系统方面很烦人问题之一是,开发及生产依赖项开发工具依赖项很容易混在一起。你可以试着将它们分开来,但除非这些设置真正做到了分离开来,否则很容易建立未记录依赖项。   ...试图保持精简,但问题是,屏幕会话可以驻留在这个容器中,结合那台笔记本电脑上设置“autossh”,几乎总是有一条连接容器相连,那样就可以编辑与我其他开发容器“实时”共享代码。   ...一个指向主服务通配符DNS项,一个iptable项允许访问我haproxy容器。Docker文件没什么特别之处: ?

1.4K60
您找到你想要的搜索结果了吗?
是的
没有找到

2020年部署Web应用4种方式

前言 我们看到越来越多的人将他们想法倾注到网页上。我们所指这些人可能不熟悉网站设计和发布技术细节,因此在建立他们平台(网站)时可能遇到一些问题。使用什么托管服务?如何设置DNS和SSL?...缺点: 它是一个非托管服务。 您需要定期确保服务正在运行、SSL已锁定、有安全补丁或具有internet访问权限。 您需要手动解决所有操作问题。例如,如果出现错误,则由您跟踪并修复它。...这意味着没有从远程位置获取任何文件都将丢失,这对于大型测试(具有大量输入或基线字段)效果不佳。 3、Travis-CI/ Circle-CI Travis-CI是社区中著名CI服务机构。...repos不能在Travis上直接修改[你可以,如果你付钱的话…,所以每次[甚至]需要做一个调整时都去到存储库中文件是相当麻烦建立建立矩阵travis.yml文件相当困难。...4、自动化云平台 最后,对于一个完整而简单自动化解决方案,我们可以选择许多自动化云平台中一个。[其中,个人更喜欢男招待,但这完全是主观

2.8K20

此情可待成追忆:Java Mac 版黄金时代

当我第一次发布这款工具 Windows 版本时,由于 Windows 市场远大于 Mac 市场,所以我预期销量大幅增长。...如果可以重构代码,让 UI 完全模块化,那么就有可能在这些替代编译中编译业务逻辑,并将其一个 UI 工具包(比如 SWT、QT 或 Cocoa)配对。 发现 GCJ 输出很难处理。...正准备写自己捆绑,这时开源社区出现并拯救了。...一位名叫“InfiniteKind”好心开发者开发或复刻了一个应用捆绑,它可以 JDK7 一起使用,并包括一些调整以满足苹果 App Store 要求。...猜想,如果没有这种渠道,那些从 App Store 购买用户也会在网站上购买,因此,这其实就是在转移销售来源。App Store 销售额每年都会有一定增长,但同时网站销售额会下降。

74420

攻防|记一次社工钓鱼全过程

诱导被害者点击加载,加载自动下载VPS上木马图片。 加载解密木马图片中shellcode,并将解密后shellcode注入到内存中,从而实现上线。...最终,选定了压缩捆绑这种方法。 压缩捆绑基本原理是制作一个看似合法简历文件,并将加载与其捆绑在一起。这样,当受害者下载并解压缩文件时,他们很可能会下意识地点击并查看简历,从而执行加载。...压缩捆绑步骤是先制作一张简历shellcode加载 然后同时选中点击加压,然后再加压界面选中创建自解压格式压缩文件 然后选中高级 -> 自解压选项 在设置中提取后运行这里将加载名称写进去...也试过在VPS上启一个服务让HR去服务上下载,但是这可行吗? 后来只想到一个办法,就是在exe捆绑外面再加一层压缩文件,这样可以让HR觉得更合理。...开始思考,是不是在某个环节出了错误,或者免杀马被发现了,或者还有其他问题发生了... 当我主动发送了一条消息后,发现监控端终于出现一个会话上线提示。

43650

攻防演练 | 记一次社工钓鱼全过程

诱导被害者点击加载,加载自动下载VPS上木马图片。 加载解密木马图片中shellcode,并将解密后shellcode注入到内存中,从而实现上线。...最终,选定了压缩捆绑这种方法。 压缩捆绑基本原理是制作一个看似合法简历文件,并将加载与其捆绑在一起。这样,当受害者下载并解压缩文件时,他们很可能会下意识地点击并查看简历,从而执行加载。...压缩捆绑步骤是先制作一张简历shellcode加载。 然后同时选中点击加压,然后再加压界面选中创建自解压格式压缩文件。 然后选中高级 -> 自解压选项。...0x03 垂钓开始 然后当我点击简历投递时候,发现该网站不支持自己编写简历,只能从网站上进行编写。。。...开始思考,是不是在某个环节出了错误,或者免杀马被发现了,或者还有其他问题发生了... 当我主动发送了一条消息后,发现监控端终于出现一个会话上线提示。

60220

使用 Linux 软件包管理 5 个理由

在 Linux 上,建议你不要去网站上找应用安装程序。取而代之是,运行一个命令,应用就会被安装到系统上,并记录每个单独文件、库、配置文件、文档和媒体资产。 什么是软件仓库?...更糟糕是,如果不仔细跟踪,就不能保证所有的文件都会在重装过程中被刷新,因为通常没有办法知道应用程序一起安装所有文件在第一时间就删除了。...在还没有改用 Linux 之前,在处理工作用媒体文件时遇到错误,或者在玩不同游戏时出现故障,或者在阅读 PDF 时出现怪异现象,等等,这些都不是什么稀奇事情。...当时花了很多时间去调查这些错误仍然记得,系统上有两个主要应用分别捆绑了相同(但有区别)图形后端技术。当一个程序输出导入到另一个程序时,这种不匹配导致错误。...它本来是可以工作,但是由于同一个文件集合旧版本中一个错误一个应用热修复程序并没有给另一个应用带来好处。

56220

探寻ASP.NET MVC鲜为人知奥秘(1):对LESS支持

")"> Why 刚开始没有什么问题,而随着我们项目的越来越大,需要引入资源文件越来越多时候,我们就难免遇到以下这些问题: 需要在Production环境将这些文件替换为压缩版本...首先,当我们开启了Optimizations开关后,当Web.config文件System.Web/Compilation@debug设置为false时候(在生产环境下,需要设置为false),我们在浏览端获取到资源文件将会是经过压缩和捆绑...这样做好处是: 减少了服务流量,给服务退烧(通过压缩) 自动缓存资源文件,服务端不更改的话,不会重新加载(通过缓存机制) 由于大多浏览限制了对一个host同时连接数量,所以加快了网站访问速度...(通过捆绑) 以下是一个简单示例,这里用一个新建ASP.NET MVC项目进行演示: 在新建一个MVC项目后,打开App_Start/BundleConfig.cs文件,可以看到一个静态RegisterBundles...~/bundles/bootstrap“是一个虚拟路径,当我们在View文件中引用时候,实际加载是"~/Scripts/bootstrap.js"和"~/Scripts/respond.js"两个文件

1.2K60

一台二手电脑引发离奇“黑客”故事

所以,当我启动电脑看到别人名字跟Hotmail地址出现在登录弹窗时,真正理解了销售说“跟新没什么两样”是什么意思! 当我凝视着之前电脑主人——David全名跟电子邮件地址时,陷入了深思。...15年前,可能得从电脑中把硬盘驱动拉出来,摆弄好然后重新放入另一个地方。然后就能浏览文件并且尝试破解密码。10年前,不得不把硬盘驱动放到一个USB盘里。...而且,不要忘记,他们可能已经查看了他浏览历史并访问了所有将密码存储在浏览网站确实犯了一个错误。...这是准盗贼发财机会啊,如果盗贼有能力搜索David这个账户用于哪些网站的话。 多数人多次使用用一个密码,所以它给了盗贼一个绝佳机会。...虽然无意成为世界上最坏黑帽黑客,但当我发现这张字条时,自尊还是受了不小打击。原本应该首次尝试输入这个密码啊! 这种尴尬马上变成愤怒。是的,有可能出现错误,但这种错误也太大了。

1.3K70

如何在Linux上获得错误核心转储

步骤1:运行 valgrind 发现找出为什么程序出现错误最简单方式是使用 valgrind:运行 1. valgrind -v your-program 这给了我一个故障时堆栈调用序列...当您程序出现错误,Linux 内核有时会把一个核心转储写到磁盘。 当我最初试图获得一个核心转储时,很长一段时间非常沮丧,因为 – Linux 没有生成核心转储!核心转储在哪里?...一旦这样做了,当我执行 bt 时,gdb 给了我一个带有行号漂亮堆栈跟踪! 如果你想它能工作,二进制文件应该以带有调试符号信息方式被编译。...在未来如果能让 ASAN 工作,可能多写点有关它东西。(LCTT 译注:这里指使用 ASAN 也能复现段错误) 从一个核心转储得到一个堆栈跟踪真的很亲切!...这个博客听起来很多,当我做这些时候很困惑,但说真的,从一个错误程序中获得一个堆栈调用序列不需要那么多步骤: ☉ 试试用 valgrind 如果那没用,或者你想要拿到一个核心转储来调查: ☉ 确保二进制文件编译时带有调试符号信息

4K20

工程化(三)

原因就在于,DevToolsCore.framework这个库内部牵扯到了很多其他库,这些库可能很多,如果直接将这些库一个一个拖进来的话就会拖进来非常多库,而如果通过配置前面的路径方式,就会方便很多...但是当我编译之后还是会报错,因为链接在生成最后可执行文件时候,还是需要函数具体声明,报错如下: 因此还要针对链接阶段进行处理: -Xlinker是给链接直接传递参数意思,也就是说,-...,rake这个三方库在Gemfile中指定版本(具体版本号可以在Gemfile.lock中查看)当前终端中默认rake版本是不匹配。...: 然后进入终端执行bundle install,报了一个这样错误: 这个错误是说,Gemfile.lockbundler版本跟终端环境中运行bundler版本不匹配。...六、VSCode配置进阶 1,--conservativ bundle update 更新你所有的gems到最新可用版本,如果只想更新其中一个gem,那么可以使用--conservativ参数,如下

55440

Web 框架能解决什么问题

目标并非要抨击这些框架,而是要了解成本和效益,找出有没有其他选择,甚至当我们决定采用框架时,我们也能从中吸取教训。...注意:这是一个很大主题,想在以后文章里讨论这个主题,因为这个主题让这篇文章变得太长。 成 本 框架提供了声明性数据绑定、控制流原语(条件和列表),以及传播更改反应性机制。...如果不设置 Node.js 和 Webpack 这样捆绑,不处理 Babel-TypeScript 启动包中最近一些配置更改,以及所有这些事情,就不可能启动一个前端项目。...在 React 中,调用栈从来不是“你”事情——React 会为你处理调度。这一特性在没有 bug 时候非常好用。但是,如果试图找出无限循环重现原因,你将会陷入痛苦境地。...诚然,浏览中也有这样问题,但是这种问题一旦出现,就会影响到所有人,而且在大多数情况下,修复或者发布一个解决方案,都是迫在眉睫

1.5K10

(数据科学学习手札31)基于Python网络数据采集(初级篇)

urlopen()来建立目标网址连接,这个函数可以用来打开并读取一个从网络获取远程对象,可以轻松读取HTML文件、图像文件或其他寄存在网络端文件,下面是一个简单例子: from urllib.request...) 运行结果: 这对之后我们对所需内容定位提取很有帮助,事实上,任何HTML、XML文件任意节点信息都可以被提取出来,只要目标信息附近有标记即可; 四、错误处理策略   相比大家都有经验,当我们登入某些网址时...,因为网络不稳定或其它原因,导致网页连接失败,而在我们网络爬虫持续采集数据过程中,因为网页数据格式不友好、网络服务宕机、目标数据标签寻找失败等原因,导致你爬虫中途因发生错误而中断,这在需要长时间工作爬虫项目来说尤为关键...;   爬虫工作过程中常见错误如下:   对于urlopen过程,服务上不存在目标网页(或是获取页面的时候出现错误),这种异常发生时,程序返回HTTP错误,这包含很多种详细错误类型,但urlopen...,只识别编写正则表达式所匹配内容,而忽视不符合表达式所构造规则字符串,这在很多方面都十分方便;   正则字符串是任意可以用一系列线性规则构成字符串,例如:   1、字母“a”至少出现一次

1.7K130

向钢铁侠学习怎样开发软件

让我们看看在将网站部署到托管服务时必须要执行一些操作。 压缩你 JS 和 CSS。从代码中删除冗余数据节省空间。当额外文件空间每个字节都会影响网站加载时间和服务负载时,这一点至关重要。 ?...CDN(内容分发网络)存储经常请求图像和视频等文件(例如你网站上加载 Logo 或促销视频),因为这些文件大小通常比整个网站更大,并且总是随需求变化,它们给你服务增加了很大负担,因此利用...例子包括: AWS Cloudflare 使用像 Webpack 捆绑包:捆绑包基本上将所有源文件粘合在一起,就像 React Apps 情况一样,让它们一起工作,这样它们可以通过服务提供。...所有文件都根据你规范链接、定义入口点和出口点、哪些页面设置为在何时出现等。再次捆绑可减少磁盘和 Web 上加载时间和空间利用率,从而节省带宽和用户等待时间。...对于静态网站,去找一些免费模板,并尝试通过混合和匹配来进行修改以满足你要求。 写下你要求并分析你项目所需更多内容并了解它们。

75130

如何在 ASP.NET MVC 中集成 AngularJS(3)

在调试模式下,JavaScript 文件在未使用压缩功能情况下会被下载。如果想要调试并在 JavaScript 控制中设置断点,这是必须。...两个路由版本都包含事情是:支持 HTML 文件缓存,就像捆绑和 JavaScript,你还需要提供一个附属在 HTML Angular 视图上序列号。...FluentValidation 是 .NET 一个使用流畅界面和 lambda 表达式建立验证规则小型验证库。 ? 当试图创建示例应用程序客户时,客户代码和公司名称为必填项。...如果该业务对象验证失败,业务层可以从验证库返回错误集合,并发送错误收集结果到客户端,以便浏览错误信息呈现。...如果你是一个无需学习另外技术和工具并且喜欢点击按钮来发布你 Visual Studio 微软开发人员,你很可能会想使用 ASP.NET 捆绑功能。

1.8K100

对“Hello World”30年爱恨情仇

所说通过“构建你自己”,字面上意思是粗粗处理源之后,定制它以匹配特定你所拥有的硬件。最有趣是处理视频卡,和了解“dot clocks”以及所有让主板图形芯片友好结合细微差别。...写了一个程序,它将匹配打印作业到墨水颜色,然后排序打印队列,以便于所有的黑色打印都能放到一起,所有的绿色都放到一起,等等,这将8小时工作到缩减到2个小时,并给了我大量时间来学习RPG。...它提供了第一个“真正”3D世界(前人只是用2D地图模拟3D,从而允许不同地板和天花板高度),并通过支持TCP / IP和使用高级代码彻底改变了死亡匹配,这些高级代码比以前允许更多游戏玩家出现在同一张地图中...这是一个激动人心时刻,当我工作中使用Microsoft堆栈时,因为工具和服务成本关系,于是为自己公司开源社区。...事实证明,这令人难以置信地有用——即使是团队中JavaScript纯粹主义者和那些憎恨任何试图“修改语言”的人,也赞同TypeScript给了我们额外控制力和重构能力,并且TypeScript支持并行开发

70810

安全研究 | 从MicroStrategy入手发现FacebookXSS漏洞

首先,它会检查上传文件匹配URL参数fileFieldName,然后检查文件扩展名格式,如果是excel类型文件(xlsx、xls),它会调用方法parseUploadedExcelFile,如果是其它文件则调用...但是注意到,这里UploadFileTask类在处理上传文件加载显示过程中,没有采取任何输出格式编码,这可能导致主网站m-nexus.thefacebook.com中任意JS代码执行。...只需把上述文件托管在网站中,然后把其文件链接发送给受害者,只要他点击访问,即触发https://m-nexus.thefacebook.com/XSS执行: ?...漏洞上报后,Facebook给了我一个相对较高赏金奖励。...然后发现,如果在其中给定形如http:// 或 https://网站URL字符串,它就会执行针对相应http:// 或 https://网站内容抓取操作,且是任意网站都行。

98620

【Parcel 2 + Vue 3】从0到1搭建一款极快,零配置Vue3项目构建工具

Parcel是所有代码编译,无论使用哪种语言或工具链。Parcel获取您所有文件和依赖项,进行转换,然后将它们合并到较小一组输出文件中,这些文件可用于运行代码。...包裹使您代码可移植。您可以为不同环境,服务Web或应用程序构建代码。您甚至可以一次建立多个目标,并在进行更改时实时更新它们。包裹快速且可预测。...improvements (大量错误修正和改进) 这是Parcel 2一个beta版本。...@vue/compiler-sfc该软件包包含较低级别的实用程序,如果您正在为将Vue单个文件组件(SFC)编译为JavaScript捆绑或模块系统编写插件/转换,则可以使用这些实用程序。...获取文件 打开网址: https://github.com/lovell/sharp-libvips/ 查找计算机环境匹配两个文件。它们是以下两个文件,xxx代表计算机环境。

1.2K30

如何塑造品牌进而提升搜索转化率?手把手教你!

如果当我使用iPhone或安卓设备,当我在笔记本或台式机上打开谷歌浏览,所有的这些浏览或系统都会找寻之前使用记录来匹配正在输入或语音信息,而它们都会更倾向于展示偏置结果。...如果曾在过去访问Moz,而我只是在谷歌浏览中输入M,很可能谷歌会在下拉结果中展示Moz作为它建议,特别是在之前曾频繁访问Moz网站情况下。您就是这样获得这一偏好对待。...成本,不只是指财务成本,还包括建立成本,工作和流程成本以及客户自己自我认知,这意味着如果客户认为他们是小型企业,但若您向他们售卖适合成熟企业产品,客户可能认为他们购买成本太高。...他们并不认为自己是一个企业,即使企业套装适合他们并且提供了正确价值,您所做也是将产品定位客户实际上认为自己定位语言分开。这可能损害品牌亲和力。...当我说“处理流畅度”时,是在指能够轻松地认知某件事物并且能够建立联系。例如,关于这件事最喜欢研究之一是容易和难以发音公司名称和公司股票价格之间相关性研究。

56020

Step by Step!Kubernetes持续部署指南

阅读完本文之后,你将拥有一个高效Kubernetes部署和持续交付工作流程。 持续集成交付 持续集成是在每次应用程序更新时构建和测试实践。通过以少量工作,更早地检测到错误并立即解决。...一个完善CI 流水线能够创建一个快速反馈回路以在造成任何损失之前发现错误。我们项目附带一些现成测试。 打开位于.semaphore/semaphore.yml初始流水线文件,并快速查看。...在Semaphore,block按照顺序运行,与此同时,在block中job也并行运行。流水线包含2个block,一个是用于库安装,一个用于运行测试。 ?...下一个命令是docker pull,它试图拉取最新镜像。如果找到镜像,那么Docker可能能够重新使用其中一些层,以加速构建过程。如果没有最新镜像,也无需担心,只是需要花费长一点时间来构建。...semaphore-demo-ruby-kubernetes type: LoadBalancer ports: - port: 80 targetPort: 4567 Kubernetes将selector标签相匹配以便将服务

80820
领券