精华内容
下载资源
问答
  • 说说个人对AOP的理解

    千次阅读 2018-08-16 10:44:36
    AOP做java开发的同学都很熟悉,这是怎样的一个概念,即便用了很久,但在回答对AOP的理解此类问题时,回答的还是不够全面,所以特地做此总结。本篇只做理解,暂不谈论原理。 AOP(Aspect Oriented Programming ) ...

    AOP做java开发的同学都很熟悉,这是怎样的一个概念,即便用了很久,但在回答对AOP的理解此类问题时,回答的还是不够全面,所以特地做此总结。本篇只做理解,暂不谈论原理。

    AOP(Aspect Oriented Programming ) 面向切面编程,也是Spring框架的核心之一,它是一种先进的思想,为解耦而生,作为这种思想的技术支撑离不开动态代理(下篇会进行详细讨论)。可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

    使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

    AOP核心概念:

    1、横切关注点

    对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点

    2、切面(aspect)

    类是对物体特征的抽象,切面就是对横切关注点的抽象

    3、连接点(joinpoint)

    被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是

    被拦截到的方法,实际上连接点还可以是字段或者构造器

    4、切入点(pointcut)

    对连接点进行拦截的定义

    5、通知(advice)

    所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最

    终、环绕通知五类

    6、目标对象

    代理的目标对象

    7、织入(weave)

    将切面应用到目标对象并导致代理对象创建的过程

    8、引入(introduction)

    在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段

    展开全文
  • 面试题,说说你对spring IOC和AOP的理解

    万次阅读 多人点赞 2019-07-06 19:50:42
    在面试中,经常会问,说说你对spring IOC和AOP的理解,问题很宽泛,似乎不知道从何说起。 回答思路:1.先用通俗易懂的话解释下何为IOC和AOP---------》2.各自的实现原理-----------》3.自己的项目中如何使用 以下是...

    https://blog.csdn.net/s20081294/article/details/44677387

    在面试中,经常会问,说说你对spring IOC和AOP的理解,问题很宽泛,似乎不知道从何说起。

    回答思路:1.先用通俗易懂的话解释下何为IOC和AOP---------》2.各自的实现原理-----------》3.自己的项目中如何使用

    以下是个人的一些总结,仅供参考。


    1.IOC

    许多应用都是通过彼此间的相互合作来实现业务逻辑的,如类A要调用类B的方法,以前我们都是在类A中,通过自身new一个类B,然后在调用类B的方法,现在我们把new类B的事情交给spring来做,在我们调用的时候,容器会为我们实例化。


    2. IOC容器的初始化过程

         资源定位,即定义bean的xml-------》载入--------》IOC容器注册,注册beanDefinition

        IOC容器的初始化过程,一般不包含bean的依赖注入的实现,在spring IOC设计中,bean的注册和依赖注入是两个过程,,依赖注入一般发生在应用第一次索取bean的时候,但是也可以在xm中配置,在容器初始化的时候,这个bean就完成了初始化。


    3. 三种注入方式:构造方法注入,setter注入,基于注解的注入。我们常用的是基于注解的注入

    4. bean是如何创建---  工厂模式

    5. 数据是如何注入-------反射

    6.AOP

            面向切面编程,在我们的应用中,经常需要做一些事情,但是这些事情与核心业务无关,比如,要记录所有update*方法的执行时间时间,操作人等等信息,记录到日志,

    通过spring的AOP技术,就可以在不修改update*的代码的情况下完成该需求。

    7.AOP的实现原理------代理

           

    以下文章本人觉得可以很好地回答前两个问题,特此转载供读者参考:

    http://blog.csdn.net/it_man/article/details/4402245     IOC的定义及实现原理---反射

    http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html AOP的定义实现原理—代理

    http://outofmemory.cn/code-snippet/3762/Spring-AOP-learn-example     AOP的应用的三种实现方式


    总结:

    IOC:控制反转也叫依赖注入,IOC利用java反射机制,AOP利用代理模式。所谓控制反转是指,本来被调用者的实例是有调用者来创建的,这样的缺点是耦合性太强,IOC则是统一交给spring来管理创建,将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。
    AOP:面向切面编程。(Aspect-Oriented Programming)
    AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理

    展开全文
  • 说说对运维的理解

    千次阅读 2018-07-11 16:56:14
    配置管理:通过配置管理平台(自研,开源)管理服务涉及到的个模块,个版本的关系以及配置的准确性。 发布管理:通过构建自动化的平台确保每一次版本变更可以安全可控地 发布到生产环境。 容量管理:在服务运行...
    运维工程师
    (运营),负责维护并确保整个服务的高可用性,同时不断优化系统架构提升部署效率,优化资源利用率提高整体的投资回报率。
    运维工程师面对的最大挑战是大规模集群的管理问题,如何管理好几十万台服务器上的服务,同时保障服务的高可用性,是运维工程师面临的最大挑战。
    中文名运维工程师外文名操作技能服务器,操作系统,数据库应用网络,服务器
    目录
    1职责
    2工作内容
    3能力要求
    ▪基础技能:
    ▪加分技能:
    4软素质要求
    5职业发展
    6前景
    职责
    无论做什么运维,运维工程师最基本的职责都是负责服务的稳定性,确保服务可以7 * 24H不间断地为用户提供服务在此之上运维工程师的主要工作职责如下
    质量:保障并不断提升服务的可用性,确保用户数据安全,提升用户体验。
    效率:用自动化的工具/平台提升软 在研发生命周期中的工程效率。
    成本:通过技术手段优化服务架构,性能调优;通过资源优化组合降低成本,提升ROI。
    从产品的生命周期来看:
    1.产品发布前:负责参与并审核架构设计的合理性和可运维性,以确保在产品发布之后能高效稳定的运行
    .2。产品发布阶段:负责用自动化的技术或者平台确保产品可以高效的发布上线,之后可以快速稳定迭代。
    3.产品运行维护阶段:负责保障产品7 * 24H稳定运行,在此期间对出现的各种问题可以快速定位并解决;在日常工作中不断优化系统架构和部署的合理性,以提升系统服务的稳定性。
    工作内容
    在软件产品的整个生命周期中运维职业:工程师都需要适时地参与并发挥不同的作用英文,因此运维工程师的工作内容和方向非常多
    事件管理:目标是在服务出现异常时尽可能快速的恢复服务,从而保障服务的可用性;同时深入分析故障产生的原因,推动并修复服务存在的问题,同时设计并开发相关的预案以确保服务出现故障时可以高效的止损在这方面主要工作内容有:
    问题发现:设计并开发高效的监控平台和告警平台,使用机器学习,大数据分析等方法对系统中的大量监控数据进行汇总分析,以期在系统出现异常的时候可以快速的发现问题和判断故障的影响。
    处理:设计并开发高效的问题处理平台和工具,在系统出现异常的时候可以快速/自动决策并触发相关止损预案,快速恢复服务。
    问题跟踪:通过分析问题发生时系统的各种表现(日志,变更,监控)确定问题发生的根本原因,制定并开发预案工具。
    变更管理:以可控的方式,尽可能高效的完成产品功能的迭代的变更工作在这方面运主要工作内容有
    配置管理:通过配置管理平台(自研,开源)管理服务涉及到的多个模块,多个版本的关系以及配置的准确性。
    发布管理:通过构建自动化的平台确保每一次版本变更可以安全可控地发布到生产环境。
    容量管理:在服务运行维护阶段,为了确保服务架构部署的合理性同时掌握服务整体的冗余,需要不断评估系统的承载能力,并不断优化之在这方面主要工作内容有
    容量评估:通过技术手段模拟实际的用户请求,测试整个系统所能承担的最大吞吐;通过建立容量评估模型分析压力测试过程中的数据以评估整个服务的容量
    容量优化:基于容量评估数据,判断系统的瓶颈并提供容量优化的解决方案比如通过调整系统参数,优化服务部署架构等方法来高效的提升系统容量
    架构优化:为了支持产品的不断迭代,需要不断的进行架构优化调整以确保整个产品能够在功能不断丰富和复杂的条件下,同时保持高可用性。
    能力要求
    基础技能:
    精通壳/ Python的/ Perl的等1至2种编程语言
    熟练掌握常用数据结构状语从句:算法,并能灵活运用
    熟悉基础网络知识
    深入理解的Linux操作系统
    加分技能:
    熟悉开源的监控平台工具,比如:神经节,Nagios的等
    熟练掌握外壳脚本熟悉awk中,桑达基础等工具
    熟悉分布式计算或者存储系统- ,比如Hadoop的/ HBASE /暴等
    学习机器原理能付诸实践者更佳
    熟悉TCP / IP,HTTP等网络协议,精通插座编程网络
    软素质要求
    强烈的责任心与主动性,对所负责工作有所有者意识,并自我能驱动成长
    能承担较大工作压力,有较强独立分析,问题解决能力的
    工作中需要胆大心细,探索具备创新精神
    职业发展
    运维人员的要求特别严苛,因为运维人员针对不同的问题,需要不断的补充扩大自己的知识和研究范畴
    在初级阶段,优秀运维人员会体现出格外出众的主动性和责任心,面对陌生的业务会主动学习和拓展自己对业务对认识和相应的知识范畴,以能够足够的胜任业务的独立维护
    在逐步的发展阶段中,注重总结反省的工程师会逐渐成长为高阶运维人员,通常他们会有比较体系化的服务运维理解。也有一部分工程师由于出色的项目管理规划能力,逐渐成为项目经理。
    再进一步的发展,高阶的运维人员对于产品的理解将非常的透彻,因而在这种情况下,高阶运维人员甚至可以成为产品的产品经理,产品研发的咨询顾问,在产品功能的设计与开发中起到至关重要的角色
    前景
    运维所涉及的知识面,专业点非常广,对从业人员素质也要求非常高,运维工作在大型互联网公司也越来越重要。随着互联网的高速发展,网站规模越来越大,架构越来越复杂,对 站运维工程师的需求也会越来越急迫,特别是对有经验的运维人才需求量大,而且是越老越值钱。

    展开全文
  • 关于高斯滤波的一些理解

    万次阅读 多人点赞 2017-01-04 07:44:34
    高斯滤波对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值,对图像进行平滑的同时,同时能够更的保留图像的总体灰度分布特征。 二、高斯滤波 数值图像处理中,高斯滤波主要可以使用两种方法实现...

    一、滤波算法简介

             图像处理中,常用的滤波算法有均值滤波、中值滤波以及高斯滤波等。均值滤波使用模板内所有像素的平均值代替模板中心像素灰度值,这种方法易收到噪声的干扰,不能完全消除噪声,只能相对减弱噪声;中值滤波计算模板内所有像素中的中值,并用所计算出来的中值体改模板中心像素的灰度值,这种方法对噪声不是那么敏感,能够较好的消除椒盐噪声,但是容易导致图像的不连续性。高斯滤波对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值,对图像进行平滑的同时,同时能够更多的保留图像的总体灰度分布特征。

    二、高斯滤波

            数值图像处理中,高斯滤波主要可以使用两种方法实现。一种是离散化窗口滑窗卷积,另一种方法是通过傅里叶变化。在这我主要想说说第一种方法的高斯滤波。离散化窗口滑窗卷积的时,主要利用的是高斯核,高斯核一般是一个奇数的大小的高斯模板。常用的高斯模板有如下几种形式:

           上图所示是常用的两种高斯模板, 左侧是常用的3*3的高斯模板,右侧是常用的5*5高斯模板。那么,上述高斯模板中的参数是怎么得到的呢?这是我第一次接触高斯滤波时,一直不太明白的问题。经过一段时间的学习,查阅资料。才渐渐明白高斯模板中的参数是如何得到的!

           高斯模板中的参数是通过高斯函数计算出来的。计算高斯模板参数时,通过如下公式:

        x的平方和y的平方分别表示的是邻域内其他像素与邻域内中心像素的距离,Sigmma代表的是标准差。

        如上图所示由二维高斯图像可知,标准差越小,二维高斯图像越窄小,平滑效果不明显;标准差越大,而为高斯图像越矮宽,滤波效果比较明显。主要代码如下:

            
            double weight;
    	double sum = 0;
    	double Sigmma = 1;
    
    	double Gaussian_Temp[SIZE][SIZE] = {0};
    	int i,j;
    
    	weight = 2*PI*Sigmma*Sigmma;
    	for(i =0;i <SIZE;i++)
    	{
    		for(j = 0;j < SIZE;j++)
    		{
    			Gaussian_Temp[i][j] =exp(-((i-SIZE/2)*(i-SIZE/2)+(j-SIZE/2)*(j-SIZE/2))/(2.0*Sigmma*Sigmma));
    			sum += Gaussian_Temp[i][j];
    		}
    	}
    
    	for(i = 0; i < SIZE;i++)
    	{
    			for(j = 0;j < SIZE;j++)
    		{
    			Gaussian_Temp[i][j] = Gaussian_Temp[i][j]/sum;//归一化处理
    			printf("%f ",Gaussian_Temp[i][j]);
    		}
    			printf("\n");
    	}

            以5*5高斯模板为例,计算出来的高斯模板值为:

            计算出来的结果与上图5*5的高斯模板有一定差异,为什么会不一样呢?查阅资料,解释到:高斯模板实际上也就是模拟高斯函数的特征,具有对称性并且数值由中心向四周不断减小,上述图像中的5*5这个模板刚好符合这样的特性,并且非常简单,容易被大家接受,于是就比较经典。也就是说上述图像中5*5的高斯模板只是对二维高斯函数理论上计算出来的值的一种近似处理,如何从理论上的计算出来的值得到图片中5*5的高斯模板呢?我是这么理解高斯模板中各个参数得由来,如何从理论值得到高斯模板中的值还不太清楚!!

          此外,计算高斯模板参数时,需要归一化处理,为什么需要进行归一化处理呢?我的理解如下:

    ​      这是一维高斯函数概率密度函数图像。横轴表示可能得取值x,竖轴表示概率分布密度F(x),由高斯概率密度函数可知,那么不难理解这样一个曲线与x轴围成的图形面积为1。在实际应用中,在计算离散近似的时候,在大概距离之外的像素都可以看作不起作用这些像素的计算也就可以忽略。也就是说,为了尽可能的模拟高斯函数的相关性质,计算高斯模板的时候,计算出来的高斯模板中各个数值其和必须为1,这也就是为什么需要进行归一化的原因。

        高斯函数计算出来的模板之所以归一化,另外一种解释是:归一化之后,通过卷积计算出来的模板中心像素被限制到了0-255的灰度区间中。假若某一邻域内所有像素的灰度值为255,利用该模板进行卷积之后,求得的模板中心像素灰度值仍然为255;假若计算出来的高斯模板参数之和小于1,那么通过该模板进行卷积之后,模板中心像素的灰度值将小于255,偏离了实际的灰度值,产生了误差。

           归一化的原因更加正确的表述应该为:对灰度级为常数的图像区域,高斯模板的响应该为1。这样才能确保灰度级为常数的图像区域经过高斯模板处理之后,依旧为其本身,而不是被改变为其他灰度级。

         假设 sigma=1,高斯滤波模板大小为3*3,则计算出来的高斯模板为:

        其权重和为0.999984,假若某一邻域内所有像素的灰度值为255,利用该模板进行卷积之后,求得的模板中心像素灰度值将小于255,为254.9954;

        假设上述权重稍稍修改下,不进行归一化,且其高斯权重之和大于1:

        假若某一邻域内所有像素的灰度值为255(或者其他图像平坦区域,白墙或者灯箱里的灰色背景灯),利用该模板进行卷积之后,求得的模板中心像素灰度值将大于255,当其权重之和等于1.044732,则计算出来的中心像素1.044732*255=266.3148将大于255.

        将上述各权重除以1.044732即可进行归一化。归一化后的权重为:

        此外,sigma(标准差)决定了这个图形的宽度,sigma越大,则图形越宽,尖峰越小,图形较为平缓;sigma越小,则图形越窄,越集中,中间部分也就越尖,图形变化比较剧烈。这其实很好理解,如果sigma也就是标准差越大,则表示该密度分布一定比较分散,由于面积为1,于是尖峰部分减小,宽度越宽(分布越分散);同理,当sigma越小时,说明密度分布较为集中,于是尖峰越尖,宽度越窄!

        即,sigma越大,分布越分散,各部分比重差别不大,于是生成的模板各元素值差别不大,类似于平均模板;sigma越小,分布越集中,中间部分所占比重远远高于其他部分,反映到高斯模板上就是中心元素值远远大于其他元素值,于是自然而然就相当于中间值得点运算。

    OpenCV中标准差与窗口大小的换算

    对于高斯函数而言,以均值为中心半径为3σ的范围内已经包含了高斯函数97%以上的信息。下图分别是均值为0,σ为1,横纵坐标范围为[-4,4]的一维高斯函数和二维高斯函数图像,可以明显的看到3σ之外的信息基本无用。

    3σ范围内一维高斯函数和二维高斯函数图像
    由此信息我们可以得出,当我们知道高斯函数σ大小后,高斯核大小可以取ceil(3·sigma).在OpenCV函数createGaussianFilter中,若未指定窗口大小,通过σ推算窗口大小方式如下,半径为σ的3或4倍:

         若指定了窗口大小,但未指定σ大小,则通过窗口大小推算σ的方式如下:σ=0.3×((ksize−1)×0.5−1)+0.8具体地,在函数getGaussianKernel中,当ksize不大于7时,直接从内部的small_gaussian_tab取对应大小的高斯核,若大于7,则使用上式计算出σ然后套用高斯公式,最后再归一化。

        在实际使用时,为了高效,卷积核通常取[0,255]范围内的整数(1个Byte),因此高斯核中心最大取值为255时,窗口尺寸的选取只需让高斯核边界值刚好大于0即可。令高斯核尺寸为n,半径为r,r=\frac{n-1}{2},高斯核x轴上边界(r,0)处与中心(0,0)

    处数值之比如下:

    g_edge / g_center = exp(-(x²+y²)/(2σ²))
                      = exp(-((n-1)/2)²/(2*(0.3((n-1)/2)+0.8)²))

        当n足够大,其极限为:

    exp(-1/(2*0.3²)) = 0.00386592

        公式sigma = 0.3*((ksize-1)*0.5 - 1) + 0.8 . 注意到 1/256=0.00390625,图像像素一般按照8bit存储,公式中0.3是为了保证高斯核内所有像素都将影响输出结果。假若中心值为255,则边界值为255∗0.00386592=0.9858096≈1,是合适的。至于公式中的0.8可能是为了保证当n足够小的时候得到合适的输出结果。

    四、从另外视角确定高斯滤波标准差与窗口大小关系

        我们知道对于核大小为(2M+1)*(2M+1)的二维高斯滤波函数的权重值可以通过如下公式计算:

      其中,上式表示均值为0,方差为\sigma ^{2}r^{2}=x^{2}+y^{2}。因为滤波尺寸为(2M+1)*(2M+1),所以滤波器值在截断点为e^{\frac{-M^{2}}{2\sigma ^{2}}},希望滤波器平滑的降低到0,所以滤波器的最终值应该很小。假设记作为\xi,则参数\sigma应该满足如下关系式

     圆圈代表用来在黑色点出计算尺寸为(2M+1)*(2M+1)的平滑滤波器值的高斯函数的等高线。点O为坐标点(0,0)处,有上述公式可知,其结果为1,在5*5的方形外其值都为0.截断导致最大步长的位置为A,B,C,D,在这些点由上述公式e^{\frac{-2^{2}}{2\sigma ^{2}}},这些点的坐标 为(±M,0)(0,±M)。对于\xi =0.01,可计算出M=2时,\sigma应该为0.659;M=3时,\sigma应该为2.0989,M=4时,\sigma应该为1.318.最后其他权重可以通过e^{\frac{-r^{2}}{2\sigma ^{2}}}计算得出。当M=2,3,4确定的权重值为:

        归一化之后的结果为:

        用MATLAB生成的高斯函数模板参数对比为:其中calc Gaussian filter para为按照上述方法计算得到的参数,original Gaussian filter为原始的高斯滤波公式计算得出的结果。当M= 1时,Sigma=0.8时,其\xi =0.457833,生成的权重值为:

        用于MATLAB生成的高斯函数模板参数对比为:当M= 2时,Sigma=0.8时,其\varepsilon =0.43937,生成的权重值为:

        用于MATLAB生成的高斯函数模板参数对比为:当M= 3时,Sigma=0.8时,其\varepsilon =0.000884,生成的权重值为:

    参考文献:

    http://lps-683.iteye.com/blog/2251180

    如何确定高斯滤波的标准差和窗口大小

    Calculate the Gaussian filter's sigma using the kernel's size

    Image Processing: The Fundamentals  P353

    展开全文
  • 说说对Redis的理解 Redis是一种基于键值对的NoSQL数据库(非关系型数据库);是一个key-value存储系统 Redis有两个特点:高能性 可靠性 高能性:Redis将所有数据都存储在内存中,所有读写性特别高 可靠性:Redis将...
  • 说说你对servlet 的理解或者 servlet 是什么?

    万次阅读 多人点赞 2017-08-06 21:57:55
    说说你对servlet的理解或者 servlet 是什么? Servlet(Servlet Applet),全称Java Servlet,是用Java编写的服务器端程序。而这些Servlet都要实现Servlet这个接口。其主要功能在于交互式的浏览和修改数据,生成...
  • 说说对SaveChanges的理解。 SaveChanges是以Context为维度的一次提交,对于数据库操作的一切动作,只要是在同一个Context实例,所有的操作,在调用SaveChanges方法后,统一体现到数据库中去;
  • ANDROID说说对MENU的理解

    千次阅读 2017-08-04 22:59:00
    ANDROID%E5%88%9D%E5%AD%A6%E4%B9%8B%E7%AE%80%E6%98%93%E8%AE%A1%E7%AE%97%E5%99%A8 Ѿ�����ڴ����㺰ô�
  • 说说你对数据库读写分离的理解 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从...
  • 说说你对互联网行业的理解

    千次阅读 2019-12-19 22:07:49
    对互联网行业的理解,也就是对互联网思维的理解。而要充分理解互联网,就得先理解以下几个思维。 (1)用户思维(2)简约思维(3)极致思维(4)迭代思维(5)流量思维(6)社会化思维(7)大数据思维(8)平台思维...
  • 说说你对Java反射的理解

    千次阅读 2019-10-09 20:29:09
    public class ReflectCase { ...由于缺少上下文,导致不能进行更的优化,如JIT; 不过现代JVM已经运行的足够快,我们应该把主要重心放在复杂的代码逻辑上,而不是一开始就进行各种性能优化。    
  • 关于rest风格一些理解

    千次阅读 2015-11-29 11:53:42
    前言最近的一个项目业务逻辑比较简单,最近只是照猫画虎般的借用springMVC将自己的请求url风格换成rest风格,这样的uri的确是比以前的url具有更高的可读性,但是感觉始终没有真正理解rest风格。重新看了一些资料,将...
  • 说说对EFCore中EntityState的理解。 因为EFCore对于数据库的所有操作都是通过上下文DbContext来完成的,且是通过SaveChanges方法统一落实到数据库中去的;EntityState是EFCore 在对数据库操作增删改的时候,记录当前...
  • 说说你对语义化的理解

    千次阅读 2017-09-16 12:06:19
    2、有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重; 3、方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页...
  • 说说你对MVC和MVVM的理解

    千次阅读 2017-09-17 22:53:21
    1、MVC View 传送指令到 Controller Controller 完成业务逻辑后,要求 Model 改变状态 Model 将新的数据发送到 View,用户得到反馈 所有的通信都是单向的。 ...ViewModel:它是View的抽象,负责View与Model之间信息...
  • 说说你对作用域链的理解

    千次阅读 2017-09-11 17:12:30
    什么是作用域链: 当代码在一个环境中执行时,会创建变量对象的一个作用域链(scope chain,不简称sc)来保证对执行环境有权访问的变量和函数的有序访问。 作用: ...保证执行环境里有权访问的变量和函数是有序的...
  • if (intList instanceof List<Integer>) {} // 编译报错 if (intList instanceof List<?>) {} // 编译通过

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 182,301
精华内容 72,920
关键字:

多一些理解的说说