技术文章

NIO-Channel接口分析

那年仲夏 提交于 2021-02-20 01:13:35
NIO-Channel接口分析 目录 NIO-概览 NIO-Buffer NIO-Channel NIO-Channel接口分析 NIO-SocketChannel源码分析 NIO-FileChannel源码分析 NIO-Selector源码分析 NIO-WindowsSelectorImpl源码分析 NIO-EPollSelectorIpml源码分析 前言 本来是想学习Netty的,但是Netty是一个NIO框架,因此在学习netty之前,还是先梳理一下NIO的知识。通过剖析 源码 理解NIO的设计原理。 本系列文章针对的是JDK1.8.0.161的源码。 上一篇 介绍了Channel的基本使用,下面对Channel的接口进行分析。 接口 SCTP协议 SCTP(Stream Control Transmission Protocol)是一种传输协议,在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。 对于SCTP协议这里不详细描述,想了解的同学可以看下 这篇文章 SCTP协议平时用的不多,这里不做具体讨论。 UDP协议 NIO使用DatagrmChannel实现了UDP协议的网络通讯。 下面我们对各个接口进行分析。 AutoCloseable 和 Closeable 分别是自动关闭和主动关闭接口。当资源(如句柄或文件等)需要释放时

实用的Linux命令行工具

孤者浪人 提交于 2021-02-20 01:12:36
这些命令将让您的Linux使用体验更简单……或者,至少更有趣。 Linux世界中包含着无数令人印象深刻的免费与开源工具,大家能够利用其完成自己甚至从未想到过的功能。在今天的文章中,我们将分享七项您可能从未听说,但却相当出色的工具——从文件系统监控到运行可重新连接ssh会话皆在其中。 Linux世界中包含着无数令人印象深刻的免费与开源工具,大家能够利用其完成自己甚至从未想到过的功能。在今天的文章中,我们将分享七项您可能从未听说,但却相当出色的工具——从文件系统监控到运行可重新连接ssh会话皆在其中。 如果大家以ssh方式接入Linux主机并需要长时间执行操作,例如软件编程,那么您可能会丢失连接并因此退出登录。在这种情况下,tmux能够帮上大忙——tmux是一款终端复用器,它允许大家在同一终端的各程序之间轻松切换,将其断开(程序仍运行在后台当中)并重新附加至其它终端当中。正因为如此,tmux已经成为众多Linux系统管理员的必备工具。 如果大家以ssh方式接入Linux主机并需要长时间执行操作,例如软件编程,那么您可能会丢失连接并因此退出登录。在这种情况下,tmux能够帮上大忙——tmux是一款终端复用器,它允许大家在同一终端的各程序之间轻松切换,将其断开(程序仍运行在后台当中)并重新附加至其它终端当中。正因为如此,tmux已经成为众多Linux系统管理员的必备工具。 多年以来

vue首屏优化方案

坚强是说给别人听的谎言 提交于 2021-02-20 01:12:13
前言:最近用vue-cli 3.0 构建一个小型的工单管理系统,完工后build发现一个chunk-vendors包就达到985kb,加上其他一些资源文件,首页的下载总共大小快要2M。测试给的第一个反馈就是首屏慢慢慢慢慢! 根据首屏加载资源文件过大,进行一下优化: 1. 路由懒加载 结合Vue的异步组件再结合webpack的代码分割,我们可以轻松的实现路由懒加载。 ️vue-cli 3.0 模式就使用了Babel,我们需要添加 syntax-dynamic-import 插件,才能使 Babel 可以正确地解析语法。 // 安装插件 syntax-dynamic-import cnpm install --save-dev @babel/plugin-syntax-dynamic-import // 修改babel.config.js module.exports = { "presets": [ "@vue/app" ], "plugins": [ [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" }, "syntax-dynamic-import" ] ] } // 修改路由组件的加载(router/index.js) { path: '/', name: 'home'

2020,微服务之死?

