本笔记是截取的郝斌老师的课程大纲;
如果你是想要复习C语言,建议看看本笔记,郝斌老师的笔记简练而句句精辟!
如果你是初学者,建议你去b站上看郝斌的C语言教程,然后结合本笔记(二者是配套的)。
这是一个pdf文件,你可以在线看这篇pdf(点击下面的超链接网址即可(前提是你在电脑端)):
链接:https://pan.baidu.com/s/197Y7QAuowGVLbvITq692pw
提取码:vf13
java线程池ThreadPoolExecutor的使用 在日常开发中我们经常会使用多线程,但是当线程数量达到一定程度时,频繁的创建线程、执行任务、销毁线程就会造成资源的浪费和性能的开销,那么这个时候就要考虑使用线程池了,它可以很好的避免这个问题,尤其是程序中需要创建大量的生存周期很短的线程时,更应该考虑使用线程池。
线程池的概念 线程池(ThreadPool),简单的说,它就是一个装有线程的池子,我们只需把任务(多线程执行的内容)交给线程池来处理,和数据库连接池、Http连接池的概念差不多的,通过维护一定数量的线程来达到多个线程复用的效果,同时它也能够帮我们自动管理线程的生命周期。
线程池的好处 降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换提供更强大的功能,延时定时线程池。 线程池底层类ThreadPoolExcutor介绍 线程池的种类有4种,下面会讲,但是他们的底层使用的都是ThreadPoolExcutor这个类,所以只需把这个类搞懂,就基本能解决一些常规的业务了。
常用构造方法 五个参数的
/** * @param corePoolSize 线程池的核心数量 * @param maximumPoolSize 线程池的总数量 * @param keepAliveTime 在任务量大于队列长度需要需要创建的线程数量时,会创建新的临时线程,假如新创建的临时线程把队列中的任务都执行完了,那么接下来这 个临时线程并不是立即释放,而是会等待新的任务与核心线程一起去执行, * @param unit 设置等待时间的时间单位 DAYS、HOURS、MINUTES等等 * @param workQueue 阻塞队列,用于存放没有执行的任务,只存放由execute()方法提交的、实现Runnable接口的任务。 */ public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue); 六个参数的
/** * @param corePoolSize 线程池的核心数量 * @param maximumPoolSize 线程池的总数量 * @param keepAliveTime 在任务量大于队列长度需要需要创建的线程数量时,会创建新的临时线程,假如新创建的临时线程把队列中的任务都执行完了,那么接下来这 个临时线程并不是立即释放,而是会等待新的任务与核心线程一起去执行, * @param unit 设置等待时间的时间单位 DAYS、HOURS、MINUTES等等 * @param workQueue 阻塞队列,用于存放没有执行的任务,只存放由execute()方法提交的、实现Runnable接口的任务。 * @param handler 任务拒绝策略,当任务量大于我们线程池设置的最大线程数时,那么就会触发这个拒绝策略,java中定义的拒绝策略有4中,之后给大家演示。 */ public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, RejectedExecutionHandler handler); ThreadPoolExcutor类总共有4个,熟悉以上两个常用的构造方法即可。
Pandas to Dict 两列转换成字典的key和value列名变成字典的key 两列转换成字典的key和value df:
nameageMary26Sellina28Zaca27 想将name这列变成字典的健,年龄对应成字典的值,健值对应如下:
{‘Mary’:26,‘Sellina’:28,‘Zaca’:27}
import pandas as pd import pandas as pd a = ['Mary','Sellina','Zaca'] b = [26,28,27] data = {'name':a,'age':b} df = pd.DataFrame(data) print(df) 结果如下:
name age 0 Mary 26 1 Sellina 28 2 Zaca 27 python代码实现转换成字典:
df1 = df.set_index(['name'])['age'].to_dict() print(df1) 结果如下: {'Mary': 26, 'Sellina': 28, 'Zaca': 27} 列名变成字典的key df2 = df.to_dict(orient = 'list') 结果如下: {'name': ['Mary', 'Sellina', 'Zaca'], 'age': [26, 28, 27]}
问题描述 2020-08-06 15:55:53.988 ERROR 29260 --- [boundChannel-17] .WebSocketAnnotationMethodMessageHandler : Unhandled exception from message handler method java.lang.NullPointerException: null at cn.edu.zstu.shihua.xihu.controller.WebSocketController.handleMsg(WebSocketController.java:33) ~[classes/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181] at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:171) ~[spring-messaging-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:120) ~[spring-messaging-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMatch(AbstractMethodMessageHandler.java:565) [spring-messaging-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:511) [spring-messaging-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.handleMatch(SimpAnnotationMethodMessageHandler.java:94) [spring-messaging-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessageInternal(AbstractMethodMessageHandler.java:520) [spring-messaging-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.messaging.handler.invocation.AbstractMethodMessageHandler.handleMessage(AbstractMethodMessageHandler.java:454) [spring-messaging-5.2.6.RELEASE.jar:5.2.6.RELEASE] at org.springframework.messaging.support.ExecutorSubscribableChannel$SendTask.run(ExecutorSubscribableChannel.java:144) [spring-messaging-5.2.6.RELEASE.jar:5.2.6.RELEASE] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_181] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_181] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_181] 解决方案 在自定义的Spring Security 配置CustomWebSecurityConfig extends WebSecurityConfigurerAdapter 中删除相关路径
为什么我们除了电信和网通基本不用别的宽带,这要从中国的“八纵八横”的国家光通信骨干网说起。 1998年12月,中国“八纵八横”的国家光通信骨干网投入使用,这项巨大的工程在全国共铺设了149.5万公里的光缆,其中长途干线光缆33.5万多公里,本地中继网光缆线路75.5万多公里,二接入网光缆线路是37万多公里。
而这个非常惊人的建设数据,成为了我们今天使用的高速网速的基础。而它的项目总承包则是中国电信。
据统计,2020年1-5月,中国三家基础电信企业的固定互联网宽带接入(下称固网)用户总数达4.6亿户。其中,光纤接入(FTTH/O)用户4.3亿户,而已经达到100Mbps及以上接入速率的用户为3.9亿户。
这三家基础电信企业我想大家都知道,中国移动,中国电信,中国联通。
如此问题就很简单了,其关键就在于国内这些这些通信骨干网是谁的,那么它的带宽就是最大的,网速也就最快了。
一、合久必分 1998年3月,信息产业部组建,在原邮电部、电子部的基础上组建信息产业部,作为主管全国电子信息产品制造业、通信业和软件业的部门,
2000年,原中国电信总局撤消,分成了两家单位,即中国电信、中国移动。“八纵八横”光缆干线网划归中国电信集团公司,由中国电信进行运营管理。
2002年,根据国家需要,中国电信集又进行了新的拆分重组,根据国家发改委信息化领导小组的要求,中国电信把北方10省(区、市)的电信公司划给了中国网通集团,自己保留南方和西部21省(区、市),但享有原中国电信的一切无形资产。
可以这么说,1998年的电信改革是学术界发起的;而2002年的拆分中国电信是国家发改委动刀的;而2008年的第二轮电信重组则是国资委一手包办的。
2008年5月24日,第二轮电信重组方案确定,中国电信收购中国联通CDMA网,中国联通与中国网通合并成新联通,中国卫通的基础电信业务并入中国电信,中国铁通并入中国移动。
所以,国内的固网骨干网络其实掌握在中国电信和中国联通手里。
二、固网骨干网络哪家强? 中国电信无疑是最强,请看它的历史沿革。
1、北网通:
而北网通的最重要的就是北京上地机房,以前它是263机房,后来被中国电信收购了,变成了中国电信北京数据中心之一,也是中国电信北方网络主节点ChinaNet骨干网的交换中枢。
所以,中国电信北方网络的主节点在北京电信的上地机房。
2、南电信:
而在南电信中,无疑上海长信机房是顶级的节点,而武胜机房和横浜机房则是国际出口的重要节点。
而联通也不弱,尤其是2008年5月,中国联通与中国网通合并成新联通,这下等于是北方的过去中国电信固网全部落入了联通手下。
三、起步最晚的中国移动 对于固定互联网宽带接入,中国移动起步最晚,直到中国移动将中国铁通合并,才有了固网宽带业务。
虽然说,移动利用低廉的价格抢用户,目前移动宽带用户总量超越电信和联通,成为国内固网用户数第一。因为没有强大的骨干网络带宽支撑,中国移动的网速其实是最慢的,且随着用户的增多,网速会越来越慢。
好在中国移动启动了骨干网建设,中国移动传送网骨干网从2001年至2018年已经完成十二期工程,而在2013年12月,中国移动启动了十期省际骨干传送招标,全部采用80×100G系统,正式迎来100G时代。
未来,在国内固网互联方面,中国移动正在加强投资。
四、国际出口 在固网国际出口方面,中国电信和中国联通作为两家固网基础资源最为丰富的运营商,资源整体占比非常高,特别是中国电信,它一家就占到近60%。而中国移动基本也就电信的一个零头。
而中国电信,目前拥有中国最重要的两条国际出口骨干网线路,一条是 163 骨干网;另一条是 CN2 网络;
我们习惯称163骨干网为CN1,163网是中国电信建设的最早的一个网络,它为超过1亿的中国电信用户承载包括连往境外的,普通质量的互联网业务。固网用户,在晚上连接境外网络总是感觉卡顿、丢包高,都是因为走的这个网。
2005年投入使用的CN2则好的太多了,最牛的CN2 GIA是中国电信专属的国际出口顶级产品,纯CN2线路的掉包率均在 0.1%以下,用户在访问过程中无比顺畅。
所以,实际上中国电信的国际出口分成了三个级别:
163 网(CN1)+CN2 GT(Global Transfer 半程 CN2 +CN2 GIA(Global Internet Access 全程 CN2);
而全程 CN2又细分成了单网、双网、三网三种待遇。
1、电信用户专属的单网CN2 GIA:绝对是想玩外网游戏玩家的第一选择;而中国联通、中国移动、教育网等等用户是无权享用的,它们只能走各自的国际出口;
2、双网CN2 GIA:这是电信给联通的福利线路,它允许中国联通线路在省级跨网并入到中国电信的CN2网络;
3、三网CN2 GIA:它允许中国联通、中国移动、教育网等等用户在省级跨网到CN2网络。当然这不是免费的,而是要和接入的电信运营商签署协议,一旦签署了走何种协议,如纯CN2网络,势必要向中国电信缴纳一笔高昂的CN2网络使用费用,这就导致支持 CN2 GIA网络的价格最昂贵,CN2 GT 价格其次,163网最为低廉;
所以,对于缺乏国际出口带宽的中国移动只有购买了,至于哪种类型的出口,就不是你我能知道的了!
综上所述,这就造成了中国移动固网白天速度快,晚上用户一多就卡成了狗。
123 赞 踩 42评论
分享
vue项目运行登录后,后端设置了cookie;但是我是本地起得项目所以现在一直报错登录过期问题;
一、后端设置的set-cookie黄色警告报错
the set-cookie had to have been set with “sameSite=None” to enable cross-site usage
Samesite有三个值,None, Lax,Strict.这个参数是防止跨站攻击用的,因为测试环境,所以最方便就是跨站调试了。
刚开始设置cookie 的Domain无效
后来经过一番翻云覆雨查找发现
关闭chrome的默认cookie设置即可
在浏览器里打开下面两个链接
chrome://flags/#same-site-by-default-cookies
chrome://flags/#cookies-without-same-site-must-be-secure
这两项设置为Disabled,并重启浏览器就完美解决了,愉快的进行开发项目了
二、还可以在vue.config.js项目里设置代理;也可以解决这个问题
devServer: {
proxy: ‘https://mtest.sinosafe.com.cn’
},
今天发现vscode git插件同步代码报错 error: cannot spawn ssh: No such file or directory
刚开始以为是ssh安装有问题,测试ssh命令没问题,这个错误中的ssh其实是指git安装包中的ssh.exe, 给GIT_SSH设置环境变量后问题解决
我的git安装于 D:\tools\Git
设置环境如下: GIT_SSH=D:\tools\Git\usr\bin\ssh.exe
另外,我用的是vscode,默认的终端窗口是cmd命令窗口,如果想换成git bash的窗口可以按照如下设置:
1.vscode中找到设置,搜索cmd,点击在settings.js中编辑
2.加入如下设置 "terminal.integrated.shell.windows": "D:\\tools\\Git\\bin\\bash.exe",
其中 D:\\tools\\Git\\bin\\bash.exe为我的本地安装目录
3,更换后的终端效果如下:
漂亮多了
机器学习笔记PDF版本订阅 版权申明:特在此声明,“机器学习笔记(订阅版)”为本人独立工作成果,未经允许,不得转载。Copyright © 2020 Sakura-gh
关注微信公众号“Sakura的知识库”,或访问Github: https://github.com/Sakura-gh/ML-notes即可获取,持续更新中~
封面概览如下:
附:陆陆续续也已经更新了将近20w余字的笔记啦~学习的过程是孤独的,学习的结果是未知的,我们都在一条崭新的道路上前行,甚至每个人在路上的遭遇都各不相同。记录下李宏毅老师的机器学习笔记,并分享在github上,初心是做自我复习之用,没想到得到了这么多人的认可,受宠若惊。笔记的markdown、html版本已经全部开源在github上,当然也有很多小伙伴们向我反映pdf版本的笔记用起来更方便,既可以在ipad上直接观看,也可以打印下来随时查看学习,于是我将其整理成一整份文档,以电子书籍的形式呈现出来。累计20w余字的电子书籍笔记~开源不易,也希望大家能多多支持。
此外,这里承诺:github上可在线观看的html版本将永久免费开源,供大家学习参考之用!
上述PDF对应我的csdn文章链接:
csdn博客链接: 机器学习系列1-机器学习概念及介绍
机器学习系列2-回归案例研究
梯度下降代码举例:Gradient Descent Demo(Adagrad)
机器学习系列4-模型的误差来源及减少误差的方法
机器学习系列5-梯度下降法
机器学习系列6-分类问题(概率生成模型)
机器学习系列7-逻辑回归
机器学习系列8-深度学习简介
机器学习系列9-反向传播
机器学习系列10-手写数字识别(Keras2.0)
机器学习系列11-卷积神经网络CNN part1
机器学习系列12-卷积神经网络CNN part2
机器学习系列13-深度学习的技巧和优化方法
机器学习系列14-为什么要做“深度”学习
机器学习系列15-半监督学习
机器学习系列16-无监督学习引言
机器学习系列17-无监督学习之PCA推导(Ⅰ)
机器学习系列18-无监督学习之PCA深入探讨(Ⅱ)
机器学习系列19-矩阵分解&推荐系统初步
机器学习系列20-无监督学习之词嵌入
机器学习系列21-无监督学习之近邻嵌入
机器学习系列22-无监督学习之自编码器
机器学习系列23-无监督学习之生成模型
机器学习系列24-迁移学习
机器学习系列25-支持向量机
机器学习系列26-循环神经网络RNN(Ⅰ)
机器学习系列27-循环神经网络RNN(Ⅱ)
文章目录 modelsim-win64-10.4-se.exe安装首先下载这个东西canci modelsim-win64-10.4-se.exe安装 这样行不通,打开的时候都乱跳啊
首先下载这个东西 百度云链接:https://pan.baidu.com/s/1ONbjNLajFKzHDJ9bs4gz6Q 密码:by0p
压缩包解压密码:Lily_9
这个是别人的网盘哦 下载完解压长着一个样子 傻瓜式安装吧 安装完好像让你重启我听话了然后重启了 然后我把 复制到这里然后运行这个bat文件产生LIENCE.TXT文件默认在C:\Users\ZTZ\AppData\Local\Temp里面把他复制到win64下面 再来这个 ok!! canci 添加链接描述
最近在做捷联惯导的小研究 , 思路是 利用Simulink搭建捷联惯导的解算模型, 从串口读取惯性元件(JY901)数据(主要是加速度和角速度数据) ,输入Simulink中进行姿态, 速度的解算.
模型如下图所示:
费了九牛二虎之力, 刚搞定数据读取的问题, 现在又出现了通过simulink模型解算出的姿态角数据远远小于实际值的问题.
举个例子来说明:
我将惯性元件(JY901)绕Y轴旋转90°,按道理讲,姿态曲线相应应该有90°(1.57弧度)的偏转, 但实际的结果是, 姿态曲线只有0.2 弧度的偏转. 姿态曲线变化趋势是正确的.
如下图示: 此时我将惯性元件绕Y轴向右偏转90°(1.57弧度),而后回到原位.Y轴的姿态角曲线.
我认真检查了模型,诸如计算方法,单位等,都没有发现问题,所以问题到底出在哪里?有哪位兄弟可以解答吗?或者有类似的问题,都欢迎与我交流,先谢过啦!
int min; int[] oneArray = new int[] { 4, 2, 0, 8, 7, 1, 5, 9, 3, 6 }; for (int i = 0; i < oneArray.length - 1; i++) { // 循环oneArray.length // - 1 // 次,每循环完一次,找出一个最大的放在最后 for (int j = 0; j < oneArray.length - i - 1; j++) { // // 循环onrArray.length // - i - // 1次,每次循坏比较相邻两个大小,大的排在后面与下一个比较 if (oneArray[j] > oneArray[j + 1]) { min = oneArray[j + 1]; oneArray[j + 1] = oneArray[j]; oneArray[j] = min; // System.
import java.util.Scanner; public class HelloWorld { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 杨辉三角 // 首先输入一个数n,表示需要打印n行数, 杨辉三角第n行有n个数,先定义一个n*n的二维数组 // 杨辉三角每一行的第一列都是1,所以先给每一行的第一列都赋值1 // 如果是第一行赋值1如果不是执行杨辉三角的公式,即每个数都等于上一行两个数之和 // 得到的是一个直角的杨辉三角,在适当位置添加制表符 \t 或者 %4d s c.....等 int n = input.nextInt(); int[][] array = new int[n][n]; for (int i = 0; i < array.length; i++) { // 行,共n行 for (int m = array.length; m > i; m--) { System.out.printf("%2s", " "); // s 字符串 打印空格 } for (int j = 0; j <= i; j++) { // 列,第n行有n列 if (j == 0) { array[i][j] = 1; } else { array[i][j] = array[i - 1][j - 1] + array[i - 1][j]; } System.
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.num1 和num2 都只包含数字 0-9.num1 和num2 都不包含任何前导零。你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。 ——题目难度:简单
-解题代码1(模拟竖式计算)
class Solution { public: string addStrings(string num1, string num2) { int n1 = num1.size(), n2 = num2.size(); if (n1 < n2) { num1.insert(num1.begin(), n2 - n1, '0'); n1 = n2; } else if (n1 > n2) { num2.insert(num2.begin(), n1 - n2, '0'); } string ans(n1, '0'); int jinwei = 0; for(int i = n1 - 1; i >= 0; i--) { int temp = num1[i] + num2[i] + jinwei; ans[i] = (temp - 48 * 2) % 10 + 48; if (temp > 105) { //num1[i] + num2[i] - 48 - 48 > 9 jinwei = 1; } else { jinwei = 0; } } if (jinwei) { ans.
springboot 2.3的版本拦截器会拦截静态资源。使用拦截器时需添加excludePathPatterns让所需静态资源放行
我们自己的css、js等静态资源放在resources / static / asserts下
而从pom文件里面引入的jquery、bootstrap放在了webjars下
所以控制静态资源放行时"/asserts/**","/webjars/**都要加上
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**") .excludePathPatterns("/index.html","/","/user/login","/asserts/**","/webjars/**");
话不多说,姐就是这么直接:
链接:https://pan.baidu.com/s/1Qs8td9Equ-YW-V6DHsAIcw
提取码:iezq
基本页表
默认块号大小为4KB。
(页表项由 页号 和 块号 组成)
块号是内存的。
块号 -> 物理地址
内存的块号是唯一的,通过它能得到内存内的物理地址。
块号为0,它的物理地址为0。
比如块号为3,它的物理地址是4KB*3 = 12288。
页表:通过页表知道进程的4KB数据块,存放在内存的哪个4KB的空间内;
逻辑地址转换:一个逻辑地址通过计算后,得到在内存中的物理地址。
计算机为32位,按字节编址。逻辑地址也为32位。
页内偏移量为12位,是因为每个页面固定大小为4KB = 212B。
页号有20位,可以认为系统最多有220个页面(内存大小最大为220*4KB = 4GB)。
我们得到一个逻辑地址如何算出真实的物理地址?
前面的20位的页号就是内存的块号,通过前面的方法(块号 -> 物理地址)。
比如块号为n,偏移量为w,物理地址为n*4KB+w。
这个n有很多种算法
我们可以使用除法,逻辑地址 / 页面大小。(除法相当于二进制移位)
或者我们可以和计算机硬件的处理方式,前面的20位就是页号(块号)
一级页表需要扩充成二级页表的原因:
页表是连续存放的。(页表在存储时,只存块号,前面的页号是不存的(比如C语言的数组是不存下标的,所以需要连续存放,从而可以快速算出某个元素存放的地址))
页表的优点是,页表的块可以分散存放,但是页表又需要连续存放,这就体现不出它的优点了,所以我们引进了二级页表。
二级页表
我们前面说过了一级页表,是只存储内存块号的。
假设内存块号大小是220,我们用4B = 32位 来存放内存块号。不用3B存的原因是 为了一个页面正好能装下整数个页表项(如取成4B,一页正好能装下1K个页表项)。
以一个40MB的进程为例,页表项共40KB(40MB/4KB*4B)大小,如果按照一级页表的存法,我们需要10个连续的页框(40KB/4KB)。
我们思考二级页表如何使得这10个页面不需要连续了?
思路:
顶级页表最多只能有一个页面。(这是规定)
一个页面可以存放1K个页表项4KB/4B = 1K。
所以顶级页表虽然只有一个页面但是可以存放1K个页表项,其中每一个页表项对应的是下一级的1K个页表项。所以可以存放的最大空间是1K* 1K *4KB = 4GB内存。
我们知道在一级页表中页号有20位。二级页表我们不需要连续存放了,所以这就是一级页号和二级页号只有10位(1K)的原因。
参考资料:
(视频)https://www.bilibili.com/video/BV1YE411D7nH(书籍)2021操作系统考研复习指导-王道论坛
继承一共有三种:
公有继承私有继承保护继承 文章目录 公有继承基类和派生类的关系is-a(用公有继承表示“是一种”的关系)has-auses-ais-like-ais-implemented-as-a 多态公有继承示例出现的错误示例拓展:基类指针数组:多态,虚方法(好高级)本示例知识点总结 公有继承 基类和派生类的关系 is-a(用公有继承表示“是一种”的关系) 是一种(比如香蕉是一种水果,是水果大类的一个特例,所以水果的所有属性和方法都适用于香蕉,所以很适合使用公有继承来实现)
has-a 有一种(比如午餐中有火腿,但是不要从Lunch类派生出Meat类,而是应该把Meat类的对象作为Lunch类的数据成员,即has-a关系)
uses-a 使用一种(比如computer类使用printer类,但是从Computer类派生Printer类也是不合理的)
is-like-a 像一种(比如律师像鲨鱼,但是律师和鲨鱼是完全不一样的,这是人类习惯使用的一种明喻,所以不能从Shark类派生出Lawyer类)
is-implemented-as-a 被实现为一种(比如把栈实现为数组,但是数组的很多属性和栈不一样,比如数组有索引,所以从Array类派生出Stack类不合理,应该让Stack类包含一个私有的Array类的数据成员)
这些关系中is-a用公有继承的方式实现,其他的关系一般不使用公有继承实现,虽然也可以,但是不太合理,容易导致编程问题。
多态公有继承 前面说的简单的继承是直接使用基类方法,不改写基类方法。多态继承则要多态,表现在:
改写基类的同类方法,这里要用到虚函数。下方示例。基类方法有重载,这时候派生类如果要重写其中一个函数,就要重写基类的所有重载函数,否则会隐藏没被重写的那些。这一点在下一篇博文末尾有示例。当用类对象的引用或指针调用虚方法时,编译器动态联编,根据对象类型判断到底使用该方法的基类版本还是派生类版本。实现多态。这一点很高级。真的很智能。见下方示例拓展。还有什么多态呢?一时间想不起来 示例 //Brass.h #ifndef BRASS_H_ #define BRASS_H_ #include <string> class Brass{ private: std::string fullname; long account;//账户 double balance;//当前结余 public: Brass(const std::string & fn = "None None", long ac = -1, double ba = 0); virtual ~Brass(){}//虚析构函数 void Deposit(double amt); virtual void Withdraw(double amt); virtual void ViewAcct() const; double Balance() const {return balance;} }; #endif //Brass.
数字图像处理与Python实现笔记 摘要绪论1 数字图像处理基础知识2 彩色图像处理初步3 空间滤波4 频域滤波5 图像特征提取6 图像压缩7 图像小波变换与多分辨率7.1 从傅里叶变换到小波变换7.1.1 小波1. 小波的概念2. 小波变换 7.1.2 感性认识小波变换 7.2 简单小波示例7.2.1 哈尔小波构建 7.3 图像多分辨率7.3.1 小波多分辨率7.3.2 图像金字塔7.3.3 图像子带编码 7.4 图像小波变换7.4.1 二维小波变换基础7.4.2 小波变换在图像处理中的应用 7.5 小结 参考资料 摘要 简要介绍数字图像处理涉及的一些基本概念、基本运算、基本类型,以及如何通过Python对数字图像进行读取和简单操作。以彩色图像为例对数字图像处理的基本操作进行介绍,熟悉数字图像处理的基本过程,主要包括颜色空间的基本概念、伪彩色图像处理操作,彩色图像处理简单操作。瞄准在空间域中对图像进行增强,介绍空间滤波的机理、基本概念以及使用的基本技术。本章内容包括空间滤波基本概念、基于空间滤波的图像平滑处理、基于空间滤波的锐化操作以及混合空间增强。从频域角度入手对图像处理及增强方法展开介绍。因为频域滤波所需的数学知识较多,所以本章采取由浅入深的策略,首先介绍一维傅里叶变换,其次介绍二维傅里叶变换和快速傅里叶变换,最后介绍图像频域滤波中出现的各种技术,其大体可分为低通滤波和高通滤波两大类。从全局特征提取和局部特征提取两方面入手,分别介绍颜色特征、纹理特征、形状特征、边缘特征、点特征的提取方法。本章内容是目前机器视觉和图像处理领域的学者关注较多的内容,通过穿插较多的实例,帮助读者理解图像特征提取的基本技术。瞄准如何减少图像传输及存储数据大小,介绍主要使用的压缩技术,包括有损压缩和无损压缩等,并使用JPEG压缩技术串讲全章知识点。介绍图像的小波域表示及多分辨率表示。 绪论 人工智能是引领未来发展的战略性技术,是新一轮科技革命和产业变革的重要驱动力量,将深刻地改变人类社会生活。
促进人工智能和实体经济的深度融合,构建数据驱动、人机协同、跨界融合、共创分享的智能经济形态,更是推动质量变革、效率变革、动力变革的重要途经。
进年来,我国人工智能新技术、新产品、新业态持续涌现,与农业、制造业、服务业等行业的融合步伐明显加快,在技术创新、应用推广、产业发展等方面成效初显。
人工智能技术并不是一个新生事物,它在最近几年引起全球性关注并得到飞速发展的主要原因,在于它的三个基本要素(算法、数据、算力)的迅猛发展,其中又以数据和算力的发展尤为重要。
物联网技术的蓬勃发展使得数据累计的难度越来越低,而芯片算力的不断提升,使得过去只能通过云计算才能完成的人工智能运算,现在可以下沉到最普通的设备上完成。
物联网技术为机器带来感知能力,而人工智能则通过计算算力为机器带来了决策能力,正如感知和大脑对自然生命进化所起到的必然性作用。
1 数字图像处理基础知识 https://hulin.blog.csdn.net/article/details/107570020
2 彩色图像处理初步 https://hulin.blog.csdn.net/article/details/107578369
3 空间滤波 https://hulin.blog.csdn.net/article/details/107589248
4 频域滤波 https://hulin.blog.csdn.net/article/details/107609844
5 图像特征提取 https://hulin.blog.csdn.net/article/details/107639032
6 图像压缩 https://hulin.blog.csdn.net/article/details/107693170
7 图像小波变换与多分辨率 小波变换是近年来图像处理中十分受重视的新技术,面向图像压缩、特征检测、纹理分析等提出了很多新方法,如多分辨率分析、时频域分析、金字塔算法等,都属于小波变换的范畴。信号分析是为了时间和频率之间的相互关系。傅里叶变换提供了有关频域的信息,但有关时间的局部化信息却基本丢失。与傅里叶变换不同,小波变换是通过缩放母小波(Mother Wavelet)的宽度获得信号的频域特征,通过平移母小波获得信号的时间信息。对母小波的缩放和平移是为了计算小波系数,这些小波系数反映了小波和局部信号之间的相关程度。像傅里叶分析一样,小波分析就是把一个信号分解为将母小波经过缩放和平移之后的一系列小波,因此小波是小波变换的基函数。小波变换可以理解为用经过缩放和平移的一系列小波函数,代替傅里叶变换的正弦波和余弦波进行傅里叶变换的结果。小波变换中的小是指在时域具有紧支集或近似紧支集,波是指具有正负交替的波动性,直流分量为0。小波本质上是定义在有限间隔而且其平均值为0的一种函数。与傅里叶变换相比,小波变换是空间(时间)和频率的局部变换,通过伸缩平移运算,对信号逐步进行多尺度细化,最终达到高频处时间细分,低频处频率细分,能自动适应时频信号分析的要求,从而可聚焦到信号的任意细节。小波变换是基于具有变化的频率和有限持续时间的小型波进行的。 7.1 从傅里叶变换到小波变换 7.1.1 小波 1. 小波的概念 小波是在有限时间范围内变化且其平均值为0的数学函数。具有两个特点。
(1)具有有限的持续时间和突变的频率和振幅。
simple_log 最简单的日志收集方式,支持所有平台。
默认情况下,日志会被上传到avenge.app,这是一个简单的日志管理系统,欢迎试用_
你也可以设置自己的服务器来接收日志。
开始 注册账号
https://avenge.app/register
创建应用
https://avenge.app/developer/resources/apps/new
安装扩展
dependencies: simple_log: ^1.2.0 用法
import 'package:simple_log/simple_log.dart'; void main(){ SimpleLog logger = SimpleLog(appId: yourAppId, appKey: 'yourAppKey'); FlutterError.onError = (FlutterErrorDetails details) { logger.e(details); }; runApp(MyApp()); } 其他用法
simple_logger_example.dart
SimpleLog logger = SimpleLog(appId: 123, appKey: 'yourAppKey'); SimpleLog logger2 = SimpleLog(key: 'key2',appId: 456, appKey: 'yourAppKey2'); // key默认值为'default' assert(logger == SimpleLog(key: 'default')); // debug等级 logger.d('hello world'); // info等级 logger.i('hello world'); // warning等级 logger.w({'a':1,'b':'c'}); // 设置本地打印日志的等级,error等级的日志会被打印在本地终端 logger2.
Linux系统发行版大全 Linux发行版列表,枚举Linux发行版,包括按软件包管理系统划分,以及按发行方式划分两种列表。
linux发行版大全目录 Linux系统发行版大全一、按打包方式划分1.1 Debian系1.2 Red Hat系1.3 Slackware系1.4 其他打包方式的包1.5 给老机器订制的小型包 二、按发行方式划分2.1 部分或全部的商业版2.2 专用包2.3 其它平台 三、Linux发行版发展图 * 一、按打包方式划分 1.1 Debian系 Debian GNU / Linux是一种强调使用自由软件的发行版,支持多种硬件平台。Debian及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为软件包管理器。
Adamantix:基于Debian,特别关注安全。Amber Linux:基于Debian,针对拉脱维亚用户作了一些定制。ASLinux Desktop:西班牙语,基于Debian与KDE,针对各种桌面用途,包括家用、办公、教育、游戏、科学、软件开发,最大的卖点在于其丰富的可用性。Anthon GNU/Linux:即安同OS,是直接从源码构建的开源Linux操作系统,但采用Dpkg包管理系统,遵循LGPL授权协议,使用KDE桌面环境,由安同开源操作系统社区社区成员共同开发。B2D Linux:基于Debian,希望可以由“做中学”来产生一个小而美的中文Linux包的计划。Debian GNU/Linux:由大批社区志愿者收集的包,拥有庞大的软件包可供选择(29000个以上),支持大量的硬件平台(12个计算机系统结构)。Debian强调开源和自由。Deepin:现基于Debian,使用自行开发的Deepin DE桌面环境的发行版,启动迅速,简洁美观,开发了深度文件管理器,深度音乐,深度截图,深度终端等特色软件,还与软件厂商合作开发了有道词典、网易云音乐等Linux原生应用。 以下基于Deepin: 统一操作系统(UOS):Deepin与中国电子、中兴、南京诚迈共同打造的商业化发行版。 Grml:进行系统救援的Live CD。Guadalinex:由西班牙的安达卢西亚地方政府推动,基于Debian,针对西班牙语的家庭用户以及学校。Knoppix:第一张Debian的自启动运行光盘。包含的软件非常多,启动时会自动进行硬件监测。从4.0起,用DVD作光盘。 以下基于Knoppix: Gnoppix:Knoppix的GNOME版,该包发行周期较长,未来会跟Ubuntu进行集成。Kanotix:自启动运行光盘,基于Knoppix,也可以安装到硬盘上。有很好的硬件支持,桌面与笔记本电脑的集成也很出色。Kurumin:针对巴西用户的Knoppix。 LinEx:由西班牙的埃斯特雷马杜拉地方政府推动的包。Loco Linux:基于Debian的阿根廷Linux。MEPIS: 基于Debian的桌面和服务器。Rays Linux(华镭):基于Debian,针对亚洲市场,由新华科技(南京)系统软件有限公司开发。Skolelinux:在挪威发起,旨在打造适合于学校的轻便包。Symphony OS:基于Debian,与众不同地采用Mezzo桌面。Ubuntu:知名Linux发行版之一,由Canonical有限公司赞助,基于Debian,使用自己的软件包库,与Debian的有所不同,旨在开发出更加友好的桌面。 以下基于Ubuntu: Linux Mint:基于Ubuntu,人气与Ubuntu不相上下的发行版。Edubuntu:是Ubuntu的教育发行版。Elementary OS:基于Ubuntu,使用基于GNOME名为Pantheon的桌面环境。Kubuntu:使用KDE桌面环境的Ubuntu包。Lubuntu:使用LXDE桌面环境的Ubuntu包。PUD GNU/Linux:基于Ubuntu的小型Linux,可安装于光盘或256 MB以上的U盘。Ubuntu Kylin:添加了少量中国化定制的 Ubuntu 发行版。Xubuntu:使用Xfce桌面环境的Ubuntu包。Start OS:原名Ylmf OS,基于Ubuntu发行版,已停止维护。Ubuntu GNOME:基于Ubuntu是Linux发行版,但使用的是桌面环境是Gnome。Zorin OS:基于Ubuntu的Linux发行版,目的是尽可能的模拟Windows及操作习惯。NOI Linux:一套专门用于NOI竞赛的操作系统。 1.2 Red Hat系 Red Hat系
Red Hat Linux和SUSE Linux是最早使用RPM格式软件包的发行版,如今RPM格式已广泛运用于众多的发行版。这两种发行版后来都分为商业版本和社区支持版本。Red Hat Linux的社区支持版本现称为Fedora,商业版本则称为Red Hat Enterprise Linux。