新一代主机管理工具,支持shell管理和远程桌面管理,支持Linux、Windows和macOS操作系统。可称得上是居家办公神器。
根据项目主页介绍,natpass具有以下特性:
支持私有化部署;
内存占用较小(约20M);
支持tls安全连接;
支持多路异步IO;
支持虚拟链路层;
支持链路和终端会话监控;
支持web shell;
支持web vnc。
项目作者来自上海,已在GitHub上获得了2.2k的Star,并于2天前更新了v0.8.6。
GitHub地址:网页链接
开源协议:MIT license
英特尔CoffeeLake方案,H310支持I3/I5/I7
双通道内存,支持VGA 、HDMI、LVDS(双显同步或者异步)
IO接口方面,支持2/4*USB3.0+5*USB2.0
170*170mm的板型
Seastar是一个基于事件驱动的高性能C++应用开发框架,它提供了简易非阻塞式异步代码的编写方法,采用了基于Future和Promise的机制。
Seastar是一个用于编写涉及网络和磁盘I/O的复杂异步应用程序的框架。该框架针对每一个内核采用单线程模式,但可扩展到多个内核,并最大限度地减少内核之间昂贵的内存共享的使用。
Seastar是一个 C++14 库,为用户提供复杂的编译时功能和对性能的完全控制,而没有运行时开销。
Seastar提供的功能主要包括内存管理、网络IO、文件IO、多核、Fiber、线程、RPC和WebSocket功能。
项目地址:网页链接
#如何选择开源软件才能控制企业成本# #seastar#
关于中断
中断提供一种事件异步处理方式,无论是时间分片,还是键盘输入,还是收到网络数据包,都需要中断进行处理。
中断如果处理过程长,需要分为上下两个部分,上部分是由硬件请求和触发的,比如网络包收取中,把网卡数据请求读到内存,
更新硬件寄存器状态,发送软中断信号NET_RX_SOFTIRQ通知内核线程进行收包的下半部分的处理,每个cpu对应一个软中断
内核处理线程[ksoftirqd/cpu编号]
[root@localhost ~]# ps -ef|grep ksoftirqd
root 10 2 0 12:57 ? 00:00:00 [ksoftirqd/0]
root 18 2 0 12:57 ? 00:00:31 [ksoftirqd/1]p
root 24 2 0 12:57 ? 00:01:18 [ksoftirqd/2]
root 30 2 0 12:57 ? 00:00:00 [ksoftirqd/3]
root 37 2 0 12:57 ? 00:00:00 [ksoftirqd/4]
我们可以通过如下命令查看软中断变化以及是否均衡(收包的时候有用):
watch -d "/bin/cat /proc/softirqs | /usr/bin/awk 'NR == 1{printf "%-15s %-15s %-15s %-15s %-15s"," ",$1,$2,$3,$4}; NR > 1{printf "%-15s %-15s %-15s %-15s %-15s",$1,$2,$3,$4,$5}'"
硬中断可以通过:
watch -d cat /proc/interrupts
分享个小技巧,如果我们网络收包压力比较大,看下软中断NET_RX 在各个cpu上是否均衡,如果不均衡,可以开启
service irqbalance start
注意,如果cpu处于节能模式下,会降低功耗性能更差,如果在高性能模式下,会将中断的处理均衡到多个cpu上,提升性能。
简单看下cpu的频率也可以知道cpu处于什么模式下:cat /proc/cpuinfo |grep "cpu MHz"一样的都是最高频率则处于性能模式。
英特尔H110芯片组,LGA1151( Skylake-S/Kabylake-S )处理器,双通道DDR4内存,最高支持32G,多显示输出VGA 、HDMI、LVDS(双显 同/异步),软件端支持智能风扇,来电开机,无人值守,网络唤醒。
此外,IO接口也非常的多,比如USB:4*USB3.0 ;2*USB2.0,支持工业级12~24V宽压供电。
现在的面试者们简历是真敢写啊,写着精通Java和操作系统,问了一下同步IO、异步IO、IO多路复用,讲不清楚;写着精通Elasticsearch,问了一下,总量PB级,增量每日数百GB的大索引如何设计,完全讲不出来;写着精通多线程,问了一下内存可见性,讲不清楚~
[捂脸]真是“艺高人胆大”,不管会不会,只要听过就往上写,只要写了就写“精通”,最终整个简历,全是“精通”。
最近在团队内部进行了系统性能优化,主要是针对Mysql慢查询和接口相应超时,具体整理优化措施如下:
1)按照字段区分度增加索引,优先考虑联合索引;
2)按照实际业务考虑可否将程序串行改为并行(借助类似CompletableFuture)或者异步处理(@Async或者MQ);
3)频繁查库可否改为一次性查库,降低IO;
4)尽量避免子查询和join查询,可考虑在内存中进行计算;
5)避免查询时深分页场景;
6)不经常变的数据可考虑放缓存;
7)尽量避免同时修改或删除过多数据,会造成cpu利用率过高,可以进行分批处理;
8)like查询(%关键字%)不走索引优化,示例如下:select * from ads_client_company where company_name in (select company_name from ads_client_company where `state` = 1 and company_name like '%有限公司%')
9)特殊场景可强制指定索引FORCE index;
10)按照业务数据实时性要求可以考虑数据异构到ES或者迁移到Hive进行离线计算;
11)避免使用or或!=的场景,不走索引,LEFT JOIN切换成成子查询;
12)数据库读写分离。
那么quarkus有什么是非常吸引人的:启动速度,内存占用小,利用graalvm可以做到把jar应用转成二进制的可执行文件即native镜像,还有就是开发环境对开发人员的友好体现在只要代码保存就会快速生效,在开发测试环境的一键部署,更关键的是性能的极大提升(这个是相对的)。
为什么会有quarkus出现?其实它不是孤独的存在还有很多类似的框架,oracle的helidon,由Grails框架的创建者开发的Micronaut等等,那么这些框架的理念底层都是什么呢?
首先说理念,我认为是性能和前后端分离带来的后端服务的极简主义的需求,换句话说就是快速响应能力,一方面golang确实冲击了java的领域,另一方面java这么多年的发展使其太臃肿,Java在跟上时代的同时也要甩开包袱,比如jsp、servlet、j2ee的诟病,其实java早已看出自生的问题,vert.x、MicroProfile的出现就说明了这一点。
再说说反应式编程,也可以叫做响应式编程,叫什么名字不重要,重要的是异步编程范式走上了时代的舞台,golang的发展让java开始着手自己的协程(网页链接),这是一个大工程,但是不要忘了java的杀手锏天花板级别的框架netty,即便没有协程Java也不畏惧任何语言,vert.x的出色表现就证明了这一点。
而quarkus的出现正是站在vert.x和MicroProfile等一批异步编程范式的工具(SmallRye RESTEasy Hibernate Reactive)的肩膀上,可以这么说从技术的角度来看quarkus那就是被java宠上天的儿子,quarkus利用的技术没有一个不是java语言里面的佼佼者,他们加在一起就是你在官网所看到的卓越的表现。
【面试题】Web前端开发面试题
1.v-model 双向数据绑定的用法有哪些?
2.Async/Await 如何通过同步的形式实现异步?
3.前端开发该如何优化网站性能?
4.页面导入样式时使用 link 和 @import 有什么区别?
5.js 闭包是否会造成内存泄露?如何判断?
nginx在全球Web服务器中市场占有率遥遥领先,它说第二没人敢说第一,为什么nginx这么受追捧呢?
nginx是一款轻量级的Web服务器、反向代理服务器,由于它的内存占用少,启动极快,扩展灵活,缓存,负载均衡能力强,换句话说就是高并发、可扩展性、高可靠性、热部署、BSD许可证。
高并发:异步io非阻塞,占用更少资源,支持更多连接;
可扩展:模块化设计,第三方模块多;
高可靠:核心框架代码的优秀设计、模块设计的简单性,work进程独立;
热部署:平滑重启;
BSD许可证:开源免费;
你用过nginx吗?用它做什么了?
还没有关注的朋友可以点个关注。
JS(JavaScript)面试常问问题都在这里,看完这套面试题的小艾同学的感悟,那就是基础问题真多,所以基础一定要扎实[我想静静]
JS基础 30道题
ES6 10道题
数据类型 7道题
垃圾回收与内存泄露 2道题
JS执行机制 2道题
原型与原型链 3道题
执行上下文/作用域链/闭包 3道题
this/call/apply/bind 3道题
异步编程 12道题[中国赞]
#前端面试 #JavaScript学习 #互联网大厂面试 #web前端面试题# #前端#
蘑菇街面试题一面
JAVA的基础题
宏内核和微内核
1. 宏内核
宏内核是将操作系统功能作为一个紧密结合的整体放到内核。
由于各模块共享信息,因此有很高的性能。
2. 微内核
由于操作系统不断复杂,因此将一部分操作系统功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。
在微内核结构下,操作系统被划分成小的、定义良好的模块,只有微内核这一个模块运行在内核态,其余模块运行在用户态。
因为需要频繁地在用户态和核心态之间进行切换,所以会有一定的性能损失
中断分类
1. 外中断
由 CPU 执行指令以外的事件引起,如 I/O 完成中断,表示设备输入/输出处理已经完成,处理器能够发送下一个输入/输出请求。此外还有时钟中断、控制台中断等。
2. 异常
由 CPU 执行指令的内部事件引起,如非法操作码、地址越界、算术溢出等。
3. 陷入
在用户程序中使用系统调用。
基本特征
1. 并发
并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。
并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。
操作系统通过引入进程和线程,使得程序能够并发运行。
2. 共享
共享是指系统中的资源可以被多个并发进程共同使用。
有两种共享方式:互斥共享和同时共享。
互斥共享的资源称为临界资源,例如打印机等,在同一时刻只允许一个进程访问,需要用同步机制来实现互斥访问。
3. 虚拟
虚拟技术把一个物理实体转换为多个逻辑实体。
主要有两种虚拟技术:时(时间)分复用技术和空(空间)分复用技术。
多个进程能在同一个处理器上并发执行使用了时分复用技术,让每个进程轮流占用处理器,每次只执行一小个时间片并快速切换。
虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中。
4. 异步
异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进
算法题
剪绳子
把一根绳子剪成多段,并且使得每段的长度乘积最大。
Linux 专题
进程管理
1. ps 2 pstree 3 top eg top -d 2 4 netstat eg netstat -anp | grep port
2 正则表达式
1 $ grep [-acinv] [--color=auto] 搜寻字符串 filename eg grep -n 'the' regular_express.txt
2 awk 。
管道指令
$ ls -al /etc | less
Mysql的专题
mysql的索引特点
mysql中 mvcc解决了哪些问题
写时读 跟快照读 的概念
explain执行计划分析
索引下推
回表的操作
分布式专题
聊聊分布式事务,再说说解决方案
分布式理论
当我们的单个数据库的性能产生瓶颈的时候,我们可能会对数据库进行分区,这里所说的分区指的是物理分区,分区之后可能不同的库就处于不同的服务器上了,这个时候单个数据库的ACID已经不能适应这种情况了,而在这种ACID的集群环境下,再想保证集群的ACID几乎是很难达到,或者即使能达到那么效率和性能会大幅下降,最为关键的是再很难扩展新的分区了,这个时候如果再追求集群的ACID会导致我们的系统变得很差,这时我们就需要引入一个新的理论原则来适应这种集群的情况,就是 CAP 原则或者叫CAP定理,那么CAP定理指的是什么呢?
CAP定理
CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的,他指出WEB服务无法同时满足一下3个属性:
一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效)
可用性(Availability) : 每个操作都必须以可预期的响应结束
分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成
BASE理论
前人已经给我们提出来了另外一个理论,就是BASE理论,它是用来对CAP定理进行进一步扩充的。BASE理论指的是:
Basically Available(基本可用)
Soft state(软状态)
Eventually consistent(最终一致性)
BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)
使用这款工具包构建基于Java和Scala的高并发、分布式和弹性的消息驱动应用程序真是太赞了!著名的流式处理框架Flink底层就采用了它,它就是Akka,项目地址:网页链接。
Akka工具包开发消息驱动应用程序是基于Actor模型来解决并发的问题,采用消息传递的形式进行通信,Akka有以下特色:
1、提供了Actor和Streams模型,对并发模型进行了更高的抽象,能够更更简单地构建并发和分布式系的可扩展的系统,更有效地使用服务器的资源。
2、支持异步、非阻塞、高性能的事件驱动编程模型。
3、基于The Reactive Manifesto的原则,提供了一套容错机制,允许在Actor出现异常时进行一些恢复或重置操作,支持编写高容错的程序。
4、基于轻量级事件处理,消耗的资源较少,1GB内存可容纳250万个Actor。
5、高性能,在一台机器上最高可达5000万消息/秒。
6、没有单点故障。节点间使用自适应路由自动进行负载均衡,使用CRDT实现最终一致性。
7、反应式数据:带反压的异步非阻塞流处理。完全异步和流化的HTTP服务器和客户端为构建微服务提供了一个很好的平台,与Alpakka的流集成。
#程序员#
大型长期产品如何确保代码质量不下降?最近一直在思考这个问题。
我们团队的产品是一个SaaS产品,时间已经比较长了,也支撑了几千款线上业务,DAU上亿。前段时间出了一个线上比较高概率的crash,很长时间没有出这个高概率的crash了,这个是很危险的信号,所以最近一两周我个人一直在Review项目的代码,也在思考怎么确保这种类型产品质量不下降,甚至持续提升。总结了几条经验如下,欢迎各位同行交流。
第一,制定并严格遵守项目自身的开发规范。
通常,各个公司,部门都有自己的开发规范,但具体到单个产品需要根据自身特点制定自己的开发规范,拿我自己项目来说,由于我们要内嵌到其他app中,不能影响其他app的帧率,因此异步响应是我们一个很重要的内部规范。另外,我们团队成员技术栈跨度有点大,内存管理,线程管理我都要求大家用现有的内存池使用内存,轻易不新开线程,这是维持我们低crash率的很重要的设计思想。
第二,团队骨干,管理人员坚持Code Review,确保产品的一些设计思想,架构不被打破。让设计思想根植于每一个函数,每一个类。这跟一直球队的打法一样要坚持一定打法,沉淀积累,比如巴萨的传递打法。
第三,保持质量提升需求占比。
通常我们每个版本开发多数是基于用户需求驱动,但要提升项目质量,需要保持一定比例的跟项目核心技术指标相关的需求开发。拿我们自己来说,清晰度,网络传输能力是我们的核心能力,我们需要在每个迭代去夯实,提升,紧跟甚至引领相关行业先进技术发展。
第四,测试流程确保,测试用例完善。
站在软件工程的角度,大型项目质量需要靠流程,靠完善的测试确保。从我们产品自身特点来看,我们跟硬件,OS关联性很高,我们需要根据硬件及OS的升级,不断完善自己的测试用例,不断优化自己的测试流程。
第五,发布流程控制。
由于业务体量较大,需要确保新的特性,功能先在体验服验证,有数据支撑这些功能正常才上线正式业务,并且确保所有关键参数,路径能够服务器配置控制,确保风险可控。
第六,产品质量提升定期脑暴提升。
随着业务发展,用户反馈积累,我们需要内部脑暴,把各自经验归集,不断优化产品质量。
我这段时间在我们原有基础上,想到这几点,欢迎同行交流。
一年一度的GTC大会上,英伟达新发布的GPU H100真心牛,800亿个晶体管,吊打市场上所有AI 芯片,一骑绝尘,性能比A100还要高3倍,AI算力可以提高30倍。。。还直接对英特尔的PC架构提出了自己的解决方案,Grace CPU,144个核心,高带宽,和GPU之间采用NVLink(NVlink可以集成64+芯片),英伟达虽然收购ARM失败,但数据中心“三芯”总路线(GPU+DPU+CPU)不变,这是要把英特尔的饭碗全部抢过来。英伟达最新的AI服务器速度达到目前最强超级计算机日本富岳的4倍。
由于英伟达人工智能芯片的强大,除了抢占AI算力市场,英伟达在智能汽车芯片市场占有率也在走高,比亚迪用的就是英伟达的DRIVE Hyperion平台。英伟达推出了最新版本的Hyperion 9自动驾驶平台,即Nvidia DRIVE Orin平台的基本架构,也是英伟达用于自动驾驶汽车的硬件架构。这个平台将有14个摄像头、9个雷达、3个激光雷达和20个超声传感器,将于2026年投入使用。
黄仁勋认为,IT和芯片领域总市场规模能达到100万亿美元,英伟达能占1%,其中汽车行业收入3000亿美元,芯片和系统收入为3000亿美元,AI和元宇宙企业模拟软件收入各为1500亿美元,视频游戏的收入为1000亿美元。整个市场很大,英伟达野心也不小。
同时苹果最新的M1 Ultra芯片也秒杀同级芯片,就是堆核,简单粗暴,性能强大,能耗低,有钱任性(苹果现在芯片设计能力越来越强了,从高通,英特尔挖了不少人)。
在顶尖芯片研发制造领域,中国还有很多路要走。
之前的chiplet小芯片技术,2D堆叠/3D堆叠技术,将内存集成到芯片内部,为了突破物理极限,折腾出的办法,现在正一个一个实现。人类为了继续摩尔定律,无所不用其极。
人工智能的进展,需要强大的AI算力,现在随便一个人工智能架构,参数都多的吓人,比如Google Switch Transformer有1.6万亿个参数,算力不够,训练人工智能就需要很长时间。
最后,之前聊过,人类为什么拥有智慧?照道理,人类大脑结构和猿猴差不多,为什么只有人类产生了智慧,猿猴没有?按照科学家的说法是,因为人类神经元的数量突破了一个极限,突然产生了智慧。人类大脑有1000亿个神经元,猿猴大脑只有60亿个神经元。
那么现在问题来了,现在的人工智能,其实就是模拟人类大脑中的神经元,数量比人脑还多,比如我前面说的Google Switch Transformer有1.6万亿个参数(参数其实就是神经元),为什么这些神经元组成起来,没有形成自己的智慧?因为计算机模拟人类的神经元,是经过极大简化的,只能传递0,1这两个数值,其实真正的大脑神经元,除了传递0,1数值,还包括相位信息,相当于我们的计算机将神经元信息进行了70%以上的简化,因此和真正的人脑神经元差距很大,自然数量再大,也没有办法形成智慧。
现在有一种新的计算机,叫做类脑芯片/类脑智能/类脑计算机,比如清华大学搞的天机芯,能够贴近大脑神经元的信息处理方式,而且是异步工作,具有很高的能效比,不过这个计算机发展比较慢。
#英伟达举办GTC 2022大会# #英伟达H100#