本文,在大文豪的static与C#中的static随笔基础上修改,增加了几个关键知识点 1、static 关键字简介 static是C#中经常使用的关键字之一,这个关键字常用于方法、字段、属性、事件、构造函数、类中,不能用于常量、索引器、析构函数,使用static关键字,必须知道下面几个知识点: (1)、静态方法的调用与非静态方法的调用方式 a、静态方法调用方式:类名.静态方法名 b、非静态方法调用方式:new 类().非静态方法 静态方法是属于类的,非静态方法是属于类实例(对象)的。 (2)、内存的初始化
CFS 调度器 ( Completely Fair Scheduler ) 是 " 完全公平调度器 " , " 完全公平调度算法 " 对每个 进程 都是 公平 的 ,
1.基元类型 编译器直接支持的数据类型成为基元类型。基元类型与FCL中的类型有直接的映射关系[int=Int32],这样我们可以简化的方式书写代码,并且编译后的IL和直接使用FCL中的数据类型是完全相同的。 Checked和Unchecked操作: Byte b=100; b=(Byte)(b+200); CLR只在32位和64位上进行算数运算,所以b首先会被转换为32位的值再和100相加,得到的是32位的值,接着转型为Byte,再然后将其放入b的存储堆栈。但是b的结果是44,反生了溢出,并不是期望的300
在 linux-5.6.18\include\linux\sched.h 头文件中 task_struct " 进程描述符 " 结构体 中定义了 进程优先级字段如下 :
1.简述private、protected、public、internal修饰符的访问权限。
重要程度:10/10,身家性命般重要。通常这也是各种招聘工作的第一个要求,即“熟悉C#”的一部分。连这部分都不清楚的人,可以说根本不知道自己每天都在干什么。我们天天使用C#写程序,但如果连C#基础的东西都不懂,怎么证明你“熟悉C#”呢?怎么让人觉的你对C#有兴趣呢?
上面一段非常简单代码,其生产的IL代码如下,在使用常量变量的地方,把她的值拷过来了(把常量的值内联到使用的地方),与常量变量A.PORT没有关系了。假如A引用了B程序集(B.dll文件)中的一个常量,如果后面单独修改B程序集中的常量值,只是重新编译了B,而没有编译程序集A,就会出问题了,就是上面所说的不支持跨程序集版本更新。常量值更新后,所有使用该常量的代码都必须重新编译,这是我们在使用常量时必须要注意的一个问题。
定义是很简单的,我们这里不写官方的语言,我自己看着都烦,我们就用白话介绍,抽象类本质是一个类,没问题,那么类里面一般都是有方法的,方法包括方法名和方法体,这是常识对不对,那么什么是抽象类呢?如果一个类里面有一种方法只有方法名却没有方法体,这样的类就是抽象类!
Lombok 由于其使用的便利性, 目前流传非常广泛。甚至有呼声希望其能被Java官方引入,成为JDK的一部分。
参考 【Linux 内核】调度器 ⑨ ( Linux 内核调度策略 | SCHED_NORMAL 策略 | SCHED_FIFO 策略 | SCHED_NORMAL 策略 | SCHED_BATCH策略 ) 博客 , 介绍了 Linux 内核相关的调度策略 ;
Linux 内核的 " 进程调度 " 是按照 设计好的调度算法 安排的 , 该算法对应的功能模块 称为 " 调度器 " , 英文名称是 Scheduler ;
中 , 简单介绍了 进程优先级概念 , 本篇博客中开始介绍 Linux 内核中优先级相关源码 ;
如果你非常清楚属性的本质的话,那么上述代码可以进行转换,将属性转换为普通方法。(属性的本质就是方法嘛)
java接口的修饰符:abstract(inteeface本身就是抽象的,加不加abstract都一样)。
资源管理(尤其是内存回收)曾经是程序员的噩梦,不过在.NET平台上这个噩梦似乎已经不复存在。CLR在后台为垃圾回收做了很多事情,使得我们现在谈起在.NET上进行开发时,都会说还是new一个对象吧!回收?有垃圾回收器呢。其实并没有这么简单。
变量在程序中扮演着重要的角色。它们用于存储和操作数据,为程序提供了灵活性和可扩展性。通过变量,我们可以方便地存储和访问不同类型的数据,如整数、浮点数、字符串等。变量还允许数据在程序的不同部分之间进行传递和共享,实现数据的交流和共享。同时,变量也用于对数据进行各种操作和计算,如算术运算、逻辑判断等,实现对数据的处理和转换。此外,变量还可以用于跟踪程序的状态和条件,根据不同的条件执行不同的操作或决策,实现程序的流程控制和逻辑控制。变量的可变性和灵活性使得程序的行为可以随着变量的值的改变而调整,满足不同的需求和条件。合理地管理变量可以提高程序的内存利用率,避免内存泄漏和资源浪费。因此,了解变量在程序中的作用和重要性对于设计和编写高质量、高效率的程序至关重要。
程序的本质就是“数据+算法”,或者说用算法来操作数据来得到自己想要的结果。在程序中,数据表现为各种各样的变量,算法则表现为各种各样的函数(操作符是函数的简记法)。即使是到了面向对象时代有了类等数据结构的出现,这一本质仍然没有改变---类的作用只是将散落在程序中的变量和函数进行归档封装并控制对它们的访问而已。被封装在类中的变量称为字段,它表示的是类或实例的状态;被封装在类里的函数叫做方法,它表示的是类或实例的功能。字段和类构造出了最原始的面向对象封装,这时候的面向对象中还不包含事件,属性等概念。
由 Tamme Schichler 所写,发布于 2021 年 11 月 25 日,预计阅读完需要 15 分钟。 点击查看原文,以及原文的讨论。
============================================================================= ============================================================================= 涉及的知识点有: 1:Eclipse的概述和使用(掌握) 2:API的概述(了解) 3:Object类的概述和使用握) (1)Object类的概述 (2)Object类的构造方法 (3)要掌握的Object类的方法(掌握) A:public String toString() B:public boolean eauals(Object obj) (4)要了解的Object类的方法 A:public int hashCode() B:public final Class getClass() C:protected void finalize() D:protected Object clone() (5)两个注意问题 ============================================================================= ============================================================================= 1:Eclipse的概述和使用(掌握) ----------------------------------------------------------------------------- 2:API的概述(了解) (1) API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数。 目的是:提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或无需理解内部工作机制的细节。 (2)Java API就是Java提供给我们使用的类(也即就是JDK提供给我们的一些提高编程效率的java类), 这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用。 我们可以通过查询帮助文档(.chm文件)来了解Java提供的API如何使用。 例如:JDK_API_9.0_zh_CN.CHM JDK_API_1.6_zh_CN.CHM 1.6版本是最常用的版本,是由之前未被Oracle收购的SUN公司为我们中国程序猿写的。给SUN打call!!! ----------------------------------------------------------------------------- 3:Object类(掌握) (1)Object类的概述 Object n 物体;东西;对象 从JDK1.0版本开始。 Object是类层次结构的根类,所有的类都直接或者间接的继承自Object类。所有对象(包括数组)都实现了这个类的方法。 (2)Object类的构造方法 public Object() {} 有且只有一个,并且是无参构造。 这其实就是理解当时我们说过的:子类的构造方法默认访问的是父类的无参构造。 --------------------------------------- (3)要掌握的Object类的方法(掌握) A:public String toString() 返回对象的字符串表示,默认是由类的全路径+@+哈希值的十六进制表示。 结果应该是一个简明扼要的表达,容易让人阅读。 上面的表示其实是没有意义的,建议一般子类都会重写该方法。 没有重写该方法前: Student s = new Student(); System.out.println(s.toString()); // cn.itcast_02.Student@424c0bc4 System.out.println(s.getClass().getName() + '@' + Integer.toHexString(s.hashCode())); // cn.itcast_02.Student@424c0bc4
他例举了 CORBA、基于组件的架构、EJB、SOA 等例子,然后就问微服务是否会带来不一样的结果。
值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等。 1、赋值方式:将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对象的引用(即内存地址,类似C++中的指针),而不复制对象本身。 2、继承:值类型不可能派生出新的类型,所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。 3、null:与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。 4、每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值,值类型初始会默认为0,引用类型默认为null。 5、值类型存储在栈中,引用类型存储在托管堆中。
小勤:这个透视表里的单价和折扣的汇总内容怎么去掉啊?这些汇总(平均)项是完全没有意义的:
我们在编程中最常用的模式就是单例模式了,然而单例模式都用在什么场合?为什么不用静态方法而要用单例模式呢?要搞清这些问题,需要从静态方法和非静态方法的区别和联系说起。 一、静态方法常驻内存,非静态方法只有使用的时候才分配内存? 一般都认为是这样,并且怕静态方法占用过多内存而建议使用非静态方法,其实这个理解是错误的。 为什么会这样,先从内存分配开始说起: 托管堆的定义:对于32位的应用程序来说,应用程序完成进程初始化后,CLR将在进程的可用地址空间分配一块保留的地址空间,它是进程(每个进程可
文章作者:Tyan 博客:noahsnail.com | CSDN | 简书
设计一个「类」的时候有什么原则 终极目标:提升代码的可理解性。 一个类应该是一个清楚的抽象,处理一些明确的责任。 封装,每个对象应该尽可能少了解系统的其他部分。这样一旦发生变化,需要了解这一变化的对象就会比较少。 修改函数和查询函数分开设计,在查询函数里不要做任何修改,同时最好用 get 和 set 命名。 重构的基本原则? 添加新功能,和重构不可同时进行,重构时不加新功能,加新功能时不重构。 重构时不应该添加任何测试。 小步前进,频繁测试。 一个函数应该且只应该完成一件事情。 对一个对象/函数来说,哪些地
Java 类的生命周期分为 5 个阶段,分别是 Loading(加载)、Linking(连接)、Initializing(初始化)、Usin(使用) 和 Unloading(卸载)。其中 Linking 阶段又分为 Verification(验证)、Preparation(准备) 和 Resolution(解析) 三个部分。
如果某个类型的实例需要与该类型的其它实例进行比较或者排序的话,那么该类型就可以通过实现IComparable<T>接口来达到此目的。
内部类经常用在编写图形界面,比如swing和安卓的程序,所以在我们通常的web程序中使用较少,但是我们还是有必要来认识一下他。
C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。
垃圾回收解放了手工管理对象的工作,提高了程序的健壮性,但副作用就是程序代码可能对于对象创建变得随意。
有时你想要编写一个类,这个类只是静态方法和静态域的组成,这样的一个类获得一个糟糕的名声因为一些人滥用他们为了避免对对象的术语进行思考,但是他们的确是有用的
GoF的设计模式一共23个,可以分为3大类:创建型、结构型和行为型,这篇文章主要讨论创建型。
extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗? 答案与分析: 1)、不可以,程序运行时会告诉你非法访问。原因在于,指向类型T的指针并不等价于类型T的数组。extern char *a声明的是一个指针变量而不是字符数组,因此与实际的定义不同,从而造成运行时非法访问。应该将声明改为extern char a[ ]。 2)、例子分析如下,如果a[] = “abcd”,则外部变量a=0x61626364 (abcd的ASCII码值),*a显然没有意义 显然a指向的空间(0x61626364)没有意义,易出现非法内存访问。 3)、这提示我们,在使用extern时候要严格对应声明时的格式,在实际编程中,这样的错误屡见不鲜。 4)、extern用在变量声明中常常有这样一个作用,你在.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在.h中并用extern来声明。
泛型是JDK 5引入的概念,泛型的引入主要是为了保证java中类型的安全性,有点像C++中的模板。
大家在平时开发过程中是否见过在现有spring boot或者asp.netcore官方web开发框架基础上二次创作产生的新框架,例如C#的ABP或者java的javaboot都是基于各自官方基础框架基础上产生的,他们都内置了大量web开发需要的各类组件,例如ORM,对象映射,Redis组件,Rabbitmq组件,Kafka组件,Mongodb,Swagger,Grpc,甚至微服务治理的各类组件,例如Consul,SpringCloud Gateway,Eureka,Ribbon等等,号称为了开发效率内置全家桶就是为了二次封装优化使用方式简化开发人员使用成本和升级成本,那这样真的提高了效率吗,真的达到了降低升级的成本吗?
编程语言的选择应该说是学习编程时碰到的第一个问题,并且这个问题会在今后相当长的一段时期(一年到几年)内一直萦绕在你身上。根据我自己的认识, 对于这个问题,没有人能给你一个确定的答案,但是你会发现身边的人一直在为这个问题在论战。至于我, 我也同样没办法给出一个放之四海而皆准的答案,我能说的只有三点: 1. 每种现存的语言都有其存在的合理性; 2. 没有任何一种语言是能够包打天下的; 3. 编程入门应该根据自己以后的发展需要来选择。 就第一点合理性而言,是很显而易见的。 实际上, 在这个世界上曾经出现过的编程语言的种类远远超过目前依然存在的数目。语言本身就在经历一个优胜劣汰的过程。 剩下的语言本身就具有其不可替代性,因此具有其一大批使用者和信众。因此武断地认定某种广为流行的语言是否时髦是没有意义的。 其次, 从我自己对各种语言的尝试经历来看,的确是没有任何一种语言能够一统江湖的,现在没有,以后也没有。 我想,其原因在于不同的语言的设计和与之想对应的应用领域是相关的。例如汇编语言多用于硬件相关的开发, C语言和汇编语言多用于操作系统底层相关的开发以及C++,Java和C#用于应用程序开发三个不同的领域。 这三个不同应用领域有着不同特征和对语言表达能力的相应要求,因此是没办法互换的。 硬件相关的开发注重的是性能和实时性,对于逻辑的复杂性没有太大要求;操作系统的开发既需要考虑硬件问题,有需要对上层应用程序提供一个统一,方便和有效 的接口界面;而应用程序的开发往往需要包含复杂的逻辑和体系结构。 因此,如果你说java比汇编好,因为java语言清晰快捷;或是汇编语言比java好,因为汇编语言是所有语言的基础支持,那么你说的都是正确的,但是 都是没有意义的。因为谁也不可能取代谁,他们之间的关系是:各司其职;而非谁吃掉谁。 最后回到语言的选择这个问题上,初学入门应该学什么语言。我觉得总体而言,不同领域的初学者应该选择不同的语言。电子工程专业出身的人,应该以汇编和C语 言的学习作为入门,因为这两个语言和今后的工作最为密切相关,也是以后赚钱的“金刚钻”的所在。而计算机专业出身的初学者就相对复杂一些,如果是学系统结 构专业的,应该主攻C和C++语言。如果是学习软件工程的,则Java和C#是不二之选。 当然,这这里我不讨论个人兴趣问题,学电子的对java有兴趣也没什么错。
以上的内容和我们即将开始课程内容无关,不想看的可以略过。仅作为我个人为什么要开设这门课程的理由或者是执念吧。
1)位置: 内部类是定义一个类的里面或者一个方法中,或者一个表达式中。 顶层类是定义在package下 2)修饰符:顶层类只能处于public和默认访问级别, 成员内部类可以处于public, protected, private和默认这4种访问级别;
随着C#的发展,该语言内容不断丰富,开发变得更加方便快捷,C# 的锋利尽显无疑。C# 语言从诞生起就是强类型语言,这一性质到今天不曾改变,我想以后也不会变。既然是强类型语言,那编写任一程序均要求满足下面的基本条件:
士人有百折不回之真心,才有万变不穷之妙用。立业建功,事事要从实地着脚,若少慕声闻,便成伪果;讲道修德,念念要从虚处立基,若稍计功效,便落尘情。 ——菜根谭
通常在层次关系的根部有一个基类,其他类则直接或间接的从基类继承而来,这些继承得到的类称为派生类。基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自特有的成员。
假如有一个设备,采用UDP组播协议,在正常通讯情况下通过网络给你发送数据,注意的是,不管通道有没有通都会发出数据但是对应的关键标识没有,设备每100ms发送一次。
事实表 每个数据仓库都包含一个或者多个事实数据表。事实数据表可能包含业务销售数据,如现金登记事务所产生的数据,事实数据表通常包含大量的行。事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性纬度表的主键,而维度表包含事实记录的特性。事实数据表不应该包含描述性的信息,也不应该包含除数字度量字段及使事实与纬度表中对应项的相关索引字段之外的任何数据。 包含在事实数据表中的“度量值”有两中:一种是可以累计的度量值,另一种是非累计的度量值。最有用的度量值是可累计的度量值,其累计起来的数字是非常有意义的。用户可以通过累计度量值获得汇总信息,例如。可以汇总具体时间段内一组商店的特定商品的销售情况。非累计的度量值也可以用于事实数据表,单汇总结果一般是没有意义的,例如,在一座大厦的不同位置测量温度时,如果将大厦中所有不同位置的温度累加是没有意义的,但是求平均值是有意义的。 一般来说,一个事实数据表都要和一个或多个纬度表相关联,用户在利用事实数据表创建多维数据集时,可以使用一个或多个维度表。 维度表 维度表可以看作是用户来分析数据的窗口,纬度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构。例如,包含产品信息的维度表通常包含将产品分为食品、饮料、非消费品等若干类的层次结构,这些产品中的每一类进一步多次细分,直到各产品达到最低级别。 在维度表中,每个表都包含独立于其他维度表的事实特性,例如,客户维度表包含有关客户的数据。维度表中的列字段可以将信息分为不同层次的结构级。 结论
领取专属 10元无门槛券
手把手带您无忧上云