阅读本文大概需要 3 分钟. 通常,反射用于动态获取对象的类型.属性和方法等信息.今天带你玩转反射,来汇总一下反射的各种常见操作,捡漏看看有没有你不知道的. 获取类型的成员 Type 类的 GetMembers 方法用来获取该类型的所有成员,包括方法和属性,可通过 BindingFlags 标志来筛选这些成员. using System; using System.Reflection; using System.Linq; public class Program { public stati…
阅读本文大概需要 1.5 分钟. 大家好,这是极客精神[C#.NET 拾遗补漏]专辑的第 5 篇文章,今天要讲的内容是操作符. 操作符的英文是 Operator,在数值计算中习惯性的被叫作运算符,所以在中文的概念中,运算符是操作符的一个子集. 操作符是很基础的知识了,基础归基础,我们来回顾一下 C# 操作符那些比较骚的操作,能想到的不多,请大家补充. 操作符的重载 操作符重载大部分语言都没有,而 C# 有.C# 允许用户定义类型对操作符进行重载,方式是使用 operate 关键字把操作符写成公开…
大家好,这是[C#.NET 拾遗补漏]专辑的第 06 篇文章.今天讲讲大家熟悉的单例模式. 单例模式大概是所有设计模式中最简单的一种,如果在面试时被问及熟悉哪些设计模式,你可能第一个答的就是单例模式. 单例模式的实现分为两种:饿汉式和懒汉式.前者是在静态构造函数执行时就立即实例化,后者是在程序执行过程中第一次需要时再实例化.两者有各自适用的场景,实现方式也都很简单,唯一在设计时要考虑的一个问题就是:实例化时需要保证线程安全. 饿汉式 饿汉式实现很简单,在静态构造函数中立即进行实例化: publi…
大家好,这是 [C#.NET 拾遗补漏] 系列的第 07 篇文章. 在 C# 中,大多数方法都是通过 return 语句立即把程序的控制权交回给调用者,同时也会把方法内的本地资源释放掉.而包含 yield 语句的方法则允许在依次返回多个值给调用者的期间保留本地资源,等所有值都返回结束时再释放掉本来资源,这些返回的值形成一组序列被调用者使用.在 C# 中,这种包含 yield 语句的方法.属性或索引器就是迭代器. 迭代器中的 yield 语句分为两种: yeild return,把程序控制权交回调…
大家好,这是 [C#.NET 拾遗补漏] 系列的第 08 篇文章,今天讲 C# 强大的 LINQ 查询.LINQ 是我最喜欢的 C# 语言特性之一. LINQ 是 Language INtegrated Query 单词的首字母缩写,翻译过来是语言集成查询.它为查询跨各种数据源和格式的数据提供了一致的模型,所以叫集成查询.由于这种查询并没有制造新的语言而只是在现有的语言基础上来实现,所以叫语言集成查询. 一些基础 在 C# 中,从功能上 LINQ 可分为两类:LINQ to Object 和 L…
字符串操作在任意编程语言的日常编程中都随处可见,今天来汇总一下 C# 中关于字符串的一些你可能遗忘或遗漏的知识点. 逐字字符串 在普通字符串中,反斜杠字符是转义字符.而在逐字字符串(Verbatim Strings)中,字符将被编程器按照原义进行解释.使用逐字字符串只需在字符串前面加上 @ 符号. // 逐字字符串:转义符var filename = @"c:\temp\newfile.txt";Console.WriteLine(filenaame); // 逐字字符串:多行文本va…
阅读本文大概需要 1.5 分钟. 数组本身相对来说比较简单,能想到的可写的东西不多.但还是有一些知识点值得总结和知晓一  下.有的知识点,知不知道不重要,工作中用的时候搜索一下就可以了,毕竟实现一个功能代码的写法有很多种,再牛的人也不可能完全熟悉一门语言的每个细节.当然了,偶然地知道了一些小知识或小技巧也是一种小小的收获.在你看这篇小文时,或许这种偶然的事情就正在发生.我们先从数组的初始化开始吧. 数组的定义和初始化 定义和初始化一个数组有好几种方式,随着 C# 版本升级,方式也越来越简单: i…
阅读本文大概需要 1.2 分钟. 随着 C# 的升级,C# 在语法上对对象的初始化做了不少简化,来看看有没有你不知道的. 数组的初始化 在上一篇罗列数组的小知识的时候,其中也提到了数组的初始化,这时直接引用过来. int[] arr = new int[3] {1, 2, 3}; // 正儿八经的初始化int[] arr = new [] {1, 2, 3}; // 简化掉了 int 和数组容量声明int[] arr = {1, 2, 3}; // 终极简化 字典的两种初始化方式 第二种是 C#…
数据标注(Data Annotation)是类或类成员添加上下文信息的一种方式,在 C# 通常用特性(Attribute)类来描述.它的用途主要可以分为下面这三类: 验证 Validation:向数据添加验证规则 显示 Display:指定数据如何呈现给用户 模型 Modelling:添加关于用法和与其它类的关系信息 下面是一个用来验证和展现用户信息的一个 Model: class Kid { [Range(0, 18)] // 年龄不能超过18岁,不能为负数 public int Age {…
要理解 C# 中的 volatile 关键字,就要先知道编译器背后的一个基本优化原理.比如对于下面这段代码: public class Example { public int x; public void DoWork() { x = 5; var y = x + 10; Debug.WriteLine("x = " +x + ", y = " +y); } } 在 Release 模式下,编译器读取 x = 5 后紧接着读取 y = x + 10,在单线程思维模…
线程的知识太多,知识点有深有浅,往深的研究会涉及操作系统.CUP.内存,往浅了说就是一些语法.没有一定的知识积累,很难把线程的知识写得全面,当然我也没有这个能力.所以想到一个点写一个点,尽量总结一些有用的知识点.线程是个大话题,这个系列可能会有好几遍关于线程的,先从基础的开始,热热身. 一些基础概念 线程(Thread)是操作系统能够进行运算调度的最小单位.它是进程中的实际运作单位,一个进程中可以并发多个线程,每条线程并行执行不同的任务.严格意义上来说,同一时间可以并发运行的线程数取决于 CPU…
多线程编程时,如果涉及同时读写共享数据,就要格外小心.如果共享数据是独占资源,则要对共享数据的读写进行排它访问,最简单的方式就是加锁.锁也不能随便用,否则可能会造成死锁和活锁.本文将通过示例详细讲解死锁和活锁是如何发生的​,以及如何避免它们.​ 避免多线程同时读写共享数据 在实际开发中,难免会遇到多线程读写共享数据的需求.比如在某个业务处理时,先获取共享数据(比如是一个计数),再利用共享数据进行某些计算和业务处理,最后把共享数据修改为一个新的值.由于是多个线程同时操作,某个线程取得共享数据后,紧…
最近工作中遇到一个这样的需求:在某个列表查询功能中,可以选择某个数字列(如商品单价.当天销售额.当月销售额等),再选择 小于或等于 和 大于或等于 ,再填写一个待比较的数值,对数据进行查询过滤. 如果只有一两个这样的数字列,那么使用 Entity Framework Core 可以这么写 LINQ 查询: public Task<List<Product>> GetProductsAsync(string propertyToFilter, MathOperator mathOpe…
在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据.在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为联合或者联合体.而在 C# 中并没有共用体这样一个定义,本文将介绍如何使用 C# 实现 C 语言中的共用体. 理解 C 语言的共用体 在 C 语言中,共用体是一种特殊的数据类型,允许你使用相同的一段内存空间存储不同的成员数据.光看定义有点抽象,我们来看一个 C 语言的共用体示例: #include…
阅读本文大概需要 2 分钟. 记得在 MS Build 2020 大会上,C# 语言开发项目经理 Mads Torgersen 宣称 C# 9.0 将会随着 .NET 5 在今年 11 月份正式发布.目前 .NET 5 已经到了 Preview 5 阶段了,C# 9.0 也已经初具规模.忍不住激动的心情,暂停更新<C#.NET 拾遗补漏>系列几天,先要和大家分享一下我了解到的 C# 9.0 的新特性.由于新特性比较多,所以会分成几篇来讲.这是第一篇,专讲模式匹配这个特性的简化. 模式匹配(Pa…
一:背景 1. 讲故事 昨天在园里的编辑头条看到 精致码农大佬 写的一篇题为:[C#.NET 拾遗补漏]10:理解 volatile 关键字 (https://www.cnblogs.com/willick/p/13889006.html) 的文章,大概就是说在 多线程环境下,一个在debug不出现,在release中出现的bug,原文代码如下: public class Worker { private bool _shouldStop; public void DoWork() { bool…
这节讲一下接口IEnumerable. 01 什么是Enumerable 在一些返回集合数据的接口中,我们经常能看到IEnumerable接口的身影.那什么是Enumerable呢?首先它跟C#中的enum关键字所表达的意思是不同的, 从翻译上来看:可枚举的,展开来说就是它的数据是一枚一枚可以让我们列举出来.就像人们排队去打疫苗,排队的人就是可枚举的,他们有的开车,有走着,有早有晚全都按照先来后到的顺序排好队,当医生开始进行打疫苗的工作时,他并不关心有多少人在排队,也不关心是否有人迟到,当然也不…
<Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技能 1. 进程与线程 区别? 联系? 这篇博客记录了 https://www.cnblogs.com/ergwang/p/15997503.html 2. 创建多线程的方式,有几种?怎么创建 继承Thread类 (一般不单独用) 实现Runnable接口 + Thread对象 实现Callable接口+Fut…
遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化c,serialVersionUID 这个的值到底是在怎么设置的,有什么用.有的是1L,有的是一长串数字,迷惑ing.我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题. 在处理这个问题之前,你要先知道一个问题,这个比较重要.这个Serializable接口,以及相关的东西,全部都在…
本章主要知识点: 1)线程组的使用 2)如何切换线程状态 3)SimpleDateFormat类与多线程的解决方法 4)如何处理线程异常. 这本书基本来到了终点,其实在第四章来说,核心(基础)的线程知识就已经结束了. 剩下的是一些关于线程方面的应用与场景:比如定时器以及多线程中的单例问题. 而这一章要面对的是一些其他的问题. 7.1线程的状态 线程对象在不同的运行时期有不同的状态,状态信息就存在于State枚举类中. 这一节,主要是结合前面学过的内容,将这个图看懂. 7.2线程组 7.2.1线程…
在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_view); myview = ViewUtils.find(this, R.id.myview); getViewSize("onCr…
Service的运行不依赖界面,即使程序被切换到后台,Service仍然能够保持正常运行.当某个应用程序进程被杀掉时,所有依赖于该进程的Service也会停止运行. Service 分为启动状态和绑定状态.当处于仅启动状态时,通过 stopService或 stopSelf 即可停止 Service.当处于绑定状态时需要通过 unBindService 和 stopService 结合使用才能完全停止 Service. 一.Service的生命周期(onCreate()-onStartComma…
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358523冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上就要开始轰炸了,在这关键的节骨眼上,要做到查缺补漏,夯实基础,特此总结~ 友情链接: Java基础拾遗(一) Java基础拾遗(二) Java集合相关知识 HashMap和Hashtable的区别 HashMap没有考虑同步,是线程不安全的:Hashtable使用了synchronized关键字,是…
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76358391冷血之心的博客) 马上就要秋招了,新的一轮笔试面试马上就要开始轰炸了,在这关键的节骨眼上,要做到查缺补漏,夯实基础,特此总结~ 友情链接: Java基础拾遗(一) Java基础拾遗(二) Java基础概念 Java和C++的区别: 都是面向对象的语言,都支持封装.继承和多态 指针: Java不提供指针来直接访问内存,程序更加安全 继承: Java的类是…
拾遗 Q:unix编程怎么查一个函数在哪个头文件中 A: 可以用诸如 man 3 printf Q: man后面接个数字什么意思,如man 3 printf A:如下 man man中的引用 下表显示了手册的 章节 号及其包含的手册页类型. 1 可执行程序或 shell 命令 2 系统调用(内核提供的函数) 3 库调用(程序库中的函数) 4 特殊文件(通常位于 /dev) 5 文件格式和规范,如 /etc/passwd 6 游戏 7 杂项(包括宏包和规范,如 man(7),groff(7)) 8…
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4> 注意语句后面的冒号:.像经典的C.Java都是以花括号来区分代码块,但是Python没有使用花括号表示,而是缩进,所以一定需要了解它们的语法区别. 示例: age = 3…
Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成功,可以达到如下效果: elasticsearch节点组成集群,对外来看俨如一台机器 elasticsearch节点的内存得到优化调整 一. elasticsearch.yml配置 network.host: "172.16.0.4" #这里可以是内网ip.机器名 bootstrap.ml…
在网上找了很多方法都失败了,原因是大多数方法都是用mbr方式安装的,如grub4dos,easybcd.以至于连自己都怀疑win8能不能用硬盘安装,差点就去买个u盘来安装了,就在打算放弃的时候在ubuntu论坛里看到了一个置顶的帖子,对win8硬盘安装讲的很详细,终于按照他的方法把ubuntu装上去了,现在讲讲自己安装中遇到的坑. 参考:http://forum.ubuntu.org.cn/viewtopic.php?f=77&t=467746 在Win8基础上加装Ubuntu,得先搞清楚Win…
使用win10远程控制ubuntu16.04,网上很多需要安装xfce桌面的.今天介绍一下,不需要安装其他桌面,使用Ubuntu16.04自带桌面,漂亮美观. Ubuntu16.04端: 1.打开终端,安装xrdp,vncserver sudo apt-get install xrdp vnc4server xbase-clients 2.安装desktop sharing(Ubuntu16.04默认已经安装),可以到应用商店下载.打开desktop sharing,设置如下: 3.安装安装dc…
在网上查了下,起初是下载了一个node-v0.12.7-linux-x64.tar.gz,解压在/home/node路径下,然后在/etc/profile中添加如下命令: export NODE_HOME=/home/node/node-v0.12.7-linux-x64export PATH=$PATH:$NODE_HOME/binexport NODE_PATH=$NODE_HOME/lib/node_modules 配置环境变量,然后执行 source /etc/profile 让prof…