响应式网站一般做多大/线上销售培训机构
目录
本文分两篇,基础篇点击:C#基础与进阶扩展合集-基础篇
一、进阶
1、Predicate
2、设置C#语言版本
3、ListCollectionView过滤集合
4、值类型与引用类型
5、程序设置当前项目工作目录
6、获取App.config配置文件中的值
7、Linq常用语句
8、并行LINQ
9、强引用与弱引用
10、using处理非托管资源
11、模块初始化器
12、序列化
13、并行编程
14、单元测试
二、进阶扩展
1、Adapt适配器
2、Mutex互斥及防止App多开
3、Monitor设置等待资源时间
4、扩展方法实现解构
5、Span实现切片
6、数组池减少GC工作
7、深度解析await关键字
8、Task
9、ValueTask
10、async异步编程
11、CancellationTokenSource
12、异步方法的异常处理
三、版本新增
1、范围运算符
2、字符串格式控制
3、数字分隔符
4、小数点前后保留格式
本文分两篇,基础篇点击:C#基础与进阶扩展合集-基础篇
一、进阶
1、Predicate
拥有一个或多个泛型参数并返回一个 bool 值,常用于对 collection 进行一组条件检索,类似于Func。
举例:Predicate pre=m=>m.Id==2;
2、设置C#语言版本
工程文件 x.csproj中修改
PropertyGroup节点内添加子节点:
<LangVersion>latest</LangVersion>
3、ListCollectionView过滤集合
使用ListCollectionView类构造函数注入列表
通过该类的 Filter属性过滤集合
List<Animal> animals = new List<Animal>() { new Animal(1,"ani1"),new Animal(2,"动物2") };List<Bear> bears = new List<Bear>();var tmp = animals.Adapt<List<Bear>>();tmp.ForEach(m => m.Description = "Animal adapt bear...");ListCollectionView view=new ListCollectionView(tmp);view.Filter = i => ((Bear)i).ID == 2;foreach (var animal in view)MessageBox.Show(((Bear)animal).Name);
4、值类型与引用类型
值类型:变量直接保存其数据,作为类的字段(成员变量)时,跟随其所属的实例存储,也就是存储在堆中;作为方法中的局部变量时,存储在栈上;
引用类型:变量保存其数据的引用(地址)分配在栈中,具体数据(实例)部署在托管堆中;
值类型:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型
引用类型:数组,用户定义的类、接口、委托,object,字符串
引用类型string:
string a = "A";string b = a;Console.WriteLine($"a:{a}\tb:{b}");a= "B";Console.WriteLine($"a:{a}\tb:{b}");
string为引用类型,上面示例看出string像值类型:
实际上,是由于运算符的重构所导致的结果。当a被重新赋值时,.NET为a在托管堆上重新分配了一块内存。这样做的目的是,使字符串类型与通俗意义上讲的字符串更接地气。
引用类型数组:
数组元素为值类型时,在托管堆中一次性分配全部值类型空间(堆中栈),并自动初始化;
元素为 引用类型时,先在托管堆分配一次空间,此时不会自动初始化任何元素(均为null)。等到有代码初始化某个元素的时,这个引用类型元素的存储空间才会被分配在托管堆上;
5、程序设置当前项目工作目录
Directory.SetCurrentDirectory(Path.GetDirectoryName(typeof(Test).Assembly.Location));
Environment.CurrentDirectory=Path.Combine(Directory.GetCurrentDirectory(),"..");
6、获取App.config配置文件中的值
1、获取appSettings节点值:
ConfigurationManager.AppSettings[key];
2、获取connectionStrings节点值:
var list= ConfigurationManager.ConnectionStrings;
string str="";
foreach (ConnectionStringSettings item in list)
{
if(item.Name=="ConTest")
str = item.ConnectionString;
}
7、Linq常用语句
定义LINQ扩展方法的一个类是System.Linq名称空间中的Enumerable;
Linq常用语句,详细讲解点击:C#-关于LINQ
select:以指定形式返回
Where查询特点条件(方式1:from in;方式2:Lambda表达式)
Order排序:1、descending 降序;2、ascending 升序
OfType查询特定类型
Join合并两集合通过指定键,返回指定结构类型集合
GroupJoin:俩集合通过指定键分组
Reverse反转集合元素顺序
GroupBy按指定键对自身分组
Any / All 判断是否(任意一个/全部)满足条件
Skip跳过指定数量元素
Take拿取指定数量元素
Count获取元素个数
Sum、Average、Max、Min获取集合总值、平均值、最大值、最小值
Concat连接集合
Distinct去重(去重类中某个字段需实现IEqualityComparer接口)
ElementAt获取指定索引元素(与[ ]类似)
First/Single、Last:获取集合中第一个、最后一个元素(如果集合中包含多个元素,使用Single会报错);
ToDictionary:将集合转换为字典;
ToList: 将集合转换为List;
SequenceEqual:判断两个集合是否相等;
8、并行LINQ
System.Linq名称空间中包含的类ParallelEnumerable可将查询的工作拆分到多个处理器上同时运行的多个线程中;
通常可使用AsParallel()方法让集合类以并行方式查询,该方法扩展了IEnumerable<TSource>接口,返回ParallelQuery<TSource>类;
示例如下,示例中并行LINQ所用时间约90ms,普通LINQ所用时间约为420ms,可以看出并行LINQ加快了代码运行速度
var list=Enumerable.Range(0, 5000_0000).Select(x => Random.Shared.Next(100)).ToList();
Stopwatch sw = Stopwatch.StartNew();
var avera= list.AsParallel().Where(m=>m<50).Select(m=>m).Average();
sw.Stop();
Stopwatch sw2 = Stopwatch.StartNew();
var avera2= list.Where(m => m < 50).Select(m => m).Average();
sw2.Stop();
Console.WriteLine(sw.Elapsed.TotalMilliseconds);//约90ms
Console.WriteLine(sw2.Elapsed.TotalMilliseconds);//约420ms
9、强引用与弱引用
1、在应用程序中实例化一个类或结构时,只要有代码引用它,就会形成强引用;
2、GC不能收集仍在引用的对象的内存,也就是强引用的内存,但它可以收集不在根表中直接或间接引用的托管内存;
3、弱引用允许创建和使用对象,但如果垃圾收集器碰巧运行,就会收集对象并释放内存,弱引用开销比小对象大,用于小对象没有意义;
4、弱引用使用WeakReference类创建的,使用构造函数传递强引用,其Target属性的值若不为null,则该对象仍可使用,若赋值给传递类型对象,则会再次创建该对象的强引用,不能被GC收集(注意:在访问Target时可能被GC收集,所以通常赋值后需对其进行null判断);
WeakReference weakReference = new WeakReference(new Pig());Pig pig = weakReference.Target as Pig;if (pig != null){//use pig}else{ //reference not available}
10、using处理非托管资源
方式一:声明一个析构函数(或终结器finalizer)作为类的成员;
C#中,析构函数在底层.NET体系结构中为终结器,编译器会隐式的把析构函数编译成等价于重写Finalize()方法的代码,如下:
protected override void Finalize(){try {//Finalizer implementation}finally {base.Finalize();}}
方式二:实现IDisposable或IAsyncDisposable接口;
C#中,推荐使用该方式替代析构函数,这些接口定义了一种模具(具有语言级的支持),该模式为释放非托管的资源提供了确定的机制,并避免产生析构函数固有的与GC相关的问题;
注意:若处理过程中出现异常则不会释放,通常在finally块中释放,如下:
People people = null;
try
{people = new();//other process
}
finally
{people.Dispose();
}
class People : IDisposable
{public void Dispose(){//implementation}
}
方式三:using语句和using声明(推荐),实现了对方式二的封装;
用于实现IDisposable接口的对象,当对象的引用超出作用域时,自动调用该对象的Dispose()或DisposeAsync()方法,如下示例,会生成与上面try块等价的IL代码;
using (People people = new())
{ //other process
}
11、模块初始化器
若需要在使用一个库的任何类型之前调用该库的初始化代码,可使用C#的一个新特性,模块初始化器[ModuleInitializer];
在使用该类的任何类型之前,会自动调用该特性标记的初始化方法,该方法必须是静态、无参,返回void,使用public或internal访问修饰符;
[ModuleInitializer]public static void Initializer(){Console.WriteLine("*******Module Initializer********");}
12、序列化
序列化相关详解:C#-序列化与反序列化(xml、json)
13、并行编程
关于并行编程详解:C#-关于并行编程
14、单元测试
运用NUnit单元测试框架:C#-单元测试NUnit框架的安装及使用
二、进阶扩展
1、Adapt适配器
安装NutGet包:Mapster
可理解成转换器,适配器适配的是不同类间相同的名称,不论字段或属性(必须为值类型或字符串类型),只要名字相同,都适配给目的对象;
注意:即使名称相同,属性或字段也不能适配成方法
Animal animal = new Animal(18);Bear bear = animal.Adapt<Bear>();Console.WriteLine(bear.Age.ToString());Console.WriteLine(bear.Description.ToString());Console.WriteLine("************************");Bear bear1=new Bear();Console.WriteLine(bear1.Age.ToString());Console.WriteLine(bear1.Description.ToString());Console.WriteLine("*************************");Banana banana = animal.Adapt(new Banana());Console.WriteLine(banana.Description);
2、Mutex互斥及防止App多开
1、继承自WaitHandle类:抽象基类,用于等待一个信号的设置(有静态方法WaitOne()、WaitAll()、WaitAny());
2、Mutex互斥锁可定义互斥名称,所以可用于跨进程的同步操作(因为操作系统可识别有名称的互斥,在不同进程间共享);
3、Mutex构造函数中,可指定互斥是否最初应由主调线程拥有、定义互斥名称、获取互斥是否已存在的信息;
用法1:跨进程互斥实现进程间同步(未命名互斥只能用于跨线程)
Mutex mutext = new Mutex(false,"MyConsole");
mutext.WaitOne();
Console.WriteLine($"{Process.GetCurrentProcess().ProcessName}:\tStart......");
Console.ReadLine();
mutext.ReleaseMutex();
Console.WriteLine($"{Process.GetCurrentProcess().ProcessName}:\tEnd.......");
用法2:防止App重复开启
Mutex mutext = new Mutex(false,"MyConsole",out bool createNew);
if (!createNew)return;
3、Monitor设置等待资源时间
lock关键字是由Monitor类实现(抛出异常也会解锁)如下:
Monitor.Enter(_obj);try{Count--;}finally { Monitor.Exit(_obj); }
Monitor相对于lock的优点在于,使用Monitor的TryEnter()方法,其中可传递一个超时值,用于指定等待被锁定的最长时间,若_obj被锁定,TryEnter()方法将布尔型的引用参数设置为true,并同步的访问_obj锁定状态,若另一个线程锁定_obj时间超过指定时间,TryEnter()将bool引用参数置为false,线程将不再等待,而是去执行其它操作,如下:
Monitor.TryEnter(_obj, 2000, ref _lockTaken);if (_lockTaken){try{Console.WriteLine(Thread.CurrentThread.Name + ":\t obj lock.....");Thread.Sleep(5000);Console.WriteLine(Thread.CurrentThread.Name + ":\t obj release.....");}finally{Monitor.Exit(_obj);}}elseConsole.WriteLine("Timeout,Run other.....");
4、扩展方法实现解构
了解扩展方法点击:扩展方法定义与使用
创建Deconstruct()方法(也称解构器),将分离部分放入out参数中,这里使用扩展方法实现解构,示例如下:
Stu stu = new Stu(98, "Auston");
stu.Deconstruct(out int score, out string name);
Console.WriteLine($"{name}:{score}");static class StuExtension
{public static void Deconstruct(this Stu stu, out int score, out string name){score = stu.Score;name = stu.Name;}
}
5、Span<T>实现切片
1、Span<T>,可快速访问托管与非托管的连续内存,如数组、长字符串;
2、可实现对数组部分进行访问或切片,不会复制数组元素,是从span中直接访问的,切片的两种方式①构造函数传递数组的开头与结尾;②Slice方法传递开头索引,提取到数组末尾;
3、可使用Span改变值,除了索引访问更改,还提供方法有:Clear()、填充Fill()、复制CopyTo()(不推荐,目标span不够大会抛异常)、复制推荐TryCopyTo()(span不够大不抛异常,而是返回false);
4、若只需对数组片段进行读访问,可使用ReadOnlySpan<T>;
int[] c = { 1, 3, 5, 8 };
Span<int> span = new Span<int>(c);
Span<int> span1= new Span<int>();
span[1] = 11;
span.Clear();
span.Fill(11);
Span<int> span2 = new Span<int>(c,0,3);
Span<int> span3 = span.Slice(0,3); //切片
ReadOnlySpan<int> span4 = new(c); //只读变量
if (!span.TryCopyTo(span3))Console.WriteLine("Argument");
6、数组池减少GC工作
通过ArrayPool类(名称空间System.Buffers)使用数组池,可减少垃圾收集器的工作,ArrayPool管理一个数组池,数组可以从这租借,并返回池中,内存在ArrayPool中管理。
创建ArrayPool<T>,调用静态Create()方法;
使用预定义共享池,通过访问Shared属性;
从池中租用内存,可调用Rent()方法,(池中数组元素数量最低16,且都是成倍增加);
内存(数组)返回到池中,调用Return()方法,可指定返回池之前是否清除该数组(false,下次租用数组的人可读取数据);
ArrayPool<int> arrayPool = ArrayPool<int>.Create(maxArrayLength: 100, maxArraysPerBucket: 10);
int[] arr = ArrayPool<int>.Shared.Rent(10);
arr[15] = 15;
Console.WriteLine($"Len={arr.Length}\tarr[15]={arr[15]}");//输出Len=16 arr[15]=15
ArrayPool<int>.Shared.Return(arr,true);
Console.WriteLine(arr[15]);//输出0
7、深度解析await关键字
await通常与async一同使用来实现异步编程,async没有await搭配使用将毫无意义;
使用Task任务的GetAwaiter()方法,返回一个TaskAwaiter<T>类型对象,该对象的OnCompleted()方法实现了INotifyCompletion接口,在任务完成时调用;
await实际就是编译器把await关键字后的所有代码放进了OnCompleted()方法的代码块中。
public static void Main(string[] args){TestAsync();Console.ReadLine();}public static async void TestAsync(){var awaiter = MyAsync().GetAwaiter();awaiter.OnCompleted(() =>{Console.WriteLine($"MyAsync ended....");});//await MyAsync();//Console.WriteLine("MyAsync ended.....");}public static async Task<string> MyAsync(){Thread.Sleep(100);Console.WriteLine(nameof(MyAsync));return nameof(MyAsync);}
8、Task
GetAwaiter()方法,用于await关键字的实现,详细如上;
ContinueWith()方法,用于延续任务;
RunSynchronously()方法,同步任务;
WaitAll()静态方法,阻塞调用任务,直到所有任务完成;
WhenAll()静态方法,返回一个任务,从而允许使用async关键字等待结果,因此不会阻塞等待的任务;
WhenAny()静态方法,用于等待任意一个任务结束;
注意:任务不一定使用线程池中的线程,也可以使用其他线程,调用RunSynchronously()任务以同步方式运行,以相同的线程作为主调线程,如示例中的 t4;
开始一个新任务方式有如下几种:
TaskMethod();Task t1 = Task.Run(TaskMethod);Thread.Sleep(100);Task t2 = Task.Factory.StartNew(TaskMethod);Thread.Sleep(100);Task t3 = new TaskFactory().StartNew(TaskMethod);Thread.Sleep(100);Task t4 = new(TaskMethod);//t4.Start();t4.RunSynchronously();static void TaskMethod(){Console.WriteLine($"Task ID:{Task.CurrentId?.ToString() ?? "no task"}");Console.WriteLine($"thread ID:{Thread.CurrentThread.ManagedThreadId}");Console.WriteLine($"Is background:{Thread.CurrentThread.IsBackground}");Console.WriteLine($"Is pool thread:{Thread.CurrentThread.IsThreadPoolThread}");Console.WriteLine("*****************Auston****************");}
使用泛型类Task<TResult>获取Task结果,示例如下
Task<(int result1, int result2)> t4 = new (TaskWithResult,(2,5));t4.Start();Console.WriteLine(t4.Result.Item1+$"\t{t4.Result.Item2}");static (int, int) TaskWithResult(object obj){(int a, int b) = ((int a, int b))obj;return (a * 10, b * 100);}
9、ValueTask
C#7新增可用作await的新类型,ValueTask是一个结构,其在堆上没有对象,相对于Task具有性能上的优势(当不能忽略任务开销的时候可使用);
10、async异步编程
async、await异步编程详解:C#-异步编程
11、CancellationTokenSource
CancellationTokenSource控制Task详解:C#-控制Task结束
12、异步方法的异常处理
若调用异步方法没有等待,try/catch不会捕获异常,因为在抛出异常前,就已经执行完毕了,若要捕获异常,需await等待异步方法。
static void PutError(){try{await ThrowExcp();}catch (Exception ex){Console.WriteLine(ex.ToString());}}static async Task ThrowExcp(){ await Task.Delay(1000);throw new Exception("Exception.....");}
三、版本新增
C#9新增顶级语句;
字符串的范围除SubString方法,C#8新增hat(^)、范围运算符([..]);
1、范围运算符
string rangstr ="hello,auston!" ;
Console.WriteLine(rangstr[..5]);//范围运算符
Console.WriteLine(rangstr[7^2]);//hat^运算符,从索引7往前数第2个字符
2、字符串格式控制
DateTime t = DateTime.Now;
Console.WriteLine($"{t:D}");//字符串格式控制
3、数字分隔符
int a = 2_2_2;//使用数字分隔符,提高代码可读性(编译器会忽略下划线)
Console.WriteLine($"{a:c}");
4、小数点前后保留格式
double d = 22.336_6;
Console.WriteLine($"{d:###.##}");//小数点后四舍五入保留2位
Console.WriteLine($"{d:000.00}");//小数点前保留3位,后保留2位
相关文章:

C#基础与进阶扩展合集-进阶篇(持续更新)
目录 本文分两篇,基础篇点击:C#基础与进阶扩展合集-基础篇 一、进阶 1、Predicate 2、设置C#语言版本 3、ListCollectionView过滤集合 4、值类型与引用类型 5、程序设置当前项目工作目录 6、获取App.config配置文件中的值 7、Linq常用语句 8、…...

快速入门GitHub 之超简单的注册方法和超好用的使用技巧
最近几天发现有些人对Github网站很好奇,但是无奈自己不会用,因为是外国人的网站,首先自己的英文就不过关。对于这个,其实可以用谷歌浏览器去浏览Github,它有一键翻译的功能。但还是有必要介绍一下关于Github的一些功能和具体操作,初学编程语言的小伙伴们一定对 GitHub 有…...

ESP32-Web-Server编程- 在 Web 上开发动态纪念册
ESP32-Web-Server编程- 在 Web 上开发动态纪念册 概述 Web 有很多有趣的玩法,在打开网页的同时送她一个惊喜。 需求及功能解析 本节演示在 ESP32 上部署一个 Web,当打开对应的网页时,将运行动态的网页内容,显示炫酷的纪念贺词…...

双向ESD保护 汽车级TVS二极管 ESD9B3.3ST5G工作原理、特性参数、封装形式
什么是汽车级TVS二极管? TVS二极管是一种用于保护电子电路的电子元件。它主要用于电路中的过电压保护,防止电压过高而损坏其他部件。TVS二极管通常被称为“汽车级”是因为它们能够满足汽车电子系统的特殊要求。 在汽车电子系统中,由于车辆启…...

Ribbon-IRule 修改负载均衡的规则
1、负载均衡规则描述 (1)整体关系 (2)规则描述 内置负载均衡规则类规则描述RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在默认情况下&…...

双十二电视盒子哪个牌子最好?自费3000+测评整理电视盒子推荐
双十二不知道电视盒子哪个牌子最好的新手很多,想要我分享电视盒子推荐,为结果更客观我花费三千多购入了十几款热销电视盒子,通过一个月时间的全面对比测评后整理了电视盒子推荐,给双十二不知道怎么选电视盒子的朋友们提供参考。 一…...

排序:直接选择排序
直接选择排序: 本质: 直接选择排序的本质就是在数组中进行遍历挑选出最大的元素,讲最大的元素放到对应的位置后,再次选出次大的位置,而后又放到对应的位置..........................直到数组成为一个有序序列。 优…...

Nacos多数据源插件
Nacos从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应多数据源插件.本文档详细介绍一个多数据源插件如何实现以及如何使其生效。 注意:…...

【Java基础篇 | 面向对象】—— 聊聊什么是接口(上篇)
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得,欢迎大家在评论区交流讨论💌 关于接口的简单的介绍…...

golang实现函数yamlToStruct(infile,outFile)
问: golang实现函数yamlToStruct(infile,outFile),将yaml文件格式化成golang的结构体 gpt: 要实现一个将YAML文件格式化成Golang结构体的函数,你可以使用 yaml 和 reflect 包来处理。首先,你需要使用 yaml.Unmarshal 函数将YAML文件解析为一…...

产品成本收集器流程演示
感谢大佬的文章,我只是一个翻译搬运工,原文地址:产品成本收集器 概述 SAP 令人兴奋的部分之一是它在不同操作模块之间的集成程度。使用产品成本收集器来跟踪生产就是一个很好的例子。在本博客中,我计划遵循产品成本收集器流程&a…...

【微服务】springboot整合quartz使用详解
目录 一、前言 二、quartz介绍 2.1 quartz概述 2.2 quartz优缺点 2.3 quartz核心概念 2.3.1 Scheduler 2.3.2 Trigger 2.3.3 Job 2.3.4 JobDetail 2.4 Quartz作业存储类型 2.5 适用场景 三、Cron表达式 3.1 Cron表达式语法 3.2 Cron表达式各元素说明 3.3 Cron表达…...

Electron+Ts+Vue+Vite桌面应用系列:TypeScript常用时间处理工具
文章目录 1️⃣ 时间处理工具1.1 格式化时间1.2 把时间戳改成日期格式1.3 Day.js 工具类使用1.4 date-fns 工具类使用 优质资源分享 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/134712978 ElectronTsVueVite桌面应用…...

记录 | centos源码编译bazel
tensorflow的源码编译依赖于 bazel 这里进行 bazel 的源码编译 1、安装依赖 sudo yum install -y java-11-openjdk sudo yum install -y java-11-openjdk-devel sudo yum install -y protobuf-compiler zip unzip2、知悉要安装的 bazel 的版本 务必安装受支持的 Bazel 版本…...

常见的Bean工厂后置处理器
此代码在jdk11上测试通过,SpringBoot版本为2.7.14 1.上代码 导入坐标 <dependencies><!-- spring数据坐标 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-rest</art…...

代码随想录算法训练营第四十二天| 416 分割等和子集
目录 416 分割等和子集 416 分割等和子集 class Solution { public:const int N 210;bool canPartition(vector<int>& nums) {vector<int>f(N);int sum 0;for(auto num : nums)sum num;if(sum % 2 1)return false;//如果int target sum / 2;for(int i …...

memmove 和 memcpy的区别
函数原型及作用 memcpy 和 memmove 都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: void* memcpy(void *dst, const void *src, size_t count); void* memmove(void *dst, const void *…...

C实现的双向链表队列
如下代码所示,一个头文件实现的双向链表,用c代码实现: #ifndef _LINUX_LIST_H #define _LINUX_LIST_H#include "stddef.h" #include "poison.h"#ifndef ARCH_HAS_PREFETCH #define ARCH_HAS_PREFETCH static inline voi…...

自适应中值滤波器的python代码实现-----冈萨雷斯数字图像处理
基本原理: 自适应中值滤波器是一种图像处理技术,用于去除图像中的噪声。其原理是根据像素周围邻域内像素值的特性,动态地选择滤波器的大小和中值滤波的程度。 **邻域选择:**对于每个像素点,选取一个窗口或者邻域&…...

Python作业答疑_6.22~6.25
一、Python 一班 1. 基数分割列表 1.1 问题描述 给定一无序数列,把数列的第一个数字当成基数,让数列中基数小的数字排在数列前面,比基数大的数字排在数列的后面。 1.2 问题示例 如数列:num[4,1,8,3,9,2,10,7]。基数为 4&…...

Uber Go 语言编码规范
uber-go/guide 的中文翻译 English 文档链接 Uber Go 语言编码规范 Uber 是一家美国硅谷的科技公司,也是 Go 语言的早期 adopter。其开源了很多 golang 项目,诸如被 Gopher 圈熟知的 zap、jaeger 等。2018 年年末 Uber 将内部的 Go 风格规范 开源到 G…...

UniRepLKNet:用于音频、视频、点云、时间序列和图像识别的通用感知大内核ConvNet
摘要 https://arxiv.org/abs/2311.15599 大核卷积神经网络(ConvNets)最近受到了广泛的研究关注,但存在两个未解决的关键问题需要进一步研究。(1)现有大核ConvNets的架构在很大程度上遵循传统ConvNets或Transformers的设计原则,而大核ConvNets的架构设计仍未得到充分解决。(2…...

Http协议与Tomcat
HTTP协议 HTTP协议(HyperText Transfer Protocol)即超文本传输协议 ,是TCP/IC网络体系结构应用层的一个客户端-服务端协议,是所有客户端,服务端数据传输的基石(数据传输规则) 特点 ⭐基于TCP协…...

Spring AOP从入门到精通
目录 1. AOP的演化过程 1. 代理模式 2. 动态代理 2.1 JDK动态代理 2.2 Cglib动态代理 3. Spring模式 3.1 ProxyFactory 3.2 ProxyFactoryBean 3.3 AbstractAutoProxyCreator 2. Spring AOP抽象 1. 核心术语 1.1 连接点(JoinPoint) 1.2 切点(Pointcut) 1.3 增强(Ad…...

Tap虚拟网卡
1 概述 Tap设备通常用于虚拟化场景下,其驱动代码位于drivers/net/tun.c,tap与tun复用大部分代码, 注:drivers/net/tap.c并不是tap设备的代码,而是macvtap和ipvtap; 下文中,我们统一称tap&#…...

【数电笔记】53-与非门构成的基本RS触发器
目录 说明: 1. 电路组成 2. 逻辑功能 3. 特性表 4. 特性方程 5. 状态转换图 6. 驱动表 7. 例题 例1 例2 说明: 笔记配套视频来源:B站;本系列笔记并未记录所有章节,只对个人认为重要章节做了笔记;…...

kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录
kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录 1. k8s环境 k8s使用kubernetes-server-linux-amd64_1.19.10.tar.gz 二进制bin 的方式手动部署 k8s 版本: [rootmaster ~]# kubectl version Client Version: version.Info{Major:"1", Minor:&…...

Hadoop入门学习笔记
视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 这里写目录标题 一、VMware准备Linux虚拟机1.1. VMware安装Linux虚拟机1.1.1. 修改虚拟机子网IP和网关1.1.2. 安装…...

堆栈,BSS,DATA,TEXT
一、目标文件 首先目标文件的构成,Linux下就是.o 文件 编译器编译源码后生成的文件叫目标文件(Object File)。 目标文件和可执行文件一般采用同一种格式,这种存储格式为 ELF。 目前文件的内容至少有编译后的机器指令代码和数据&a…...

Java八股文面试全套真题【含答案】-JSON篇
什么是JSON? 答案:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于JavaScript的对象字面量表示法,用于在不同语言和平台之间传输数据。JSON的数据结构是怎样的? 答案…...