关系逻辑

Spring源码深度解析笔记(9)——Spring容器的基本实现

蹲街弑〆低调 提交于 2019-12-25 16:57:50
2.1 容器的基本用法 bean是Spring中最核心的东西,因为Spring就像一个大水桶,而bean就像容器中的水,水桶脱离了水也没什么用处。 2.2 功能分析 Spring创建对象的功能就是一下几点: 读取配置文件; 根据配置文件中的配置找到对应的类的配置,并实例化; 调用实例化后的实例。 如果想完成上述功能,至少需要三个类: ConfigReader:用于读取以及验证配置文件,然后放置在内存中; ReflectionUtil:用于根据配置文件中的配置进行反射实例化, App:用于完成整个逻辑的串联。 2.4 Spring的结构组成 2.4.1 beans包的层级结构 整个beans工程的源码包的功能如下: src/main/java:用于展示Spring的主逻辑; src/main/resource:用于存放系统的配置文件; src/test/java:用于主要逻辑进行单元测试; src/test/resource:用于存放测试用的配置文件。 2.4.2 核心类介绍 DefaultListableBeanFactory:XmlBeanFactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个Bean加载的核心部分,是Spring注册以及加载bean的默认实现

Linux 内核中的 Device Mapper 机制

瘦欲@ 提交于 2019-12-25 16:11:08
Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,如图 1。 图1 Device Mapper的内核体系架构 在内核中它通过一个一个模块化的 target driver 插件实现对 IO 请求的过滤或者重新定向等工作,当前已经实现的 target driver 插件包括软 raid、软加密、逻辑卷条带、多路径、镜像、快照等,图中 linear、mirror、snapshot、multipath 表示的就是这些 target driver。Device mapper 进一步体现了在 Linux 内核设计中策略和机制分离的原则,将所有与策略相关的工作放到用户空间完成,内核中主要提供完成这些策略所需要的机制。Device mapper 用户空间相关部分主要负责配置具体的策略和控制逻辑,比如逻辑设备和哪些物理设备建立映射,怎么建立这些映射关系等等,而具体过滤和重定向 IO 请求的工作由内核中相关代码完成。因此整个 device mapper 机制由两部分组成–内核空间的 device mapper 驱动、用户空间的device mapper 库以及它提供的 dmsetup 工具。在下文中,我们分内核和用户空间两部分进行介绍。 内核部分 Device mapper

处理分类问题常用算法(二)-----算法岗面试题

笑着哭i 提交于 2019-12-25 12:56:51
● 分层抽样的适用范围 参考回答: 分层抽样利用事先掌握的信息,充分考虑了保持样本结构和总体结构的一致性,当总体由差异明显的几部分组成的时候,适合用分层抽样。 ● LR的损失函数 参考回答: M为样本个数, 为模型对样本i的预测结果, 为样本i的真实标签。 ● LR和线性回归的区别 参考回答: 线性回归用来做预测,LR用来做分类。线性回归是来拟合函数,LR是来预测函数。线性回归用最小二乘法来计算参数,LR用最大似然估计来计算参数。线性回归更容易受到异常值的影响,而LR对异常值有较好的稳定性。 ● 生成模型和判别模型基本形式,有哪些? 参考回答: 生成式:朴素贝叶斯、HMM、Gaussians、马尔科夫随机场 判别式:LR,SVM,神经网络,CRF,Boosting 详情:支持向量机 ● 核函数的种类和应用场景。 参考回答: 线性核、多项式核、高斯核。 特征维数高选择线性核 样本数量可观、特征少选择高斯核(非线性核) 样本数量非常多选择线性核(避免造成庞大的计算量) 详情:支持向量机 ● 分类算法列一下有多少种?应用场景。 参考回答: 单一的分类方法主要包括:LR逻辑回归,SVM支持向量机,DT决策树、NB朴素贝叶斯、NN人工神经网络、K-近邻;集成学习算法:基于Bagging和Boosting算法思想,RF随机森林,GBDT,Adaboost,XGboost。 ●

华为2019校招笔试-逻辑计算

