精华内容
下载资源
问答
  • 彼此了解一下
    万次阅读 多人点赞
    2020-02-17 17:12:58

    全文共3085字,预计学习时长9分钟

    来源:Pexels

     

    根据麦肯锡的研究,到2030年,将有近三分之一的美国人需要另谋出路,以应对科学技术的飞速发展。科技的进步意味着工人需要不断学习新技能。

     

    当这种情况真的来临的时候,我对很多事情都十分感兴趣:精酿啤酒(开个玩笑……但认真的说,您可以给我邮寄您当地的IPA),领导力和管理、经济和消费者行为,创业精神和初创企业 ,最后是技术和工具。

     

    当我在俄罗斯ABBYYSoftware全球流程智能部门做全职管理产品营销时,科技便已发挥了巨大作用。鉴于笔者对科技的热爱!我的手腕上佩戴了些智能玩具,而我的家里配备了语音控制恒温器和其他精美的智能设备。技术趋势日新月异,新的“有趣事物”发展迅猛,这使我不得不阅读文章并观看CES 2020的现场直播,来了解未来会发生什么?

     

    众所周知,世界瞬息万变。我并不认为这些高科技会让您感到惊讶,但是这些科技值得您在下次管理层或领导层会议中提及。

    对技术的需求,以及对具有先进技术技能的工人的需求,都在飞速增长。随着企业范围内大规模的重组变化,组织需要以全新的创新方式做出响应。这意味着需要重新考虑如何改善员工技能和人才管理。许多公司都在投入更多资源来招聘,雇用和培养合适的人才以保持竞争力。毫无疑问,这意味着愿意花时间培养高级技术技能的员工在未来12个月内可能更有就会在企业中获得一些最热门的职位。

     

    根据招聘软件公司iCIMS2019年的报告,2016年,各企业平均用了55天时间来填补一个技术职位。在2019年,这一数字跃升至66天。根据这份报告,这些空缺的职位每天每个可能损失约680美元的收入。具备相应职位技能的人很少,但是岗位需求量却很大,具有很高的门槛!你是否具备获得这些职位的技能?

     

    来源:Pexels

     

    2016-2019年最受欢迎的十大技术技能

     

    当查看Udemy上最热门的技能趋势时,数据显示,过去3年中,人们正在向AI和数据科学技能学习转移。这是有道理的,因为2020年的许多潮流技术趋势都包括诸如超自动化,自主性和AI保密性之类的事物。

     

    根据Udemy,以下是2016年至2019年过去三年中最受欢迎的十大技术技能。

     

    1. TensorFlow

    2. Chatbot

    3. Microsoft Azure — architecture

    4. OpenCV (computer vision/AI)

    5. Neural networks

    6. LPIC- Linux

    7. Ethereum (blockchain)

    8. Splunk (data)

    9. QGIS (open-source GIS software)

    10.Kotlin

     

    *排名是根据2019年Udemy.com上的最高消费量得出的。数据来源:Udemy Data 2020。

     

    TensorFlow,OpenCV和神经网络是当今数据科学家正在使用的基础技能,对于理解和开发AI应用程序和平台至关重要。

     

    开源机器学习和神经网络解决了当今越发流行的人工智能创新背后的沉重负担。这些数字技术席卷全球,在各个行业中都得到了应用。

     

    2020年十大最受欢迎的技术技能

     

    当Udemy统计2020年学习平台网站上最受欢迎的技能时,也有类似的趋势。

    由于技能缺口困扰着全球各地的组织,这10项技能是必不可少的。企业高管正在努力填补这些职位。

    如果您打算在今年进行IT科技投资或开始新的职业道路,请考虑以下方面。在分析了4000多万用户的数据之后,Udemy发现人们正在学习的流行技能是Python编程语言。

    总体而言,该报告指出,人们对学习人工智能和数据科学有着浓厚的兴趣,但对Web开发框架(React,Angular),云计算和其他IT认证(AWS,CompTIA)以及Docker的需求也在不断增长 。

     

    1. Python —一种用于软件开发、基础设施管理和数据分析的编程语言。Python的设计理念是通过大量留白来强调代码的可读性。

    2. React (web) — 一个用于构建用户界面的JavaScript库,由Facebook和一个由个人开发者和公司组成的社区维护 。React可以用作单页或移动应用程序开发的基础。

    3. Angular — 一个基于JavaScript的开源前端Web框架。它由Google的Angular团队以及个人和公司组成的社区维护。Angular是由AngularJS开发团队创造的完全复刻。

    4. 机器学习— 对算法和统计模型的科学研究,属于人工智能的范畴。

    5. Docker — 一个开放源代码平台,用于创建容器的软件包。容器彼此隔离,并将其软件,库和配置文件捆绑在一起。

    6. Django — 一个基于Python的免费开源Web框架。Django的主要目标是简化复杂的,数据库驱动的网站创建。

    7. CompTIA —一个专业的技术组织,具有四个IT认证系列,从入门级到专家级,被认为是IT行业的顶级行业协会之一。

    8. Amazon AWS —AWS以按需付费的方式为个人,公司和政府提供云计算平台和API。AWS认证可验证云专业知识。

    9. 深度学习 — 一类基于人工神经网络的机器学习,可以分为有监督,半监督或无监督。

    10.React Native (mobile) — 由Facebook创建的一种开源移动应用程序框架,用于开发适用于Android,iOS,Web和通用Windows平台的应用程序。

     

    *排名是根据2019年Udemy.com上的最高学习量得出的。数据来源:Udemy Data 2020。

     

    2020年十大新兴技术技能

     

    尽管有许多技能对2020年的技术成功至关重要,但这些技能是在2020年及以后即将兴起的。

     

    1. Gatsby.js (网络框架)

    2. AWS Big Data

    3. React Hooks

    4. Microsoft Azure Architecture

    5. Next.js (网络框架)

    6. Apache Airflow (数据处理)

    7. SwiftUI (苹果软件)

    8. Pegasystems (数据处理自动化)

    9. ESP32 (物联网)

    10.量子计算

     

    *以上数据来源于在2018年没有被关注但在2019年学习量激增的技能。资料来源:Udemy Data 2020。

    Udemy对4000万人在这个平台上学习的新兴技能进行了分析,并发现Gatsby.js(一种新的Web开发框架工具)正在迅速发展。其他越来越流行的Web开发工具包括React Hooks,Next.js和SwiftUI(Apple应用程序的用户界面工具)。全新的技能出现在新兴技术技能列表中,包括量子计算和用于物联网发展的ESP32。

     

    来源:Pexels

     

    数字化转型即将到来-数字技能,至关重要。

     

    这些清单表明了公司利益的转变,同时也反映了我们日益数字化的世界。你准备好迎接数字企业了吗?

    ps:这些2020年的十大技术技能和其他深度见解和分析全都来自Udemy for Business的《2020年职场学习趋势报告:未来的技能》。该报告重点介绍了组织在2020年所需的未来技能,以及如何为新的十年做好准备。

    留言 点赞 关注

    我们一起分享AI学习与发展的干货
    欢迎关注全平台AI垂类自媒体 “读芯术”

    (添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)

    更多相关内容
  • “相互认识,彼此了解”主题班会策划书.pdf
  • DoIP了解一下

    千次阅读 多人点赞 2020-07-21 17:34:14
    在学习DoIP协议之前,我们先来了解一下DoIP协议中的重点术语: DoIP entity(DoIP实体):实现DoIP协议的节点,即DoIP gateway或者DoIP node; DoIP gateway( DoIP网关):实现DoIP协议,并能进行协议转发的节点...

    今天小编要为大家带来的是DoIP协议相关的介绍。在学习DoIP协议之前,我们先来了解一下DoIP协议中的重点术语:

    DoIP entity(DoIP实体):实现DoIP协议的节点,即DoIP gateway或者DoIP node;

    DoIP gateway( DoIP网关):实现DoIP协议,并能进行协议转发的节点;

    DoIP node(DoIP节点):实现DoIP协议,但不能进行协议转发的节点;

    DoIP edge node(DoIP边缘节点):连接以太网激活线的DoIP节点;

    Network Node(网络节点):连在IP网络上,但不能实现DoIP的节点。

     

     

     

    一、DoIP简介

     

    DoIP协议(Diagnostic Communication over IP),即ISO组织发布的ISO13400协议,简而言之就是基于IP的诊断通信协议。通过利用以太网相较于其它通信协议(如CAN、Flexray等)拥有更高通信速率的特点,来帮助实现当前市场上部分热门的远程诊断、OTA等技术。

     

    DoIP在OSI模型中的分层结构如下图所示:

     

     

    ISO13400协议目前分为4个部分:

    ISO13400-1是对应用场景进行举例介绍;

    ISO13400-2是对传输层和网络服务的要求;

    ISO13400-3是对物理层的相关要求;

    ISO13400-4则是OBD布置和接插件的相关要求。

    注:ISO13400-5对于一致性测试的要求,目前暂未发布。

    下面我们就协议的重点部分给大家作简单介绍。

     

    二、DoIP报文映射

     

     

    DoIP首部

    DoIP首部包括:Protocol Version(协议版本号)、Inverse Protocol Version(协议版本号取反)、Payload Type(负载类型)、Payload length(负载长度)。

    协议版本号的参数:0x01代表DoIP ISO/IDS 13400-2:2010、0x02代表DoIP ISO 13400-2:2012,其他数值目前预留。

    协议版本号取反则是对协议版本进行校验,确保正确的DoIP格式,如:协议版本0x01,则此值为0xFE。

     

    负载类型的具体数据如下表:

     

     

    负载长度表示DoIP数据部分的长度。

     

    三、DoIP应用场景

     

    DoIP协议的使用是基于UDS服务,使用传统CAN通讯协议的车辆只能通过物理寻址或功能寻址的方式实现一对一的诊断应用场景。DoIP则可以利用以太网协议在传输层中的优势实现点对点、一对多、多对一的诊断应用场景。

     

    1、直接点对点连接

     


    点对点连接

     

    点对点连接的方式可以通过网线连接(如上图箭头1),也可以通过无线网络连接(如上图箭头二)。

     

    2、单个测试设备与多个车辆连接(一对多)

     


    一对多连接


    3、多个测试设备与单个车辆连接(多对一)

     

    多对一连接


    四、DoIP物理连接

     

     

    DoIP物理连接和数据链路层要求如下表:

     

     

    线束要求

    诊断通信连接线至少是Cat5或以上;

    Tester到OBD接口的线束长度不能超过50米,即指从车辆的OBD接口到诊断设备里的以太网接口(PHY或Switch)距离不能超过50米。

     

     

    五、激活线

     

    通过激活线来激活和停用ECU的DoIP功能,可以减少电磁干扰(EMC)和边缘节点的功耗。

    激活线的激活电压和时间如下图所示:

     

     

    激活线推荐电路

     

    Activation Line Option1

     

    Activation Line Option2

     

    ISO 13400-3中给出了Option1和Option2两种激活线的推荐电路,具体元器件参数见ISO13400-3规范。

     

    OBD接口的两种布局

    ISO 13400-4中给出两种OBD接口的布局推荐,OEM可以根据自己当前车型平台OBD布局的情况酌情选择。

     

     

    A  Ethernet Rx+

    B  Ethernet Rx-

    C  Ethernet Tx+

    D  Ethernet Tx-

    E  Active line

    F  CAN_H

    G  CAN_L

     

    六、DoIP传输层要求

     

    DoIP的传输层可以使用UDP和TCP进行传输。TCP是面向连接的协议,网络中节点的应用程序可以建立彼此的连接,通过该连接可以交换数据,并保证发送方到接收方数据的可靠和有序传送。

     

    对于每个DoIP实体,IPv4和IPv6都允许使用。每个DoIP实体要执行IETF RFC 1122和IETF RFC 793中TCP的相关要求。使用IPv6的DoIP实体需执行IETF RFC 6298中TCP的相关要求。

     

    每个DoIP实体还需执行IETF RFC 1122和IETF RFC 768中与UDP相关的要求。

     

    TCP和UDP的Socket定义

     

     

    七、DoIP会话流程

     

    DoIP的会话流程如下图:

     

     

    八、结语

     

    DoIP协议涉及的内容较多,需要理解的知识面略广,今天小编只给大家做个简单的介绍。对DoIP的使用需要结合OEM的诊断架构或OTA方案进行针对性的设计,只有适合自身车型平台的方案才能为其带来技术上和成本上的双重优势。欢迎各位从事汽车诊断相关工作的专家来怿星交流讨论,怿星必将为您提供基于DoIP最合理的诊断方案。怿星官网:http://www.e-planet.cn/

    展开全文
  • 每搭建一个项目就生成单独的一个文件夹,多个项目之间彼此不干涉,也不干涉tomcat本身的文件夹。做得挺不错的。于是乎今天终于明白,它是怎么启动的了,在tomcat文件里面找不到项目的原因就在这。这么一来就搞清楚啦...

    前言

      在最初认识tomcat的时候,我知道部署web项目,就是把自己的项目打包成war然后往webapp里面一扔,tomcat就会自动将项目部署起来了,但是用IDEA的时候我总是很奇怪,它不是直接放到webapp面的,而是生成一个target目录,外加一个war文件。今天偶然间总算明白过来了,且听我慢慢道来。

    tomcat部署项目的几种方式

    1、war文件直接扔进webapp里面。这个方法是比较常见的了,就不多述了。server.xml中Host标签是有关于webapp的配置。
    2、server.xml中配置context标签,通过context的配置,可以指定某一个web应用:比如这样:

    <Context path="/A" docBase="B" />

      这里代表的是虚拟路径为A,就是映射到ip:port/A, 项目的路径是B。
    配置参数:

    • path:虚拟路径。
    • docBase:应用程序的物理路径。
    • workDir:这个应用的工作目录,存放运行时生成的与这个应用相关的文件。
    • debug:设定debug level, 0表示提供最少的信息,9表示提供最多的信息。
    • privileged:设置为true的时候,才允许Tomcat的Web应用使用容器内的Servlet。
    • reloadable:如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重起tomcat的情况下改变应用程序,实现热部署。
    • ntiResourceLocking 和antiJARLocking:热部署是需要配置的参数,默认false避免更新了某个webapp,有时候Tomcat并不能把旧的webapp完全删除,通常会留下WEB-INF/lib下的某个jar包,必须关闭Tomcat才能删除,这就导致自动部署失败。设置为true,Tomcat在运行对应的webapp时,会把相应的源文件和jar文件复制到一个临时目录里。

    3、进入tomcat目录里面的conf/Catalina/localhost,新建一个xml文件,记住名字和path后面的要一致,是根据这个来确定项目名称的,Context标签的配置一样。
    这里写图片描述

    小结一下:
      如果项目在webapp里面,那么你只要移除webapp包就可以了,这种做法不会在server.xml中和Catalina里面留下什么,如果是用别的方法就要注意了,移走项目的同时,需要移除相关的配置。

    IDEA部署tomcat的原理

      你知道IDEA是如何部署tomcat项目的嘛?在我最初的时候,我跟着网上的配置啪啪啪一顿操作,让服务器运行起来了,但是我却不知道它是如何运作的。为什么就能访问了呢?先看这里

    /home/dream/apache-tomcat-9.0.11/bin/catalina.sh run
    Using CATALINA_BASE:   /home/dream/.IntelliJIdea2018.1/system/tomcat/Unnamed_day19_privilege_3
    Using CATALINA_HOME:   /home/dream/apache-tomcat-9.0.11
    Using CATALINA_TMPDIR: /home/dream/apache-tomcat-9.0.11/temp
    Using JRE_HOME:        /usr/lib/jvm/jdk-9.0.4
    NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
    Using CLASSPATH:       /home/dream/apache-tomcat-9.0.11/bin/bootstrap.jar:/home/dream/apache-tomcat-9.0.11/bin/tomcat-juli.jar

      这是截取的一段IDEA启动过程,一开始我也没有发现什么问题,但是如果我们终端启动tomcat的话对比看看.
    这里写图片描述
      不难发现,这个里面的区别就在于它的CATALINA_BASE,这个目录放的是工作目录,HOME是安装的位置,每一个tomcat实例都有自己的工作目录,包括conf、log、work等。分别放配置文件,日志,jsp->servlet的地方。打开tomcat文件我们也可以看见这些。
    这里写图片描述

    IDEA的tomcat项目发布方式

      我觉得IDEA是做的比较好的,在我之前的eclipse时候它是直接发布到tomcat webapp里面的,并且在server.xml文件里面还配置了context标签,IDEA的做法我们可以看看。
    tomcat配置文件路径图:
    这里写图片描述
    目录树结构:
    这里写图片描述
    这个上面的.0后缀文件我看了一下,它是原来tomcat的文件,复制了一份过来,用意不太知道,可能是IDEA它自己做了些修改吧。
    xml文件:
    这里写图片描述
      不难看出IDEA采用的就是上面描述的第三种方式,在localhost里面配置上了xml文件映射项目的context。每搭建一个项目就生成单独的一个文件夹,多个项目之间彼此不干涉,也不干涉tomcat本身的文件夹。做得挺不错的。于是乎今天终于明白,它是怎么启动的了,在tomcat文件里面找不到项目的原因就在这。这么一来就搞清楚啦~挺好的。

    展开全文
  • 程序员需要了解的硬核知识之磁盘

    千次阅读 2019-11-01 12:35:13
    我们大家知道,计算机的五大基础部件是 存储器、控制器、运算器、输入和输出设备,其中从存储功能的角度来看,可以把存储器分为内存和 磁盘,内存我们上面的文章已经介绍过了,那么此篇文章我们来介绍一下磁盘以及...

    此篇文章是 《程序员需要了解的硬核知识》系列第四篇,历史文章请戳

    程序员需要了解的硬核知识之内存

    程序员需要了解的硬核知识之CPU

    程序员需要了解的硬核知识之二进制

    我们大家知道,计算机的五大基础部件是 存储器控制器运算器输入和输出设备,其中从存储功能的角度来看,可以把存储器分为内存磁盘,内存我们上面的文章已经介绍过了,那么此篇文章我们来介绍一下磁盘以及内存和磁盘的关系。

    认识磁盘

    首先,磁盘和内存都具有存储功能,它们都是存储设备。区别在于,内存是通过电流 来实现存储;磁盘则是通过磁记录技术来实现存储。内存是一种高速,造假昂贵的存储设备;而磁盘则是速度较慢、造假低廉的存储设备;电脑断电后,内存中的数据会丢失,而磁盘中的数据可以长久保留。内存是属于内部存储设备,硬盘是属于 外部存储设备。一般在我们的计算机中,磁盘和内存是相互配合共同作业的。

    一般内存指的就是主存(负责存储CPU中运行的程序和数据);早起的磁盘指的是软磁盘(soft disk,简称软盘),就是下面这个

    (2000年的时候我曾经我姑姑家最早的计算机中见到过这个,当时还不知道这是啥,现在知道了。)

    如今常用的磁盘是硬磁盘(hard disk,简称硬盘),就是下面这个

    程序不读入内存就无法运行

    在了解磁盘前,还需要了解一下内存的运行机制是怎样的,我们的程序被保存在存储设备中,通过使用 CPU 读入来实现程序指令的执行。这种机制称为存储程序方式,现在看来这种方式是理所当然的,但在以前程序的运行都是通过改变计算机的布线来读写指令的。

    计算机最主要的存储部件是内存和磁盘。磁盘中存储的程序必须加载到内存中才能运行,在磁盘中保存的程序是无法直接运行的,这是因为负责解析和运行程序内容的 CPU 是需要通过程序计数器来指定内存地址从而读出程序指令的。

    磁盘构件

    磁盘缓存

    我们上面提到,磁盘往往和内存是互利共生的关系,相互协作,彼此持有良好的合作关系。每次内存都需要从磁盘中读取数据,必然会读到相同的内容,所以一定会有一个角色负责存储我们经常需要读到的内容。 我们大家做软件的时候经常会用到缓存技术,那么硬件层面也不例外,磁盘也有缓存,磁盘的缓存叫做磁盘缓存

    磁盘缓存指的是把从磁盘中读出的数据存储到内存的方式,这样一来,当接下来需要读取相同的内容时,就不会再通过实际的磁盘,而是通过磁盘缓存来读取。某一种技术或者框架的出现势必要解决某种问题的,那么磁盘缓存就大大改善了磁盘访问的速度

    Windows 操作系统提供了磁盘缓存技术,不过,对于大部分用户来说是感受不到磁盘缓存的,并且随着计算机的演进,对硬盘的访问速度也在不断演进,实际上磁盘缓存到 Windows 95/98 就已经不怎么使用了。

    把低速设备的数据保存在高速设备中,需要时可以直接将其从高速设备中读出,这种缓存方式在web中应用比较广泛,web 浏览器是通过网络来获取远程 web 服务器的数据并将其显示出来。因此,在读取较大的图片的时候,会耗费不少时间,这时 web 浏览器可以把获取的数据保存在磁盘中,然后根据需要显示数据,再次读取的时候就不用重新加载了。

    虚拟内存

    虚拟内存是内存和磁盘交互的第二个媒介。虚拟内存是指把磁盘的一部分作为假想内存来使用。这与磁盘缓存是假想的磁盘(实际上是内存)相对,虚拟内存是假想的内存(实际上是磁盘)。

    虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个完整的地址空间),但是实际上,它通常被分割成多个物理碎片,还有部分存储在外部磁盘管理器上,必要时进行数据交换。

    计算机中的程序都要通过内存来运行,如果程序占用内存很大,就会将内存空间消耗殆尽。为了解决这个问题,WINDOWS 操作系统运用了虚拟内存技术,通过拿出一部分硬盘来当作内存使用,来保证程序耗尽内存仍然有可以存储的空间。虚拟内存在硬盘上的存在形式就是PAGEFILE.SYS 这个页面文件。

    通过借助虚拟内存,在内存不足时仍然可以运行程序。例如,在只剩 5MB 内存空间的情况下仍然可以运行 10MB 的程序。由于 CPU 只能执行加载到内存中的程序,因此,虚拟内存的空间就需要和内存中的空间进行置换(swap),然后运行程序。

    虚拟内存与内存的交换方式

    刚才我们提到虚拟内存需要和内存中的部分内容做置换才可让 CPU 继续执行程序,那么做置换的方式是怎样的呢?又分为哪几种方式呢?

    虚拟内存的方法有分页式分段式 两种。Windows 采用的是分页式。该方式是指在不考虑程序构造的情况下,把运行的程序按照一定大小的页进行分割,并以为单位进行置换。在分页式中,我们把磁盘的内容读到内存中称为 Page In,把内存的内容写入磁盘称为 Page Out。Windows 计算机的页大小为 4KB ,也就是说,需要把应用程序按照 4KB 的页来进行切分,以页(page)为单位放到磁盘中,然后进行置换。

    为了实现内存功能,Windows 在磁盘上提供了虚拟内存使用的文件(page file,页文件)。该文件由 Windows 生成和管理,文件的大小和虚拟内存大小相同,通常大小是内存的 1 - 2 倍。

    节约内存

    Windows 是以图形界面为基础的操作系统。它的前身是 MS-DOC,最初的版本可以在 128kb 的内存上运行程序,但是现在想要 Windows 运行流畅的花至少要需要 512MB 的内存,但通常往往是不够的。

    也许许多人认为可以使用虚拟内存来解决内存不足的情况,而虚拟内存确实能够在内存不足的时候提供补充,但是使用虚拟内存的 Page In 和 Page Out 通常伴随着低速的磁盘访问,这是一种得不偿失的表现。所以虚拟内存无法从根本上解决内存不足的情况。

    为了从根本上解决内存不足的情况,要么是增加内存的容量,加内存条;要么是优化应用程序,使其尽可能变小。第一种建议往往需要衡量口袋的银子,所以我们只关注第二种情况。

    注意:以下的篇幅会涉及到 C 语言的介绍,是每个程序员(不限语言)都需要知道和了解的知识。

    通过 DLL 文件实现函数共有

    DLL(Dynamic Link Library)文件,是一种动态链接库 文件,顾名思义,是在程序运行时可以动态加载 Library(函数和数据的集合)的文件。此外,多个应用可以共有同一个 DLL 文件。而通过共有一个 DLL 文件则可以达到节约内存的效果。

    例如,假设我们编写了一个具有某些处理功能的函数 MyFunc()。应用 A 和 应用 B 都需要用到这个函数,然后在各自的应用程序中内置 MyFunc()(这个称为Static Link,静态链接)后同时运行两个应用,内存中就存在了同一个函数的两个程序,这会造成资源浪费。

    为了改变这一点,使用 DLL 文件而不是应用程序的执行文件(EXE文件)。因为同一个 DLL 文件内容在运行时可以被多个应用共有,因此内存中存在函数 MyFunc()的程序就只有一个

    Windows 操作系统其实就是无数个 DLL 文件的集合体。有些应用在安装时,DLL文件也会被追加。应用程序通过这些 DLL 文件来运行,既可以节约内存,也可以在不升级 EXE 文件的情况下,通过升级 DLL 文件就可以完成更新。

    通过调用 _stdcall 来减少程序文件的大小

    通过调用 _stdcall 来减小程序文件的方法,是用 C 语言编写应用时可以利用的高级技巧。我们来认识一下什么是 _stdcall。

    _stdcall 是 standard call(标准调用)的缩写。Windows 提供的 DLL 文件内的函数,基本上都是通过 _stdcall 调用方式来完成的,这主要是为了节约内存。另一方面,用 C 语言编写的程序默认都不是 _stdcall 。C 语言特有的调用方式称为 C 调用。C 语言默认不使用 _stdcall 的原因是因为 C 语言所对应的函数传入参数是可变的,只有函数调用方才能知道到底有多少个参数,在这种情况下,栈的清理作业便无法进行。不过,在 C 语言中,如果函数的参数和数量固定的话,指定 _stdcall 是没有任何问题的。

    C 语言和 Java 最主要的区别之一在于 C 语言需要人为控制释放内存空间

    C 语言中,在调用函数后,需要人为执行栈清理指令。把不需要的数据从接收和传递函数的参数时使用的内存上的栈区域中清理出去的操作叫做 栈清理处理

    例如如下代码

    // 函数调用方
    void main(){
      int a;
      a = MyFunc(123,456);
    }
    
    // 被调用方
    int MyFunc(int a,int b){
      ...
    }
    

    代码中,从 main 主函数调用到 MyFunc() 方法,按照默认的设定,栈的清理处理会附加在 main 主函数这一方。在同一个程序中,有可能会多次调用,导致 MyFunc() 会进行多次清理,这就会造成内存的浪费。

    汇编之后的代码如下

    push 1C8h								// 将参数 456( = 1C8h) 存入栈中
    push 7Bh								// 将参数 123( = 7Bh) 存入栈中
    call @LTD+15 (MyFunc)(00401014)			// 调用 MyFunc 函数
    add esp,8								// 运行栈清理
    

    C 语言通过栈来传递函数的参数,使用 push 是往栈中存入数据的指令,pop 是从栈中取出数据的指令。32 位 CPU 中,1次 push 指令可以存储 4 个字节(32 位)的数据。上述代码由于进行了两次 push 操作,所以存储了 8 字节的数据。通过 call 指令来调用函数,调用完成后,栈中存储的数据就不再需要了。于是就通过 add esp,8 这个指令,使存储着栈数据的 esp 寄存器前进 8 位(设定为指向高 8 位字节的地址),来进行数据清理。由于栈是在各种情况下都可以利用的内存领域,因此使用完毕后有必要将其恢复到原始状态。上述操作就是执行栈的清理工作。另外,在 C 语言中,函数的返回值,是通过寄存器而非栈来返回的。

    栈执行清理工作,在调用方法处执行清理工作和在反复调用方法处执行清理工作不同,使用 _stdcall 标准调用的方式称为反复调用方法,在这种情况下执行栈清理开销比较小。

    磁盘的物理结构

    之前我们介绍了CPU、内存的物理结构,现在我们来介绍一下磁盘的物理结构。磁盘的物理结构指的是磁盘存储数据的形式

    磁盘是通过其物理表面划分成多个空间来使用的。划分的方式有两种:可变长方式扇区方式。前者是将物理结构划分成长度可变的空间,后者是将磁盘结构划分为固定长度的空间。一般 Windows 所使用的硬盘和软盘都是使用扇区这种方式。扇区中,把磁盘表面分成若干个同心圆的空间就是 磁道,把磁道按照固定大小的存储空间划分而成的就是 扇区

    扇区是对磁盘进行物理读写的最小单位。Windows 中使用的磁盘,一般是一个扇区 512 个字节。不过,Windows 在逻辑方面对磁盘进行读写的单位是扇区整数倍簇。根据磁盘容量不同功能,1簇可以是 512 字节(1 簇 = 1扇区)、1KB(1簇 = 2扇区)、2KB、4KB、8KB、16KB、32KB( 1 簇 = 64 扇区)。簇和扇区的大小是相等的。

    不管是硬盘还是软盘,不同的文件是不能存储在同一簇中的,否则就会导致只有一方的文件不能删除。所以,不管多小的文件,都会占用 1 簇的空间。这样一来,所有的文件都会占用 1 簇的整数倍的空间。

    我们使用软盘做实验会比较简单一些,我们先对软盘进行格式化,格式化后的软盘空间如下

    接下来,我们保存一个 txt 文件,并在文件输入一个字符,这时候文件其实只占用了一个字节,但是我们看一下磁盘的属性却占用了 512 字节

    然后我们继续写入一些东西,当文件大小到达 512 个字节时,已用空间也是 512 字节,但是当我们继续写入一个字符时,我们点开属性会发现磁盘空间会变为 1024 个字节(= 2 簇),通过这个实验我们可以证明磁盘是以簇为单位来保存的。

    文章参考:

    磁盘

    磁盘缓存

    虚拟内存

    《程序是怎样跑起来的 第四章》

    http://www.intohard.com/article-436-1.html

    下面为自己做个宣传,欢迎关注公众号 Java建设者,号主是Java技术栈,热爱技术,喜欢阅读,热衷于分享和总结,希望能把每一篇好文章分享给成长道路上的你。关注公众号回复 002 领取为你特意准备的大礼包,你一定会喜欢并收藏的。

    展开全文
  • 在讲解 802.11协议前,我们需要先了解一下 WLAN拓扑结构。 首先,我们需要理解一下 STA 和 AP的区别,请自行参考博主以前的文章。而针对它们的组合方式又分为三种拓扑结构: 独立的基本服务集网络(IBSS,也...
  • 嵌套允许逻辑上属于同一代码实体,但被编译为不同类文件的类,无需编译器插入可访问性扩展桥接方法,即可访问彼此的私有成员。 动态类文件常量 扩展 Java 类文件格式以支持新的常量池形式,CONSTANT_Dynamic...
  • Android之了解ThreadLocal

    万次阅读 2018-02-25 09:36:09
    总结,不同线程访问同一个ThreadLocal对象,ThreadLocal对象维护一套数据的副本并且彼此互不干扰。 工作原理 get方法 get() 方法源码如下: public T get() { //以当前线程作为getMap()方法的参数。 ...
  • 快速了解UDP协议

    千次阅读 2019-06-23 08:00:00
    QQ客户端之间的消息传送也采用了UDP模式,因为国内的网络环境非常复杂,而且很多用户采用的方式是通过代理服务器共享一条线路上网的方式,在这些复杂的情况下,客户端之间能彼此建立起来TCP连接的概率较小,严重影响...
  • 程序员需要了解的硬核知识之CPU

    千次阅读 多人点赞 2019-10-21 13:14:54
    我们生而为人最明显的一个特征是我们能通过讲话来实现彼此的交流,但是计算机听不懂你说的话,你要想和他交流必须按照计算机指令来交换,这就涉及到语言的问题,计算机是由二进制构成的,它只能听的懂二进制也就是 ...
  • 了解Sidecar模式

    万次阅读 多人点赞 2019-01-28 23:56:34
    因此,组件和应用程序彼此之间具有密切的相互依赖性。 如果将应用程序分解为服务,则可以使用不同的语言和技术构建每个服务。虽然这提供了更大的灵活性,但这意味着每个组件都有自己的依赖关系,并且需要特定于...
  • 请思考一下再往下看 小问题二:长度为n的字符串有多少个子串?多少个子序列? 一、分析枚举的效率 二、初步优化 问题三:怎么用对称轴向两边扩的方法找到偶回文?(容易操作的) 那么请问,加进去的符号,有什么要求...
  • 程序员不得不了解的硬核知识大全

    万次阅读 多人点赞 2020-01-15 11:51:39
    我们每个程序员或许都有一个梦,那就是成为大牛,我们或许都沉浸在各种框架中,以为框架就是一切,以为应用层才是最重要的,你错了。...现在就带你了解一下 CPU 是什么 CPU 的全称是 Central Processin...
  • 五句话了解区块链,扫盲系列

    万次阅读 多人点赞 2018-03-22 09:16:56
    区块链解决的是生产关系的问题,也就是信任的问题,想一下为什么淘宝需要有支付宝,因为如果没拿到货而直接付钱,卖家不发货怎么办?需要担保机制,这就是买卖间彼此不信任的问题。2.区块链的核心技术理论是啥?
  • 一篇文章了解新发布的Java JDK 11

    万次阅读 2018-09-27 17:44:39
    嵌套允许逻辑上属于同一代码实体的类,但编译为不同的类文件以访问彼此的私有成员,而无需编译器插入可访问性扩展桥接方法。 传输层安全性(TLS)1.3 ,其中TLS协议的这种大修将适用于JDK 11,从而提供显着的...
  • 深入了解selenium及webdriver原理

    万次阅读 2017-08-11 21:25:08
     关于WebDriver Wire协议的细节,比如希望了解这套Web Service能够做哪些事情,可以阅读Selenium官方的协议文档, 在Selenium的源码中,我们可以找到一个HttpCommandExecutor这个类,里面维护了一个Map, Command...
  • 早在2013年的时候,docker就已经发行,然而那会还是很少人了解docker。一直到2014年,Martin Fowler提出了微服务的概念,两个不相干的技术终于走在了一起,创造了今天的辉煌 什么是Docker Docker 是一个开源...
  • ROS就是专门为这样的团队设计的,在彼此工作的基础之上协作设计开发机器人软件。 贡献者 Contributors  http://www.ros.org/contributors/ 历史 History  http://www.ros.org/history/ 学习ROS最重要的两个网址...
  • 有一句话说:面试就像谈恋爱,只有彼此对上眼,情感产生共鸣时,方可成交! 今天就来和大家聊一聊面试中我们回答完面试官的问题后,突然来一句:你对我们公司还有什么想了解的吗?大部分面试者是不是经常被面试...
  • 深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。 点我访问 21 nonos2.0 浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。 ...
  • 深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。 点我访问 21 nonos2.0 浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。 ...
  • 深入学习esp8266的esp now模式,仿机智云做一个小网关,实现无需网络下轻松彼此连接通讯交互数据。 21、 Esp8266进阶之路 : 浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。 22、...
  • {{ firstNum }} {{ secondNum }} {{ thirdNum }} 将这个demo页面植入你项目中某个界面去运行感受一下,输出结果如下: 页面显示值:2 200 200 控制台输出结果: 综上所述,他们彼此间的生命周期先后顺序是这样的: ...
  • 人工智能时代,所需要了解人工智能的基本常识

    万次阅读 多人点赞 2018-12-10 22:49:44
    国内对于人工智能的讨论大多是不成体系的碎片式,很难从中深入了解人工智能的发展脉络和技术体系,也很难有实际借鉴意义。人工智能的历史、核心技术和应用情况进行了详细说明,尤其是其中重要的认知技术。这份报告将...
  • 这一块我还真不了解,就不说了,怕误人子弟!!! General Empty Project 就是创建一个空的工程,不给你添加任何.cpp或.h文件,不进行任何特殊的设置。 Custom Wizard 就是用户自定义向导,...
  • 在被这项科研成果刷屏之后,我们来了解一下该算法背后的数据集。 关键词:蛋白质折叠 PDB 数据集 这两天,我们被 DeepMind 的新一代人工智能算法 AlphaFold 2 刷屏了,尤其是生物界,可谓迎来了里程碑式的大突破。 ...
  • 区块链和比特币初步了解

    千次阅读 多人点赞 2019-10-29 19:26:46
    最近这几天区块链被再一次提到了风口,这次不一样,xxx代言,xxx支持的,作为一个IT人,应该了解下。而且不能太粗略。 一、先过一些基本概念 区块链和比特币 首先这是两个概念,区块链是技术范畴,比特币更像...
  • 带你了解Workday的前生今世(一)

    千次阅读 2017-11-29 22:16:59
    带你了解Workday的前生今世(一) 日期: 2014-05-13 作者:Jamie Lawrence翻译:杨琪 来源:TechTarget中国 英文 Workday人力资源管理 从诞生伊始,企业人力资源技术...
  • 标题:了解什么是数据库、数据表、字段、等概念 (1)数据库:数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。数据库是以一定方式储存...
  • 8000字干货:那些很厉害的人是怎么构建知识体系的

    万次阅读 多人点赞 2019-09-29 11:18:27
    因为飞将军没有像老安和黑子那样直接给一个前脚掌先着地或脚后跟先着地的建议,而是先望闻问切,从各个方面了解小张的情况,然后才给出适合小张的建议。 那为什么他能够做到这一点呢? 因为飞将军在跑步这个领域...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 145,903
精华内容 58,361
关键字:

彼此了解一下