和自甴很熟 提交于 2021-02-20 01:11:56
最近几年,微服务大行其道。在业务模型不完善,超大规模流量的冲击的情况下,许多企业纷纷抛弃了传统的单体架构,拥抱微服务。这种模式具备独立开发、独立部署、可扩展性、可重用性的优点的同时,也带来这样一个问题:开发、运维的复杂性提高。有人感觉微服务越做越不方便管理。 然而,随着 Docker 容器技术和自动化运维等相关技术发展,微服务变得更容易维护。2020 年,微服务的发展只会越来越完善,成为将来大中型企业业务架构的主流趋势。 但微服务架构包含了 N 多优化、N 多细节,对于一些 coding 的朋友,由于接触不到一线实战架构设计,眼看别人都在向微服务架构转型,自己却只能日复一日地重复造轮子。 最近整理了一套微服务 视频 干货,讲解很透彻。今天分享给大家。这份资料 尤其适合 以下人群: 1.没有用过微服务技术,只会用传统的 SSM 框架 2.用过 Spring Cloud、Dubbo等技术,但是只限于使用,遇到问题基本无法解决 3.从来没有系统学习微服务架构,觉得架构设计是遥不可及的 4.对于微服务技术有所了解,但尚没有设计高可用高并发的实践经历 学完这份视频你将获得哪些收获? 理解当下最火热的微服务架构原理及其开源框架; 触及一线大厂所配备的微服务核心技术内幕知识以及面试考核点; 对照自己掌握知识点进行查漏补缺,帮助扫除知识盲区、重构知识体系; 视频围绕“

干货:熟悉面试中常见的的 web 安全问题

强颜欢笑 提交于 2021-02-20 01:10:22
背景 之前出去面试的时候, 经常会被问到一些 安全方面 的问题。 安全涉及的领域很大, 我也仅仅是了解一些皮毛, 每次面试前都要找资料复习, 很麻烦。 所以我就根据之前搜集的一些资料和面试的经验,系统的梳理了一下,希望对大家有所帮助。 「 正文 」 首先简单介绍 几种常见的攻击方式 : SQL注入 XSS CSRF 点击劫持 中间人攻击 1 SQL 注入 这是一种比较简单的攻击方式。 如果后台人员使用用户输入的数据来 组装SQL查询语句 的时候不做防范, 遇到一些 恶意的输入 , 最后生成的SQL就会有问题。 举个例子 比如地址栏输入的是: articlrs/index.php? id = 1 发送一个 get 请求, 调用的查询语句是: sql = " SELECT * FROM articles WHERE id = ", $id 正常情况下, 返回 id = 1 的文章。 如果攻击者想获得所有的文章,语句就可以改成: articlrs/index.php? id = -1 OR 1 = 1 这样就可以了, 为什么呢? 这是因为,id = -1 永远是 false,1=1 永远是true,所有整个where语句永远是ture. 所以 where 条件相当于没有加where条件,那么查询的结果相当于整张表的内容,攻击者就达到了目的。 现在的系统一般都会加入 过滤 和 验证 机制,

人人都是 API 设计者:我对 RESTful API、GraphQL、RPC API 的思考

旧街凉风 提交于 2021-02-20 01:09:36
点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达! >>>技术讨论群<<< 梁桂钊 | 作者 有一段时间没怎么写文章了,今天提笔写一篇自己对 API 设计的思考。首先,为什么写这个话题呢?其一,我阅读了《阿里研究员谷朴:API 设计最佳实践的思考》一文后受益良多,前两天并转载了这篇文章也引发了广大读者的兴趣,我觉得我应该把我自己的思考整理成文与大家一起分享与碰撞。其二,我觉得我针对这个话题,可以半个小时之内搞定,争取在 1 点前关灯睡觉,哈哈。 现在,我们来一起探讨 API 的设计之道。我会抛出几个观点,欢迎探讨。 一、定义好的规范,已经成功了一大半 通常情况下,规范就是大家约定俗成的标准,如果大家都遵守这套标准,那么自然沟通成本大大降低。例如,大家都希望从阿里的规范上面学习,在自己的业务中也定义几个领域模型:VO、BO、DO、DTO。其中,DO(Data Object)与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。而 DTO(Data Transfer Object)是远程调用对象,它是 RPC 服务提供的领域模型。对于 BO(Business Object),它是业务逻辑层封装业务逻辑的对象,一般情况下,它是聚合了多个数据源的复合对象。那么,VO(View Object) 通常是请求处理层传输的对象,它通过 Spring 框架的转换后,往往是一个