牧云@^-^@ 提交于 2019-12-25 03:02:49
华为2019校招笔试-逻辑计算 题目描述 常用的逻辑运算有And(表示为&),Or(表示为|),Not(表示为!),他们的逻辑是: 1&1=1 1&0=0 0&1=0 0&0=0 1|1=1 1|0=1 0|1=1 0|0=0 !0=1 !1=0 其中,他们的优先关系为:Not(!)>And(&)>Or(|); 例如: A|B&C 实际是 A(B&C) A&B|C&D 实际是 (A&B)|(C&D) !A&B|C 实际是 ((!A)&B)|C 输入描述 1.测试用例中间无空格,无需考虑空格 2.测试用例表示式中只会出现如下字符: 0,1,(,),&,|,! 3.测试用例所给的输入输出都是合法的。无需考虑非法输入。 4.测试用例表达式长度不会超过128个字符。 5.括号可以嵌套。 例如: 1|(1&0) = 1 1&0|0&1 = 0 !0&1|0 = 1 ((!0&1))|0 = 1 示例1 输入 !(1&0)|0&1 输出 1 示例2 输入 !(1&0)&0|0 输出 0 #思路:有括号先把括号内内容取出运算。然后把运算完的结果拼接,作为新的输入。没有括号时,按照优先级#顺序运算。 #每一步都有输入输出参数。s1为某一步输入 s2为某一步输出 s='!(1&0)&0|0' while(len(s)!=1): p1=0 p2=0 for i in range(len(s)): if

音视频技术之移动直播秒开优化经验

元气小坏坏 提交于 2019-12-24 18:28:26
现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集、美颜/滤镜/特效处理、编码、封包、推流、转码、分发、解码/渲染/播放等。 直播常见的问题包括 主播在不稳定的网络环境下如何稳定推流? 偏远地区的观众如何高清流畅观看直播? 直播卡顿时如何智能切换线路? 如何精确度量直播质量指标并实时调整? 移动设备上不同的芯片平台如何高性能编码和渲染视频? 美颜等滤镜特效处理怎么做? 如何实现播放秒开? 如何保障直播持续播放流畅不卡顿? 本次分享将为大家揭开移动直播核心技术的神秘面纱。 视频、直播等基础知识 一 什么是视频? 首先我们需要理解一个最基本的概念:视频。从感性的角度来看,视频就是一部充满趣味的影片,可以是电影,可以是短片,是一连贯的视觉冲击力表现丰富的画面和音频。但从理性的角度来看,视频是一种有结构的数据,用工程的语言解释,我们可以把视频剖析成如下结构: 内容元素 ( Content ) 图像 ( Image ) 音频 ( Audio ) 元信息 ( Metadata ) 编码格式 ( Codec ) Video : H.264,H.265, … Audio : AAC, HE-AAC, … 容器封装 (Container) MP4,MOV,FLV,RM,RMVB,AVI,… 任何一个视频 Video 文件,从结构上讲,都是这样一种组成方式:

01-01 Web应用

寵の児 提交于 2019-12-24 16:01:10
一 Web应用的组成 好看的小说 www.shupu.org 接下来我们学习的目的是为了开发一个Web应用程序,而Web应用程序是基于B/S架构的,其中B指的是浏览器,负责向S端发送请求信息,而S端会根据接收到的请求信息返回相应的数据给浏览器,需要强调的一点是:S端由server和application两大部分构成,如图所示: 上图:Web应用组成 二 开发一个Web应用 我们无需开发浏览器(本质即套接字客户端),只需要开发S端即可,S端的本质就是用套接字实现的,如下 # S端 import socket def make_server(ip, port, app): # 代表server sock = socket.socket() sock.bind((ip, port)) sock.listen(5) print('Starting development server at http://%s:%s/' %(ip,port)) while True: conn, addr = sock.accept() # 1、接收浏览器发来的请求信息 recv_data = conn.recv(1024) # print(recv_data.decode('utf-8')) # 2、将请求信息直接转交给application res = app(recv_data) # 3

Linux LVM硬盘管理及LVM扩容

