• 常用的RPM管理工具笔记
    RPM概述RPM( Redhat Package Manager)是openEuler、Redhat、CentOS、Fedora等Linux操作系统中的软件包管理器。RPM所涉命令集:rpm:用来手动安装、卸载、查询、升级rpm包rpmbuild:用来把源码编译成RPM包rpmdevtool:用来创建rpmbuild目录、SPEC文件等RPM具备以下优点:内含编译程序,免编译。预先检查系统版本,可避免文件被错误安装。提供软件版本资讯,软件名称软件用途等相关信息,便于了解软件。使用数据库记录RPM文件的相关参数,便于升级、移除、查询与验证。rpm命令集简介命令格式 rpm [OPTION...]部分参数说明 -ivh            //安装并显示安装进度和详细信息 -qa            //列出已安装在本机上的应用 -va            //列出本机上可能被修改过的应用 -e              //卸载应用-Uvh          //升级软件包--Update;-qpl          //列出RPM软件包内的文件信息[Query Package list]-qpi          //列出RPM软件包的描述信息[Query Package install package(s)]-qf           //查找指定文件属于哪个RPM软件包[Query File]注:rpmbulid构建必须选择下列"模式"之一:(1)从spec构建,(2)从Tar构建,(3)重新构建,(4)重新编译,(5)显示配置rpmbuild部分参数命令介绍命令格式 rpmbuild [OPTION...]部分参数说明 -bp          //只作准备(解压与打补丁) -bc           //准备并编译 -bi           //编译并安装 -bl           //检验文件是否齐全 -ba         //编译后生成*.rpm和src.rpm -bb        //编译后生成*.rpm -bs        //只生成*.src.rpmrpmbuild目录介绍rpmbuild目录是可以由命令rpmdev-setuptree自动生成Rpmbuild目录的具体路径及用途如下:RPM可以让用户直接以binary方式安装软件包,并且可替用户查询是否已经安装了有关的库文件;在用RPM删除程序时,它又会聪明地询问用户是否要删除有关的程序.如果想发布RPM格式的源码包或者是二进制包,就要使用rpmbulid工具(RPM最新打包工具)RPM 与rmpbulid之间的关系是RPM工具负责安装由rpmbulid编译生成的二进制文件RPM包。重点:什么是spec(配置规范文件)? RPM编译过程的核心是处理.spec文件它说明了软件包怎样被配置,补缀哪些补丁,安装哪些文件,被安装到哪里,在安装该包之前或之后需要运行那些系统级别的活动。它必须手写,但更简单的办法是拿来他人写好的,在此基础上修改。RPM自身对于你能在spec文件中做什么没有太多限制,所以你可以弄的很复杂。
  • 操作系统发展与概述笔记分享
    什么是操作系统?操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。在计算机中,操作系统是其最基本也是最为重要的基础性系统软件。从计算机用户的角度来说,计算机操作系统体现为其提供的各项服务;从程序员的角度来说,其主要是指用户登录的界面或者接口;如果从设计人员的角度来说,就是指各式各样模块和单元之间的联系。经过几十年以来的发展,计算机操作系统已经成为既复杂而又庞大的计算机软件系统之一。首先,微型计算机系统会被分为硬件系统和软件系统两个部分。在硬件系统当中又有主机和外设两个主要的分类,主机当中所包含的就是CPU、存储等设备。除此之外,外设就是外部设备,这当中包含的就是电脑外部的一些设备,如鼠标、键盘、磁盘、显示器等。之后在软件系统当中,这一部分也被分为了系统软件和应用软件两个部分。其中系统软件当中就有操作系统和其他需要使用到的如开发工具、诊断程序等。应用软件当中所包含的就是平时生活中会使用到的软件,如word、PowerPoint等办公软件。现代计算机系统由一个或多个处理器、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口以及其他输入/输出设备组成。一般而言,现代计算机系统是一个复杂的系统。如果每位应用程序员都不得不掌握系统的所有细节,那就不可能在编写代码了。而且,管理这些部件并加以优化使用,是一件挑战性极强的工作。所以,计算机安装了一层软件,称为操作系统,它的任务是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。所以,操作系统是一个管理和控制所有软硬件资源的程序,说到底,操作系统的本质是一个程序。但是这个程序是在电脑上运行其他程序的基础,也是核心,它是必不可少的。只有有了操作系统之后用户才能在电脑运行其他的程序,控制用户手中的硬件如键盘、鼠标,还有电脑主机内的CPU、内存等。操作系统和普通应用程序的差异并不仅仅在于它们所处的地位。特别地,操作系统更加大型、复杂和长寿。Linux或 Windows操作系统的源代码有500万行甚至更高的数量级。所以操作系统寿命比较长的原因就在于操作系统的很难编写的,一旦编写完成,操作系统的所有者当然不愿意把它扔掉,再写一个。相反,操作系统会在长时间内进行演化。操作系统的历史1、第一代操作系统始于20世纪40年代,在那个年代里,同一小组的工程师设计、建造、变成、操作并维护一台机器。所有的程序设计都是用纯粹的机器语言编写的,甚至需要通过将上千根电缆接到插件板连接电路,以便控制机器的基本功能。没有程序设计语言,甚至没有汇编语言,操作系统则从来没有听说过,因为所有的操作都是由人们的操作控制所完成的。使用机器的一般方式是,程序员在墙上的机时表上预约一段时间,然后到机房中将它的插件板接到计算机里,在接下来的几小时里,期盼正在运行中的两万多个真空管不会烧坏。那时,所有的计算问题实际上都只是简单的数学运算,如制作正弦、余弦、对数表或者计算炮弹弹道等。到了20世纪50年代初有了改进,出现了穿孔卡片,这时就可以将程序写在卡片上,然后读入计算机而不用插件板,但其他的过程则依然如旧。在50年代后期,晶体管的发明极大地改变了整个状况。厂商可以成批地生产并销售计算机给用户,用户可以指望计算机长时间运行,完成一些有用的工作。2、第二代操作系统即批处理操作系统,由于当时的计算机非常昂贵,人们很自然地要想办法减少机时的浪费。批处理操作系统单道批处理系统:系统对作业的处理是成批进行的,但内存中始终保持一道作业。多道批处理系统:允许多个程序同时进入内存并运行。分时操作系统以时间片为单位轮流为各个用户、作业服务,各个用户可通过终端与计算机进行交互。实时操作系统保证在一定时间限制内完成特定功能的操作系统。实时操作系统有软实时系统和硬实时系统之分。网络操作系统/分布式操作系统网络中各种资源的共享以及各台计算机之间的通信。分布式操作系统与网络操作系统本质上的不同之处在于分布式操作系统中,若干台计算机协同完成同一任务。操作系统的发展互联网时代–>移动互联网时代–>物联网时代随着技术的不断发展,计算机由一开始的使用晶体管到集成电路再到大规模集成电路发展到现在的微型计算机。同时,现代社会也由使用计算机的互联网时代,再到使用移动计算机(即手机)的移动互联网时代,之后再往物联网时代发展。到了物联网时代,物联网中的终端设备是多种多样,同时它的架构、协议等等也是十分复杂的。在物联网时代,要去构建一个统一管理的操作系统是非常有必要的同时难度也是非常大的。所以,构建一个物联网的操作系统真的那么重要吗?答案是肯定的。不难发现,每一代电子设备的竞争最终都会归结为操作系统的竞争。比方说互联网时代当中的电脑,最终取得电脑操作系统胜利的无疑是windows。在移动互联网时代的手机的操作系统上,独占鳌头的两方一个是安卓,另一个是苹果iOS。到了物联网时代,情况也是一样,现在可能所有企业都还在发展的阶段,并没有太多的物联网操作系统在这个产业内进行竞争,但是到了最后,肯定会只剩下一款到两款的操作系统来引领物联网整个行业的发展。物联网的操作系统虽然是起始于物联网,但是终点永远不可能仅仅只是物联网。因为跟电脑和手机相比,物联网更像是一张把所有电子设备都联系在一起的网,只能说是起到了辅助的作用。所以物联网操作系统的目标应该放在哪里呢?其实是可以被放在可穿戴设备——VR、AR 上面,Facebook 的创始人扎克伯格先生曾经也讲过,VR会是下一代社交平台。所以VR、AR的设备,也极有可能会成为下一代人机交互的方式,为什么这么说呢?读者们可以来想一下,随着5G的发展,网络的传输速率会得到很大的提高,等到科技越来越先进,当大家在家办公时,与其他同事的沟通会变得更加方便。随着AR、VR技术的不断发展,只要戴上了VR或者是AR设备,用户就可以面对面的交流了,这样不管是工作也好,娱乐也好,都会对当前的生活方式产生改变。比方说有一家英国的航空公司开发了一项业务,在乘客前往飞机目的地之前,他们可以让用户沉浸式的体验一下去到目的地旅游的感受,达到远程旅游的体验。除此之外,VR设备还可以帮助人们进行远程医疗等等,所以说,AR,VR设备成为下一代的人机交互的方式是非常有潜力的。所以物联网操作系统的目标就在于如何做好物联网上的操作系统的同时,也去向新一代人机交互方式AR、VR这一个方向去发展。把这样一款操作系统也应用到AV、VR的设备上去,所以说构建一个物联网时代的操作系统是非常重要的。
  • 存储磁盘阵列 RAID5小实践
    RAID概念与实现方式      RAID(Redundant Array of Independent Disks):独立冗余磁盘阵列,简称磁盘阵列。RAID是按照一定的形式和方案组织起来的存储设备,它比单个存储设备在速度、稳定性和存储能力上都有很大提高,并且具备一定的数据安全保护能力。RAID 的主要实现方式分为硬件RAID 方式和软件RAID 方式:硬件RAID:利用集成了处理器的硬件RAID适配卡来对RAID任务进行处理,无须占用主机CPU资源。软RAID:通过软件技术实现,需要操作系统支持,一般不能对系统磁盘实现RAID功能。RAID数据保护机制---热备与重构热备(Hot Spare):当冗余的RAID阵列中某个磁盘失效时,在不干扰当前RAID系统正常使用的情况下,用RAID系统中另外一个正常的备用磁盘顶替失效磁盘。热备通过配置热备盘实现,热备盘分为全局热备盘和局部热备盘RAID5:分布式奇偶校验的独立磁盘结构      从它的示意图上可以看到,它的奇偶校验码存在于所有磁盘上,其中的p0代表第0带区的奇偶校验值,其它的意思也相同。RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性。但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。RAID 3 与RAID 5相比,重要的区别在于RAID 3每进行一次数据传输,需涉及到所有的阵列盘。而对于RAID 5来说,大部分数据传输只对一块磁盘操作,可进行并行操作。在RAID 5中有“写损失”,即每一次写操作,将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。1.在VM中新建了三块200M的硬盘.用于实验.如下图所示:2.查看当前系统识别到的磁盘设备#查看当前系统识别到的磁盘设备cat /proc/partitions 3.用fdisk命令初始化三块新硬盘,设置如下图所示:fdisk /dev/sdc4.RAID5磁盘阵列的硬盘使用情况.如下图所示:fdisk -l5、开始创建磁盘阵列mdadm --creat /dev/md0 --level=5 --raid-devices=3 /dev/sd{c,d,e}16、为新建的/dev/md0建立类型为ext3的文件系统mkfs –t ext3 –c /dev/md07、查看创建效果mdadm --detail /dev/md08、新建目录mkdir /mnt/raid5xmount /dev/md0 /mnt/raid5x9、拷贝文件到磁盘阵列cp 任意文件 /mnt/raid5xll /mnt/raid5x10、实现服务器启动自动挂载磁盘阵列vi /etc/fstab重启之后md0自动变为md127,需要重新进入VI修改为md127重启后最终验证
  • python多线程
     Python多线程类似于同时执行多个不同程序,但其执行过程中和进程还是有区别的,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。  Python多线程优点  1. 使用线程可以把占据长时间的程序中的任务放到后台去处理;  2. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度;  3. 程序的运行速度可能加快;  4. 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。  Python多线程使用方法  Python中使用线程有两种方式,分别是函数或者用类来包装线程对象。  用函数来包装线程对象的方式  用函数来包装线程对象的方式是调用thread模块中的start_new_thread()函数来产生新线程,线程的结束一般依靠线程函数的自然结束,也可以在线程函数中调用thread.exit()以达到退出线程的目的。具体语法如下:  thread.start_new_thread ( function, args[, kwargs] )
  • 存储服务2024.2月技术干货合集
    技术干货RFID射频识别技术特点笔记分享https://bbs.huaweicloud.com/forum/thread-02127143553077714028-1-1.html敏捷项目管理基础笔记分享https://bbs.huaweicloud.com/forum/thread-02101144401813952024-1-1.htmlJAVAweb中servlet 的生命周期https://bbs.huaweicloud.com/forum/thread-0240144402208678038-1-1.html在JAVAweb中我们常说的重定向和转发是什么https://bbs.huaweicloud.com/forum/thread-02101144402338017025-1-1.htmlSSH 组合框架模式小知识分享https://bbs.huaweicloud.com/forum/thread-0269144402445122035-1-1.html项目开发中常用乱码解决手段分享https://bbs.huaweicloud.com/forum/thread-0264144402483066029-1-1.htmlMVC架构知识点https://bbs.huaweicloud.com/forum/thread-02127144402586510031-1-1.html轻松快速地调整Kubernetes的CPU和内存https://bbs.huaweicloud.com/forum/thread-02101144403362632026-1-1.htmlLinux中可引起文件时间戳改变的相关命令https://bbs.huaweicloud.com/forum/thread-0264144403449873030-1-1.htmlNB-IoT 技术亮点&行业挑战https://bbs.huaweicloud.com/forum/thread-02104144464580188001-1-1.html物联网SIM卡和手机SIM卡真的是一回事吗?https://bbs.huaweicloud.com/forum/thread-0259144464674802001-1-1.html一文看懂华为云IoT第三方物联网业务无感迁移方案https://bbs.huaweicloud.com/forum/thread-0225144465684135001-1-1.html蜂窝移动通信技术笔记分享https://bbs.huaweicloud.com/forum/thread-0225144465847729002-1-1.htmlLPWA 通信技术笔记分享https://bbs.huaweicloud.com/forum/thread-0259144483762015002-1-1.html
  • LPWA 通信技术笔记分享
    1.SigFox            SigFox 是一家法国的物联网技术创业公司,它的公司叫 SigFox,它的这项技术的名字也叫 SigFox。SigFox 这项技术专门为那些吞吐率很低的项目所设计,它的传输功耗很低,只有 50-100 微瓦,但是仍然能维持比较稳定的数据连接。但是呢,因为物联网设备会产生大量的 数据,并且这些数据由 SigFox 公司自己来进行存储。但是 SigFox 毕竟是一家小公司,自己 保存着这些数据公信力不足,同样在信息安全方面也存在疑问,所以它的使用并没有像 LoRa 一样非常广泛。2.LoRa            LoRa 是 Long Range 的缩写,它跟 SigFox 不一样的是他由 LoRa 联盟维护管理。LoRa 技术 由 Semtech 公司开发,之后经过 LoRa 联盟的共同努力,他们开发出了应用于 LPWA 领域的 网络,叫做 LoRaWAN。它是一项基于扩频技术的超远距离无线传输方案,以此来达到长距 离和低功耗的要求,这项技术主要在未授权频段来支撑。Lora 可以应用于自动抄表、智能家 居和楼宇自动化、无线预警和安全系统、工业监测和控制以及远程灌溉系统等等。3.NB-IoT              NB-IoT 最早是由华为和沃达丰主导提出来的,之后加入了爱立信和高通等一些公司。它的特 点就在于 NB-IoT 叫窄带蜂窝物联网,所以它构建于现有的蜂窝网络。同时因为它是窄带,所 以他只消耗大约 180KHz 的带宽,可直接部署于 GSM 网络、UMTS 网络或 LTE 网络,以降 低部署成本、实现平滑升级。4.eMTC            在 LPWA 技术当中最后一个要描述的就是爱立信基于 4G 网络提出的解决方案 eMTC,它主 要面向深度覆盖、大连接的应用场景。与 NB-IoT 相比,它的速率更高但是覆盖范围要更小, 并且功耗也比较大。但是,虽然与 NB-IoT 相比它的覆盖范围更小,功耗也更大,但是它具备 语音通信的能力。所以相较于 NB-IoT,它可以被应用于一些需要使用语音通信功能的场景之下。LPWA 技术对比SigFoxLoRaNB-IoTeMTC频段SubG免授权频段SubG免授权频段主要在SubG授权频 段SubG授权频段传输速率100bps0.3-5kbps<250kbps<1Mbps典型距离1-50km1-20km1-20km2典型应用智慧家庭、智能 电表、移动医 疗、远程监控、 零售智慧农业,智能 建筑,物流追踪水表、停车、宠物 跟踪、垃圾桶、烟 雾报警,零售终端      除了 NB-IoT 和 eMTC,其他的两种网络都运行在 SubG 免授权频段上。SubG 的意思是频率在 1GHz 以下,主要是指 27MHz 到 960MHz 的频段。SubG是长距离、低功耗通信的理想选择。因为在功率相同的情况下,网络的频率越高,穿透能力就越差,但是 LPWA 场景下的设备如电表、水表等,他们经常被放在比较深的位置当中,通常有非常多的阻碍在上面,所以选择低频段就显得非常有必要了。      在表中也可以看到对于 NB-IoT 的描述当中,它的频段主要部署在 SubG 授权频段之上,这是因为有一部分 NB-IoT 网络部署于SubG授权频段之外      由于应用于免授权频段的 LoRa 与授权频段上的 NB-IoT 都是比较热门的 LPWA 技术,所以经 常被用来作对比。两者之间的差别就在于:1)阵容不同      LoRa是由美国个体户Semtech研究出来的,NB-loT是由3GPP官方移动通信协会制定的标准。LoRa基本上是由Semtech一家公司包办上下游产业链,但NB-loT则是整个通信产业上下游公司在合力运营,比如NB-loT芯片模组现在华为、高通、三星、联发科等公司都在做。2)频段使用不同      NB-loT使用的频段是授权频段,而LoRa使用的则是非授权频段。      授权频段,就是工信部授予的,除了被授予的运营商能用,其他所有个人企业机构都不能使用的频段,用了就违法,无线电管理部门会上门查水表。      而非授权频段,就是工信部没说给谁用,谁都可以用的频段。因此,如果有个人或者企业使用LoRa的工作频段做别的事,那么就会对这个区域的LoRa设备产生严重的干扰,导致网络无法使用。      因此,有官方背景的NB-loT网络质量肯定更好,更高质。3) LoRa需要企业自建,NB-loT运营商早已建好      运营商并不运营LoRa网络,如果企业想使用LoRa,需要自己购买基站、网络设备、服务器等等全套网络运营软硬件,并完成网络搭建,自己运营。      而NB-loT目前三大运营商已经在国内完成了基站的建设与网络开通,像使用手机 SIM卡一样,企业只需要从运营商采买NB-loT的SIM卡,随后插入带有NB-loT模组的设备内,就可以缴费使用啦。4) LoRa的优势在哪里?      其实对于90%的企业来说,LoRa确实没啥优势。除非企业想使用物联网的位置在农村、偏远山区、独立的厂区等(比如智慧农场、智慧工厂),确实没有运营商NB-loT网络的覆盖,无可奈何才会想到自建LoRa。      再就是非常大的企业,或者政府,怕使用运营商的网络不安全,比如出现数据窃取,因此宁愿自己建设网络自己维护,也不相信运营商。以上就是 NB-loT与LoRa之间比较大的区别。
  • 【话题交流】新的一年新的规划
    新的一年新的规划,大家有木有自己想要实现的目标,想要学习的知识方向(云计算、大数据、物联网、人工智能等等),大家都可以一起来讨论一下一起学习一起进步,新年新气象冲冲冲。
  • 蜂窝移动通信技术笔记分享
    2G      2G 技术可能年代已经比较久远了,2G 的出现标志着数字通信的起源,2G 又叫 GSM,全名 为:Global System for Mobile Communications,中文为全球移动通信系统。通过 2G 网 络,用户可以打电话,发短信。之后就是 GPRS,又称作是 2.5G,它是 GSM 的延续,同时它 的传输速率基于 2G 又有了提升。3G      到了 3G,用户的数据传输速率就更高了,一般可以达到几百 kbps,3G 用户可以视频通话, 同时也可以用手机看电视。在 3G 当中,国内的运营商都使用了不同的标准,它们分别是 CDMA2000、WCDMA 和 TD-SCDMA。其中联通的 WCDMA 最新演进技术 HSPA+可以支持 最高 42Mbps 的传输速率,目前仍然被应用于大部分视频数据传输领域。4G      3G 当中的 HSPA+技术虽然可以用于视频数据的传输,但是如果想要传输高清的视频数据,就 需要使用到 4G。虽然说 5G 非常热门,但是大部分用户用的运营商网络其实还是 4G 网络。 到了 4G,它的数据速率就更高了,用户可以用手机看视频听歌等一系列多媒体业务。 同时在 4G 网络当中,还有一点需要阐述的就是 4G 的不同等级,也就是 LTE-Cat。其中 Cat 的意思是 Category 等级,它指的是终端设备接入 4G 网络的所支持的不同的速率等级。在 4G 当中,设计者使用不同的等级方式来规定某一个设备所能达到的最高传输速率。在 4G 刚 开始的时候,市面上常见的各种终端设备使用的是 Cat.4 这个等级,但是现如今生活中所使用 的 4G 设备基本都是 Cat.6 这个等级了。至于设置这些不同等级的原因就在于不同等级的模组 芯片的价格是不一样的。                                                                                 LTE UE 接入能力等级等级DL Speed/MbpsDL-MIMOUL Speed/Mbps1101525022531002504150250530047563002 or 45073002 or 415081200860094502 or 450104502 or 4100      同时在物联网领域,目前使用比较多的是 Cat.1 这个等级,因为除了大部分设备使用低功耗广 域网这个场景之外,还有一部分对于网络速率有需求的设备就会使用 Cat.1 等级,尽管 Cat.4 及更高版本的解决方案支持高速率,但是对于物联网终端设备来说,这些模组的成本太高了, 所以 Cat.1 等级就成了使用 LTE 网络最具有性价比的等级。 Cat.1 支持高达 10Mbps 的终端下行链路速率,从而能够将更低功耗和更低成本的 IoT 设备连 接到 LTE 网络。由于世界各地的 4G LTE 运营商均基于最低 3GPP Release8 协议版本进行部 署,因此运营商无需升级网络,仅需要简单的参数配置即可允许 Cat.1 终端访问网络。5G      5G 网络是第五代移动通信网络,5G 的理论峰值速率可以达到 10Gbps。同时 5G 定义了三大 应用场景:增强型移动互联网业务 eMBB(Enhanced Mobile Broadband)对应的就是 10Gbps 的速率,海量连接的物联网业务 mMTC(Massive Machine Type Communication)对应的是 1 million/km2 的设备连接数,超高可靠性与超低时延业务 uRLLC(Ultra Reliable & Low Latency Communication)对应的是 1ms 的时延。在这三大 场景当中,eMBB 场景与用户的关联性比较大,因为它能给用户提供大带宽的上网速率。但是 另外两个场景就与物联网的关联性比较大了,海量的连接与超低的时延能够帮助物联网在很多 不同的应用当中进行业务能力的提升。在本节内容当中,读者们只需要了解 5G 的三大场景名 称即可,关于 5G 的详细内容将在之后的章节进行呈现。蜂窝移动通信网络技术对比2G3G4G5G频段授权频段 (以900M为 主)授权频段 (900、1800M为 主)授权频段 (1800M-2600M)授权频段: C-band 毫米波传输速率GSM: 9.6KbpsGPRS:56- 114KbpsTD-SCDMA:2.8MbpsCDMA2000: 3.1Mbps WCDMA: 14.4Mbps下行 Cat.6、7: 300Mbps 下行 Cat.9、10: 450Mbps10Gbps (巴龙5000芯片支 持 下行速率4.6Gbps; 上行 速率- 2.5Gbps)典型应用POS、智能可 穿戴设备自动售货机、智能 家居移动终端、视频监 控AR、VR、辅助驾 驶、自动驾驶、 远程医疗
  • 一文看懂华为云IoT第三方物联网业务无感迁移方案
    近期在物联网领域,掀起的热门技术话题,莫过于“云云迁移”。业务快速增长,导致原有物联网平台无法匹配业务发展,如何选择一个灵活、安全、可靠、可用的IoT物联网平台、物联网业务如何快速实现云迁移?这类问题成为了困扰企业的难题。华为云IoT融合了华为自身长期在ICT及千行百业沉淀的技术与服务经验,基于华为云强大的技术底座,提供丰富的设备接入方式和全生命周期的设备管理能力,同时,也具备物联网业务无感迁移能力。即使企业物联网业务已与其它或自研平台对接,在不修改设备业务逻辑和协议情况下,也可实现快速接入华为云IoT平台。01物联网业务如何快速迁移至华为云IoT平台?为满足企业多云容灾和第三方云IoT迁移至华为云IoT平台的需求,华为云IoT平台IoTDA从设备端、平台端、应用端提供了低成本,零改造的存量设备无感迁移方案,可以在无感迁移的情况下保持云上业务系统稳定。平台端迁移自动化迁移第三方云平台设备信息:IoTDA提供自动化,高效的迁移能力,支持第三方云平台的存量产品和设备信息全量+增量数据同步到IoTDA,实现设备信息无感自动迁移。迁移流程如下:兼容第三方云平台Topic策略:IoTDA支持自定义Topic的策略,存量设备可以依据现有的Topic来定义Topic策略,不要求Topic固定前缀,实现存量设备的Topic免改动。Topic策略详情链接如下:https://support.huaweicloud.com/usermanual-iothub/iot_01_1111.html兼容第三方云平台鉴权模式:IoTDA支持自定义鉴权方式,存量设备可以依据现有的设备鉴权方式,来配置设备的鉴权策略,实现存量设备鉴权方式免改动。设备端迁移对于存量设备,客户只需要将设备接入域名修改为华为云IoTDA的接入点,即可批量化完成平台迁移。Topic策略详情链接如下:https://support.huaweicloud.com/usermanual-iothub/iot_01_1111.html对尚未接入三方平台的设备,华为云IoTDA提供设备侧SDK支持设备快速完成设备轻量化改动。华为云IoT设备侧SDK获取链接如下:https://support.huaweicloud.com/sdkreference-iothub/iot_02_0178.html应用端迁移华为云IoTDA提供应用端SDK,开发者只需做少量代码修改就可完成应用端适配,实现应用端的快速迁移。应用端SDK参考链接如下:https://support.huaweicloud.com/sdkreference-iothub/iot_10_1002.html02为什么选择迁移至华为云IoT平台?华为云IoT平台(IoTDA)是一个融合了设备接入、设备管理、安全可靠的双向通信、消息灵活流转引擎、监控运维、最优发放功能为一体的物联网服务平台。配合华为云其他产品同时使用,帮助物联网行业用户快速完成设备联网及行业应用集成,简化海量设备接入、管理的复杂性,节省人工操作,提升效率。支持端到端物联网解决方案构建:IoTDA提供丰富的Restful API,将能力开放给物联网应用、其他云服务和中间件,使能客户快速、低成本的构建自己的物联网解决方案。提供物模型以及云端编解码插件的能力:实现物联网数据的标准化和格式化,实现各种设备的数据汇聚、融合和协同,解决物联网各子系统烟囱式发展以及数据孤岛问题。多种协议接入:IoTDA支持多网络接入(2G/3G/4G/5G/NB-IoT/LoraWAN)、多协议接入(MQTT/CoAP/LwM2M/HTTPS)、多种接入模式(直连、网关、边缘计算平台、子系统、第三方云接入)、安全接入(TLS、DTLS、DTLS+、一机一密、X.509证书)来帮助行业各类设备安全可靠轻松上云,实现解决方案数据的完整融合。鸿蒙底座:IoTDA加入了Open Harmony开源鸿蒙项目,开发者集成Open Harmony能力或者鸿蒙模组可以无缝对接华为云设备接入服务,同时可以配套更高阶的安全、可信、运维能力。丰富的生态开放:使能开发者通过丰富的API、SDK、预集成模组的方式,实现设备上电即上云。设备SDK兼容设备端侧的OS包括LiteOS、OpenHarmony LiteOS-M、FreeRTOS、linux、ucos_ii、windows、Android等,帮助用户设备减少大量适配工作,快速接入IoTDA平台。提供开发者开发私有协议插件,进行协议动态加载能力。提供协议插件生态市场,支持更多行业协议,开放度更加灵活。协议插件可以一键部署,灵活插拔,实现不同行业品类的设备无代码或者低代码适配上云的能力。提供300+标准物模型,同时提供厂商生态开放物模型,覆盖主流设备场景。物模型设备数据格式统一,开箱即用、批量复用,提高开发集成效率。物模型支持零代码数据格式转换,可以通过界面托拉拽、函数serverless的方式进行设备数据格式转换,免运维、易部署。拥有多样化、灵活的数据转发能力,可以将数据转发至其他华为云服务进行进一步的数据处理。开发者可以通过自身情况,灵活选择应用服务器组件来对设备数据进行接收,依托华为云海量数据转存和分析能力,提升方案的构建效率。03如何联系华为云IoT获取迁移帮助?为满足客户的需求,华为云IoT设备接入服务提供迁移专家团队支持,为您提供一对一的迁移方案制定和帮助。
  • 物联网SIM卡和手机SIM卡真的是一回事吗?
    物联网卡?相信大家第一反应都是一愣。大家听过银行卡、电话SIM卡、会员卡…等等,很多人可能都是第一次听说物联网卡。那它到底是个什么东东?它能干什么呢?今天就带大家一探究竟。那在物联网世界里,物与物之间是怎么感知和链接的呢?我们首先要知道物联网的一个运行流程:物联网是通过设备上的各种传感器如温湿度传感器、RFID标签等感知终端来识别物体,采集数据等。然后,通过固定宽带、NB-IoT、2/3/4/5G在内的多种网络,将设备接入到物联网平台进行互联。若设备使用2/3/4/5G和NB-IoT网络接入,则需要通过物联网SIM卡接入运营商网络。而随着物联网的发展,设备类型越来越多,设备尺寸越来越小,对物联网SIM卡外部环境的适配性要求越来越高,对物联网SIM卡寿命的要求越来越长,对物联网SIM卡尺寸的要求越来越小,促使物联网SIM卡的形态从插拔式SIM卡,演进到嵌入式SIM卡和vSIM卡。Nano卡虽然看起来已经很小了,但是它们还需要设备具有配套的卡槽。这个卡槽的结构和走线,对于一些智能穿戴设备(智能手环、智能眼镜等)来说还是太大了。而且插拔式SIM卡里面的用户信息固定不可更改,一张SIM卡就是一个用户与运营商之间的契约,若您想要切换运营商,必须换卡。为了解决这些问题,eSIM和vSIM诞生了。嵌入式SIM卡:eSIM,也称eUICC(embedded UICC),顾名思义,与传统可插拔的SIM卡不同,eSIM的概念是将SIM卡直接嵌入到设备中。eSIM的本质还是SIM卡,不过它的“卡体”是一颗直接嵌在电路板的可编程的集成电路,其大小比Nano还要小上几倍。因为其可编程特性,eSIM支持通过OTA(空中写卡)方式进行远程配置,更新运营商配置文件,实现网络切换。vSIM卡:即virtual-SIM,虚拟SIM卡技术。可以说,vSIM就是eSIM的进一步演进,继承了eSIM的功能,并完全消灭了卡体,直接依托通信模块自身软硬件实现通信。终端设备拥有vSIM功能的通信模块,配合为vSIM特殊定制的底层软件,实现了内置加密存储数据(IMSI、KI等)。在登陆网络、鉴权、通信时,自动处理相应的逻辑,从而实现不需要实体SIM卡也能提供稳定的通信体验。eSIM和vSIM除了进一步缩小甚至消灭了实体卡之外,它们更重要的功能是解除了用户和运营商的直接绑定,对用户来说,切换运营商变得和切换WIFI一样简单。物联网SIM卡如何选在物联网时代,分享智慧,物联网不再是遥不可及的时代,它不知不觉地影响了我们的工作和生活,作为物联网的重要支撑,物联网卡已广泛应用于医疗卫生、能源和电力、智能服装、物流零售、智能农业和智能交通等领域。不同行业对物联网SIM卡的需求不同,我们可以总结出以下场景:物联网设备除了无线流量需求外,还需要以下两个场景流量:海外流量:企业在国内生产设备,销售海外。使用海外流量,则需和多个海外运营商洽谈,部分企业可能没有海外渠道。典型的行业有车企(销售海外)、物流、运输、保健等。不换卡切换运营商:因网络信号不好或订购套餐到期要更换运营商套餐,需要手工更换不同运营商SIM卡,人工成本高;典型的行业有新零售、运输等。可以预见的,随着5G的到来,物联网行业面临的功耗高、带宽速度慢和成本高等阻碍也将有效解决,届时,物联网卡将随5G和物联网行业迎来爆发。那么,如何选择一个长期稳定、可靠的物联网卡服务商成为企业的强烈需求。购物联网卡实质上是购买服务,只有把服务做好,通过功能强大的平台为用户提供流量长期使用的运营支撑,用户才能安心无忧地使用物联网卡。针对以上场景,华为云的 “全球SIM联接”云服务。它支持实体卡、eSIM卡和vSIM卡方式,提供卡购买、卡管理、设备接入、设备发放能力,借助定向流量、空中写卡和远程设备发放技术。华为云物联卡合作运营商达80家以上,网络覆盖全球100+国家和地区,实现设备全球就近接入公有云站点,享受当地资费,一站式的SIM卡流量管理;与国内主流模组厂家预集成,降低了eSIM/vSIM卡和设备接入集成难度,还可实现多运营网络按需选择,号码自动切换,向客户提供一站式设备连接管理的优质服务。
  • NB-IoT 技术亮点&amp;行业挑战
    NB-IoT技术亮点10年电池寿命:支持PSMeDRX/长周期TAU,水表场景下寿命高达10年20dB增益:覆盖等级比GPRS提升20dB,具备更强的信号穿透力50K联接数每小区:单小区最大的接入数量50K,能够支持更多数量设备接入高性价比模组:芯片设计简化,外围电路精简,极大程度降低模组成本海思是NB-IoT技术的引领者,是NB-IoT标准以及产业的主要推动者。海思长期坚持NB-IoT研发投入,推动行业标准落地、推动技术及商用场景应用创新。致力与生态伙伴一起打造一个稳健、开放的NB-IoT生态系统。2016年随着R13标准冻结, 海思率先推出NB-IoT 商用芯片Boudica120,助力模组厂商和行业客户物联网方案商用。截至当前海思NB-IoT Boudica系列芯片已经在水表、气表、智慧消防、资产跟踪等领域实现千万级商用部署数量,在门锁、白电、物流、路灯等领域实现数百万级商用,同时海思与合作伙伴探索更多的创新商用场景,在农业、穿戴、支付、共享经济等领域创新完成商用落地。伴随NB-IoT技术带来的商用场景广泛部署及物联网设备的成倍增长,行业对NB-IoT也提出了更多的挑战,如典型场景下, 如何有效的通过技术演进降低部署成本、大规模组网下如何解决功耗问题、设备互联后如何保证数据安全等。NB-IoT 行业挑战功耗挑战大在智慧表计行业,电池不可更换、设备不能反复充电,电池的使用时间制约了整个表计设备的寿命。在电池容量有限的情况下,想让表计的使用寿命达到10年,对NB-IoT的综合功耗要求非常高。近点运维困难传统智慧表计产品如果出现故障,会导致远程上报和升级无法完成,必须人工拆除返修,维修综合成本高,且影响用户用水用气,急需一个近点的无线维护手段,达到不拆表即可完成诊断、维护和升级的目的。设备安全等级低行业对提升设备安全等级的诉求日益急迫。例如在水表、燃气表等涉及计费和支付的领域,一旦出现被劫持、篡改的情况,将会对运营方和终端客户造成不可估量的损失。终端网络适配性NB-IoT网络设备厂家众多,且伴随不定时的网络升级改造;户外环境中存在遮挡、干扰等因素,还会恶化无线环境。这些情况对终端设备的网络适配性提出了很高的需求。文章来源:上海海思
  • Linux中可引起文件时间戳改变的相关命令
    在命令行中,用stat查看文件的状态信息如图所示,会出现3个类型的时间,分别是Access,Modify,Change。access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间。modify time:表示最后一次修改文件的时间。change time:表示最后一次对文件属性(metadata)改变的时间,包括权限,大小,属性等等。当我们仅访问文件(cat、cp)时,access time 改变,而modify time ,change time 不会改变。当修改文件内容(vim)时,modify time改变,一般都会修改access time和change time。当修改文件权限属性(chmod)时,change time 改变,而access time ,modify time 不会改变。我们可以使用touch命令修改这些时间戳,如:touch -d 1999-01-01 a.txt // 将a.txt的Access和Modify时间改为1999-01-01 touch -a a.txt // 只将a.txt的Access时间改为当前系统时间 touch -m a.txt // 只将a.txt的Modify时间改为当前系统时间我统计了几点关于在Linux中可引起文件时间戳改变的相关命令一览表:SN时间戳命令示例备注1Avi sss(退出不保存)cat sssmore ssstail ssshead sssless ssscp test AAA/123左边的命令在该文件时间戳M或者C发生更新的前提下使用一次有效,并且使用其中任意一个命令引起该文件访问时间发生更新后,再使用其他命令则不会引起访问时间的更新。2M—按照时间戳M的字面意思来理解,只要文件内容发生变化该时间戳就会更新,但M更新的同时会引起C的更新。3Cmv sss aaamv sss /AAAchmod 744 ssschown sss testchgrp root testchattr +i sssln test file/H_link(硬链接可以)与文件属性相关的操作会单独引起该时间戳的更新。4A+Mtouch -amd "2 hours ago" testtouch:-a只更文件改访问时间.-m只更文件改修改时间.-d 以字符串格式接收时间-t 接收时间格式为:MMDDhhmm。若不加d或t,则默认更新为当前系统时间作。会引起C的更新,相当于A+C+M。5A+Ctouch -ad "2 hours ago" test6M+Cls -l /root > ssscat CCC > sssmore CCC > sssless CCC > ssshead CCC > ssstail CCC > sssnl CCC > sssecho 'HELLO' > ssstouch -md “2 hours ago” sss7A+C+Mvim sss(退出并保存)touch test(test文件已存在)touch -am test(test文件已存在)使用touch时,将A、C、M更新为当前系统时间。
  • 轻松快速地调整Kubernetes的CPU和内存
    在Kubernetes中分配和管理CPU和内存资源可能很棘手,但也很容易。本文,我将向你展示什么是Kubernetes资源和限制以及如何管理它们。本文的目标是简单–如何帮助你快速调整项目中的Kubernetes资源信息,主要通过三种方式:1. 为容器和 Pod 分配CPU和内存资源2. Resources Quota: 限制namespace的资源消耗3. Limit Ranges:配置默认的CPU请求和限制为容器和 Pod 分配CPU和内存资源下图,解释了Kubernetes资源的度量单位,资源状态工作流以及如何使用资源限制。CPU和内存单位Kubernetes 中的一个 cpu 等于:1 AWS vCPU1 GCP Core1 Azure vCore1 Hyperthread 在带有超线程的裸机 Intel 处理器上以下,Deployment使用了内存资源和CPU资源的请求和限制将CPU和内存 请求 (request)和内存 限制 (limit)分配给一个容器更详细的信息和代码段:将内存资源分配给容器和Pod将CPU资源分配给容器和PodKubernetes最佳实践资源要求和限制应用程序开发人员在Azure Kubernetes Service(AKS)中管理资源的最佳实践Resources Quota: 限制namespace的资源消耗资源配额,通过 ResourceQuota 对象来定义,对每个namespace的资源消耗总量提供限制。它可以限制namespace中某种类型的对象的总数目上限,也可以限制命令空间中的 Pod 可以使用的计算资源的总上限。资源配额的工作方式如下:不同的团队可以在不同的namespace下工作,目前这是非约束性的,在未来的版本中可能会通过 ACL (Access Control List 访问控制列表) 来实现强制性约束。集群管理员可以为每个namespace创建一个或多个 ResourceQuota 对象。当用户在namespace下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会 跟踪集群的资源使用情况,以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。如果namespace下的计算资源 (如 cpu 和 memory)的配额被启用,则用户必须为 这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用 LimitRanger 准入控制器来为没有设置计算资源需求的 Pod 设置默认值。以下,是对持久卷声明和namespace资源的配额定义。你可以使用该kubectl apply命令来设置namespace的配额限制。kubectl apply -f resource-quota.yaml — namespace backend如何使用配额的详细说明,请参考https://kubernetes.io/docs/concepts/policy/resource-quotas/Limit Ranges:配置默认的CPU请求和限制如果你的namespace有资源配额,那么默认内存限制是很有帮助的。将 LimitRange 添加到namespace,不仅会限制cpu和内存,还会为存储请求大小强制设置最小值和最大值。存储是通过 PersistentVolumeClaim 来发起请求的。执行限制范围控制的准入控制器会拒绝任何高于或低于管理员所设阈值的 PVC。更详细的信息和代码段。为namespace配置默认的 CPU 请求和限制限制名称空间的存储使用量Kubernetes中的 Limit Range工具:管理Kubernetes的CPU和内存Popeye 会扫描集群中是否存在与配置,资源和网络漏洞有关的问题,并生成有关所有问题的详细报告。Goldilocks 扫描Pod中的资源限制,并使用建议的资源创建报告。Kube-advisor 来自Azure团队的工具,可扫描容器中缺少的资源并限制请求。K9s+benchmark 提供了一个命令行界面(CLI),使你可以轻松地管理,监视甚至对 你喜欢的终端软件中的集群进行基准测试你还可以将这些工具与 Datadog, Grafana + Prometeus,Azure Monitor结合使用,以改善资源并限制监视。总结设置资源请求:获取有关特定应用程序/容器的CPU和内存使用情况的信息。设置资源限制:运行负载测试以检测高负载下容器的CPU和内存。监视容器的CPU和内存使用情况。监视持久卷使用情况。检查是否可以使用Limit Range应用资源限制使用配额(不建议在生产环境中应用配额)文章来源:K8s中文社区译者:王延飞原文链接:https://dzone.com/articles/easy-and-fast-adjustment-of-kubernetes-cpu-and-mem
  • SSH 组合框架模式小知识分享
    SSH=Struts+Spring+Hibernate      集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。      Struts 是一个很好的MVC框架,主要技术是Servlet和Jsp。Struts的MVC设计模式可以使我们的逻辑变得很清晰,让我们写的程序层次分明。基于Struts开发可以简化开发难度,提高开发效率。  Spring 提供了管理业务对象的一致方法,并鼓励注入对接口编程而不是对类编程的良好习惯,使我们的产品在最大程度上解耦。Hibernate 是用来持久化数据的,提供了完全面向对象的数据库操作。Hibernate对JDBC进行了非常轻量级的封装,它使得与关系型数据库打交道变得非常轻松。在Struts+Spring+Hibernate系统中,对象之间的调用流程如下: Struts——>Spring——>Hibernate  JSP——>Action——>Service——>DAO——>Hibernate比如:1.Spring的配置文件bean.xml<?xml version="1.0" encoding="UTF-8"?><beans         xmlns="http://www.springframework.org/schema/beans"         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"         xmlns:tx="http://www.springframework.org/schema/tx">     <bean id="dataSource"           class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">         <property name="jdbcUrl"                   value="jdbc:mysql://localhost:3306/samblog?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true">         </property>         <property name="user" value="root"></property>         <property name="password" value="123456"></property>         <property name="driverClass" value="org.gjt.mm.mysql.Driver"/>     </bean>     <bean id="sessionFactory"           class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">         <property name="dataSource">             <ref bean="dataSource"/>         </property>         <property name="hibernateProperties">             <value>                 hibernate.dialect=org.hibernate.dialect.MySQL5Dialect                 hibernate.hbm2ddl.auto=update                 hibernate.show_sql=false                 hibernate.format_sql=false            </value>         </property>         <property name="mappingResources">             <list>                 <value>site/sambloger/domain/Users.hbm.xml</value>                 <value>site/sambloger/domain/Blog.hbm.xml</value>                 <value>site/sambloger/domain/Category.hbm.xml</value>                 <value>site/sambloger/domain/Comment.hbm.xml</value>             </list>         </property>     </bean>     <bean id="transactionManager"           class="org.springframework.orm.hibernate5.HibernateTransactionManager">         <property name="sessionFactory" ref="sessionFactory"/>     </bean>     <tx:annotation-driven transaction-manager="transactionManager"/>     <!-- 配置Blog  spring进行管理  服务层直接调用实现与数据库的CRUD-->     <bean id="blogDao" class="site.sambloger.dao.impl.BlogDAOImpl">         <property name="sessionFactory" ref="sessionFactory"/>     </bean>     <bean id="blogService" class="site.sambloger.service.impl.BlogServiceImpl" scope="prototype">         <property name="blogDao" ref="blogDao"/>     </bean>     <bean id="blogAction" class="site.sambloger.action.BlogAction">         <property name="blogService" ref="blogService"/>         <property name="commentService" ref="commentService"/>     </bean>     <!-- 配置Comment -->     <bean id="commentDao" class="site.sambloger.dao.impl.CommentDAOImpl">         <property name="sessionFactory" ref="sessionFactory"/>     </bean>     <bean id="commentService" class="site.sambloger.service.impl.CommentServiceImpl" scope="prototype">         <property name="commentDao" ref="commentDao"/>     </bean>     <bean id="commentAction" class="site.sambloger.action.CommentAction">         <property name="commentService" ref="commentService"/>         <property name="blogService" ref="blogService"/>     </bean>     <!-- 配置Users -->     <bean id="usersDao" class="site.sambloger.dao.impl.UsersDAOImpl">         <property name="sessionFactory" ref="sessionFactory"></property>     </bean>     <bean id="usersService" class="site.sambloger.service.impl.UsersServiceImpl" scope="prototype">         <property name="usersDao" ref="usersDao"/>     </bean>     <bean id="usersAction" class="site.sambloger.action.UsersAction">         <property name="userService" ref="usersService"></property>     </bean></beans>2.Struts的配置文件 struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>     <package name="samblog" extends="struts-default" namespace="/">              <action name="init" class="blogAction" method="init">                     <result name="success">/bloglist.jsp</result>             </action>             <action name="getBlog" class="blogAction" method="getBlog">                     <result name="success">/displayBlog.jsp</result>             </action>              <action name="getAllNote" class="blogAction" method="getAllNote">                 <result name="success">/notelist.jsp</result>             </action>             <action name="addComment" class="commentAction" method="addComment">                 <result name="success"  type="redirect">/getBlog</result>             </action>     </package></struts>3.Hibernate其中的一个配置文件:<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!--      Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>     <class name="site.sambloger.domain.Blog" table="blog">         <!--id标签表示映射到数据库中是作为主键 其他property表示普通键-->         <id name="id" type="java.lang.Integer">             <column name="id" />             <generator class="increment" />         </id><!--该标签加N方 会有一个字段叫category_id作为外键参照1(Category)的主键字段 并且用来存储这个主键的信息-->         <many-to-one name="category" class="site.sambloger.domain.Category"  lazy="false" cascade="all">             <column name="category_id" not-null="true" />         </many-to-one>         <property name="title" type="java.lang.String">             <column name="title" length="400" not-null="true" />         </property>         <property name="content" type="java.lang.String">             <column name="content" length="4000" not-null="true" />         </property>         <property name="createdTime" type="java.util.Date">             <column name="created_time" length="10" not-null="true" />         </property><!--在一对多的关联中,在一的一方(Blog)设置inverse=”true”让多的一方来维护关联关系更有助于优化,因为可以减少执行update语句-->         <set name="comments" inverse="true">             <key>                 <column name="blog_id" not-null="true" />             </key>             <one-to-many class="site.sambloger.domain.Comment" />         </set>     </class></hibernate-mapping>Spring框架的作用和好处:    Spring框架提供了一个容器,该容器可以管理应用程序的组件,还提供了IoC和AoP机制,实现组件之间解耦,提高程序结构的灵活性,增强系统的可维护和可扩展性。     在SSH整合开发中,利用Spring管理Service、DAO等组件,利用IoC机制实现Action和Service,Service和DAO之间低耦合调用。利用AoP机制实现事务管理、以及共通功能的切入等。     功能是整合,好处是解耦。Hibernate中操作并发处理(乐观锁和悲观锁)    Hibernate框架可以使用锁的机制来解决操作并发。    a.悲观锁         在数据查询出来时,就给数据加一个锁,锁定。这样其他用户再执行删、改操作时不允许。当占用着事务结束,锁会自动解除。          Hibernate采用的是数据库锁机制实现悲观锁控制。        缺点:将并发用户操作同步开,一个一个处理。当一个用户处理时间比较长时,效率会比较低。      b.乐观锁         允许同时更新提交,但是最快的会成功,慢的失败。         在记录中追加一个字段值,用该字段值当做版本。当最先提交者提交后,会自动将版本字段值提升,这样其他用户提交,会发现版本低于数据库记录目前版本,因此抛出异常提示失败。    特点:允许用户同时处理,但只能有一个成功,其他失败,以异常方式提示。SSH工作流程       a.启动服务器,加载工程以及web.xml.           (实例化Lisener,Filter等组件,将Spring容器和Struts2控制创建)       b.客户端发送请求,所有请求进入Struts2控制器。控制器根据请求类型不同,分别处理。           (action请求,*.action会进入struts.xml寻找<action>配置.            其他请求,*.jsp会直接调用请求资源,生成响应信息)       c.Struts2控制器根据<action>配置调用一个Action对象处理。         整合方法一:将Action交给Spring容器          (Action对象由struts2-spring-plugin.jar插件提供的                      StrutsSpringObjectFactory负责去Spring容器获取)         整合方法二:将Action置于Spring容器之外          (Action对象由struts2-spring-plugin.jar插件提供的                      StrutsSpringObjectFactory负责创建,然后到Spring容器中寻找与Action属性匹配的Bean对象,给Action对象注入。(默认采用名称匹配规则)       d.Struts2控制器执行defaultStack拦截器、Action对象、Result等组件处理.       e.执行Action的execute业务方法时,如果使用Service或DAO采用Spring的IoC机制调用。       f.执行Result生成响应信息,执行后续拦截器处理       g.将响应信息输出。
  • 敏捷项目管理基础笔记分享
    1.敏捷项目管理基础1.1 项目管理和迭代开发方式项目的定义:一系列活动,有一个明确的目标或目的,并且必须在特定的时间和预算内依据规范完成项目管理:运用技能,方法与工具,为满足或超越项目有关各方对项目的要求与期望,所开展的各种计划,组织,领导控制等方面的活动。项目的三角:范围:要求做什么,也规定了不能做什么时间:必须完成的时间框架或最后期限成本:可用于项目的费用质量:产品的质量:项目的可交付成果的质量过程的质量:项目管理过程本身的质量项目管理的目的:在有限的资源投入条件下,在要求的时间内完成既定的项目目标。迭代开发模式      迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。      在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度的小项目,被称为一系列的迭代。      每次迭代都包括了定义、需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成 系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。1.2 Scrum方法——3 3 3 53个理论支柱:-高透明性(Transparency)- 检查(Inspection)-适应(Adaptation)3个工件:-产品待办列表-迭代待办列表-潜在可交付的产品增量3个角色:-产品负责人Product Owner-Scrum Master-开发团队5个事件:-迭代计划会议                 -迭代-迭代评审会议                 -每日立会-迭代回顾会议1.3 KANBAN方法看板:一种可视化流程管理系统三个原则:可视化,限制在制品,管理流动五个核心实践:可视化工作流(价值流):工作流程,由各种工作项构成限制在制品数量:工作项在本状态数量的上限,取决与整体团队的能力度量与管理流动:让价值流动起来,方法:累计流量图协同改进:整个团队一起合作显示化流程规则:不同状态转换的规则Scrum方法还是KANBAN方法都是为了顺畅,高质量地交付有用的价值大家可以在华为云DevCloud平台中体验:cid:link_01.4 风险管理四个阶段:1.风险识别2.风险分析3.风险应对计划4.风险监控和控制
总条数:99 到第
上滑加载中