JS闭包

余生颓废 提交于 2021-02-20 01:09:16
闭包 (closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数和变量不会被垃圾回收机制回收 闭包的定义及其优缺点 闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量 使用闭包有一个优点,也是它的缺点,就是可以把局部变量驻留在内存中,可以避免使用全局变量。全局变量在每个模块都可调用,这势必将是灾难性的。(所以推荐使用私有的,封装的局部变量。) 一般函数执行完毕后,局部活动对象就被销毁,内存中仅仅保存全局作用域。但闭包的情况不同! 嵌套函数的闭包 function aaa() { var a = 1; return function(){ alert(a++) }; } var fun = aaa(); fun();// 1 执行后 a++,,然后a还在~ fun();// 2 fun = null;//a被回收!! 闭包 会使变量始终保存在内存中,如果不当使用会增大内存消耗。 javascript的垃圾回收原理 (1)、在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收; (2)、如果两个对象互相引用,而不再被第3者所引用

使用AI行为树开发任务系统

我只是一个虾纸丫 提交于 2021-02-20 01:08:54
·本篇日志是 http://gad.qq.com/article/detail/39709 的后续扩展日志,感谢 AI分享站 的启发。 任务系统在游戏开发过程中伴随着DEMO版本一直修改到RELEASE版本,无时无刻都在修改,时刻反复经受着策划和运营的折磨。无数的惨痛教训使我痛定思痛,放弃传统的硬编码方式转而寻求一种动态的实现方式,一种设计优秀的任务系统在这个过程中能让程序员独善其身,任凭风浪起,稳坐钓鱼船。这就是我想说的行为树任务设计思想。 下面我们来简单描述一下任务系统,任务系统一般可以分成这3个部分 ·可执行任务的条件,例如:角色等级,职业限制等等。这部分在detect中判定 ·任务执行过程中的细节,此处能拆分出若干项行为 ·任务的完成条件,有些任务是服务器判断完成条件的(杀怪等), 有些是客户端判断完成条件的(和NPC完成一次对话等) 任务可以拆分出的各种细节,每一个可以抽象成行为树的行为节点,这样根据任务的具体细节设计出一棵行为树。各个行为节点中的内嵌脚本可以交于策划填写具体的逻辑。程序部分的工作主要是实现角色的基本逻辑单元以及一些黑板功能,逻辑单元之间的组合交织就通过脚本实现。原本繁杂易修改的逻辑脱离出硬编码方式,这样的好处显而易见了。 我们看一下这个简单的例子: 有一个简单的任务:寻找NPC,然后和NPC对话至完成对话,并完成该任务 这个任务的具体细节有3步,第一步

利用cronolog对Tomcat7 catalina.out 日志分割

与世无争的帅哥 提交于 2021-02-20 01:08:30
下载 Download 解压后安装 [root@ ~]# tar -xzvf cronolog-1.6.2.tar.gz [root@ ~]# cd cronolog-1.6.2 [root@ ~]# ./configure [root@ ~]# make && make install [root@ ~]# which cronolog /usr/local/sbin/cronolog 编辑catalina.sh 编辑前先备份一个 [root@ bin]# cp catalina.sh catalina.sh.bak 修改点 [root@ bin]# diff catalina.sh catalina.sh.bak 186c186 < CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d --- > CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out 371c371 < #touch "$CATALINA_OUT" --- > touch "$CATALINA_OUT" 384c384,385 < org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA

月入5W卖肉阿姨 VS 月薪1W程序员,谁才是人生赢家?

北城余情 提交于 2021-02-20 01:07:46
本文原创: 不会笑青年 -END- “养码场” 现有 技术人80000+ 覆盖JAVA/PHP/IOS/测试等领域 80%级别在P6及以上, 含P9技术大咖30人 技术总监 和 CTO 500余人 本文分享自微信公众号 - 养码场(yangmachang0)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“ OSC源创计划 ”,欢迎正在阅读的你也加入,一起分享。 来源: oschina 链接: https://my.oschina.net/u/3723126/blog/4644580