大兔子大兔子 提交于 2019-12-24 05:35:44
http://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html Linux LVM硬盘管理及LVM扩容 LVM磁盘管理 一、LVM简介... 1 二、 LVM基本术语... 2 三、 安装LVM... 3 四、 创建和管理LVM... 4 2、 创建PV.. 6 3、 创建VG.. 7 4、 创建LV.. 9 5、LV格式化及挂载... 10 一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。 与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、 'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。 如图所示LVM模型: 由四个磁盘分区可以组成一个很大的空间

Java面试题

我的梦境 提交于 2019-12-24 05:27:53
一、 你对 MVC 的理解, MVC 有什么优缺点?结合 Struts ,说明在一个 Web 应用如何去使用? 答: MVC 设计模式(应用观察者模式的框架模式) M: Model(Business process layer) ,模型,操作数据的业务处理层 , 并独立于表现层 (Independent of presentation) 。 V: View(Presentation layer) ,视图,通过客户端数据类型显示数据 , 并回显模型层的执行结果。 C: Controller(Control layer) ,控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图 MVC 框架的一种实现模型 --- 模型二 (Servlet-centric) : JSP+Servlet+JavaBean ,以控制为核心, JSP 只负责显示和收集数据, Sevlet ,连接视图和模型,将视图层数据,发送给模型层, JavaBean ,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种 MVC 的实现模式。 StrutsMVC 框架 (Web application frameworks) Struts 是使用 MVC 的实现模式二来实现的,也就是以控制器为核心。 Struts 提供了一些组件使用 MVC 开发应用程序:

异常处理

£可爱£侵袭症+ 提交于 2019-12-23 10:50:47
一,异常和错误 part1:程序中难免出现错误,而错误分成两种 1.语法错误(这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正) #语法错误示范一 if #语法错误示范二 def test: pass #语法错误示范三 print(haha 语法错误 语法错误 2.逻辑错误(逻辑错误) #用户输入不完整(比如输入为空)或者输入非法(输入不是数字) num=input(">>: ") int(num) #无法完成计算 res1=1/0 res2=1+'str' 逻辑错误 part2:什么是异常 异常就是程序运行时发生错误的信号,在python中,错误触发的异常如下 part3:python中的异常种类 在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误 # 触发IndexError l=['egon','aa'] l[3] # 触发KeyError dic={'name':'egon'} dic['age'] #触发ValueError s='hello' int(s) 错误举例 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包

机器学习-逻辑回归

别来无恙 提交于 2019-12-23 08:51:08
#原理 逻辑回归是分类问题。 对x的输入特征进行学习,输出y值属于哪一类的分类算法。 比如:在titanic机器学习中,给出乘客的姓名/年龄/性别等一系列的值(X的值),通过对一些列值的学习,得出最终乘客是幸存还是死亡(最终的y值是0还是1,0代表死亡,1代表幸存)。 首先,y=wx+b,这是最基本的线性公式。即x和y呈现线性对应关系。. 但是,在很多实际问题处理时,输入变量x和输出变量y之间,是非线性的关系。这就要在x和y中间引入一个中间变量z。使得z=wx+b,y=g(z)。最终的等于变为y=g(wx+b)。 逻辑回归的目的是,根据给定的x,判断y属于哪一类。即希望输出结果y是0或者是1的离散值。 z=wx+b,该式得到的z是一个连续的值。通过函数y=g(z)的映射,将该值映射到y上的离散值。在熟悉函数中,有这么一个sigmoid函数可以做到。 该公式的图像如图所示: 可以看出,该函数z<0的区间,y<0.5;在z>0的区间,y>0.5。 在这里,z即使x通过特征值的计算,得出的生存几率。我们给定一个评价标准,如:当z>0.5,即乘客的生存几率大于0.5时,认为乘客是可以活着的。通过这种方式,可以得到y和z的对应关系。 问题: 现在的问题是,在z=wx+b中如何得到w和b的值,使得训练数据尽可能的准确。 在预测P(y=1|x),即给定x的情况下,y=1的概率时。可以用 P(y