nlog

.Net常用中间件

ⅰ亾dé卋堺 提交于 2020-08-06 13:14:18
什么是中间件 中间件是介于操作系统和应用软件之间,为应用软件提供服务功能的软件,有消息中间件,交易中间件,应用服务器等。由于介于两种软件之间,所以,称为中间件。 简单讲,中间件就是非业务的技术类组件。 使用中间件的好处 具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。 中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。 .Net常见的中间件 Log4Net、NLog(日志记录) Unity、Ninject(IOC容器) EF框架、NHibernate(ORM框架) Quartz.NET(开源的作业调度框架) Socket(通讯)、Redis(缓存) 来源: oschina 链接: https://my.oschina.net/u/4299292/blog/4474147

面试官:手撕十大排序算法,你会几种?

我与影子孤独终老i 提交于 2020-08-06 12:08:06
原文链接: 面试官:手撕十大排序算法,你会几种? 演示地址: 点击查看演示 在前面三期,介绍了动态规划的两个主要特性:交叠子问题和最优子结构,并用七种方式求解第n项斐波那契数,感受了算法的强大,你是否也领略到它的精髓呢? 《深入浅出理解动态规划(一) | 交叠子问题》 《深入浅出理解动态规划(二) | 最优子结构》 《用x种方式求第n项斐波那契数,99%的人只会第一种》 今天我们就来讨论面试官最喜欢问到的排序算法吧,从冒泡排序、选择排序、插入排序等十大排序算法的排序步骤、代码实现两个方面入手,彻底搞清实现原理,保证面试道路一路畅通。 01 排序算法的概述 所谓排序算法,就是通过特定的算法因式将一组或多组数据按照一定模式进行重新排序。 这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率。 02 排序算法的分类 03评价标准 (1)时间复杂度:即从序列的初始状态到经过排序算法的变换移位等操作变到最终排序好的结果状态的过程所花费的时间度量。 (2)空间复杂度:就是从序列的初始状态经过排序移位变换的过程一直到最终的状态所花费的空间开销。 (3)稳定性:稳定性是不管考虑时间和空间必须要考虑的问题,往往也是非常重要的影响选择的因素。 04 实现步骤与代码 冒泡排序(Bubble Sort) 冒泡排序是一种简单直观的排序算法

算法的时间复杂度和空间复杂度

送分小仙女□ 提交于 2020-08-04 22:09:10
算法的时间复杂度和空间复杂度 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 算法的时间复杂度 时间频度 一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的 语句执行次数 称为 语句频度 或 时间频度 。 时间复杂度 一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作 T(n)=O( f(n) ),称O( f(n) ) 为算法的 渐进时间复杂度 ,简称 时间复杂度 。 计算时间复杂度的方法 用常数1代替运行时间中的所有加法常数 修改后的运行次数函数中,只保留最高阶项 去除最高阶项的系数 常见的时间复杂度 常数阶O(1) 无论代码执行了多少行,只要是没有循环等复杂结构,那这个代码的时间复杂度就都是O(1) int i = 1; int j = 2; i++; j++; 上述代码在执行的时候,它消耗的时候并不随着某个变量的增长而增长,那么无论这类代码有多长,即使有几万几十万行,都可以用O(1)来表示它的时间复杂度。 对数阶O(log2n) int i = 1; while(i<n){ i

归并排序与希尔排序介绍(Java语言实现)

断了今生、忘了曾经 提交于 2020-08-04 14:16:52
归并排序与希尔排序介绍 归并排序 归并排序的思想很简单,如果有一组待排序列,先切分再重组。任何一篇教程也都会说采用的是分治法,意思就是这么个意思,再细致一点的理解就是: 将一组待排序,先分割成一个一个的元素,然后将这些元素先两两排序,再四四排序,八八排序,一直到排序完所有的元素。 也就是说归并排序其实就是将 已有序的子序列合并 ,得到完全有序的序列。我们看一张动图来认识一下: 1 动画展示 是不是有点理解了,动态图的作用其实就是为了方便你了解整个归并过程,不理解也没关系,我们再来看一张静态图,帮助你从细节上来理解。 上面的这张图基本上能把整个归并排序的流程了解清楚了。也就是文章开头提到的先切分再重组。下面我们使用代码来实现一下归并排序,并对其做一个改进: 2 代码实现 基本实现的思想很简单,我们就是先切分成一个个元素,然后再合并就好了。 合并数组 //合并方法 private static void merge ( int [ ] arr , int low , int mid , int high , int [ ] temp ) { int i = low ; // 初始化i, 左边有序序列的初始索引 int j = mid + 1 ; //初始化j, 右边有序序列的初始索引 int t = 0 ; // 指向temp数组的当前索引 //先把左右两边(有序

长度最小的子数组(暴力/动态规划)

烂漫一生 提交于 2020-07-29 03:31:42
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。 示例: 输入: s = 7, nums = [2,3,1,2,4,3] 输出: 2 解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。 进阶: 如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-size-subarray-sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 //暴力 public class Main { public static void main(String[] args) { int s = 3; // int s = 7; // int[] nums ={2,3,1,2,4,3}; int[] nums = {1,1}; System.out.println(minSubArrayLen(s, nums) ); } public static int minSubArrayLen(int s, int[] nums) { int ans = 99999; int sum = 0; int

顶级程序员书单系列五:《人月神话》

主宰稳场 提交于 2020-07-29 03:19:27
我的记忆 记得是许久之前读的这本计算机领域的经典图书了,当时就只记住了一点:增加人,并不能解决问题。由于当时的我并没有实际的开发经验,觉得他给出的建议并没有其他顶级程序员书单给的更棒,就仅把他排到15-20名的位置。后来,经技术交流群里的小伙伴的提醒,我决定重读此书。 重读这本书的感受 读完感觉,这本书还是超级厉害的,它不同于其他图书教授的“术”,他已经上升为“道”了。软件开发是熵增的过程,我认为优秀的开发人员就应该是一位优秀的园艺设计师(掌握设计)和认真的修草工(掌握编码),只有这样,应对复杂的软件开发,才可以真正的让软件的生命更长一些,让软件的一生更精彩一些。顶层设计很重要,后期的重构也很重要,软件开发,还有一段很长的路要走啊! 一些笔记 什么是编程 “这,就是编程。一个许多人痛苦挣扎的焦油坑以及一种乐趣和苦恼共存的创造性活动。对于许多人而言,其中的乐趣远大于苦恼。而本书的剩余部分将试图搭建一些桥梁,为通过这样的焦油坑提供一些指导。” 软件开发计划 1/3 计划 1/6 编码 1/4 构件测试和早期系统测试 1/4 系统测试,所有的构件已完成 Brooks 法则 向进度落后的项目中增加人手,只会使进度更加落后。 手册和文档的重要性 技术说明几乎是必不可少的。如果某人就硬件和软件的某部分,去查看一系列相关的用户手册。他发现的不仅仅是思路,而且还有能追溯到最早备忘录的许多文字和章节

[考试反思]0520省选模拟101:目的

十年热恋 提交于 2020-07-28 19:12:21
没得说。怎么这么菜啊。 $T1$的$60$分白送的基本都不用想。 (诶那我这场考试干啥了? $T2$看着像个$min25$筛的板子。就是数据范围大了点 然而因为几乎没怎么遇到过$min25$的题,只写过一次而且还是三个月前了。 所以基本上是忘的一干二净考场上一点一点尝试想的。 结果写的混天黑地终于写完,过掉样例,就交了。 十分快乐的是:少取了个模。直接爆零。然后这场就没了。 就当是练习不熟练的知识点了(自己都不信。。。 我到现在都不知道我这么做的目的是什么。但愿不要再考场弱智了(事实上明天还是这样 T1:石子游戏 大意:$nim$。问去掉最少几堆石子后可以先手必胜。$n \le 5 \times 10^5,A \le 5 \times 10^5$ 要求出最少用多少个堆能得到和所有石子堆一样的异或值。 删掉的石子堆数是$logA$级别。否则线性基可以表出就可以去掉了。 所以暴力做$dp$是$O(n^2)$的。每一轮用$xorFWT$优化可以做到$O(nlog^2n)$。用$FWT$本质求单点点值可以做到$O(nlogn)$ 1 #include<cstdio> 2 #define S 1<<19 3 int a[S],n,t[S],T,ans; 4 void FWT( int *a){ for ( int i= 1 ;i<S;i<<= 1 ) for ( int j= 0 ;j<S

题解 UVA1608 【不无聊的序列 Non-boring sequences】

时光总嘲笑我的痴心妄想 提交于 2020-07-28 13:16:27
思路: 算法很显然: 一、在区间 \([l,r]\) 找到一个只出现一次的元素P(如果不存在,那么序列 \(boring\) ) 二、递归处理区间 \([l,p-1]\) 和区间 \([p+1,r]\) 。 其关键在于如何找到一个只出现一次的元素P。 首先,我们得知道如何判断一个元素是不是只出现一次。 我们可以用 \(STL\) 中的 \(map\) 记录与当前元素值相同的上一个元素 or 下一个元素的位置,然后更新即可。 因为 \(map\) 的所有操作都是 \(O(log_n)\) 的,所以预处理的时间复杂度为 \(O(nlog_n)\) 。 所以,我们就可以用 \(O(1)\) 的时间判断出一个元素是不是只出现一次了。 若从左到右扫描整个序列,那么最坏情况,这个元素在序列的最右边,则 \(Time(n)=Time(n-1)+O(n) \ge Time(n^2)=O(n^2)\) 。 根据二分法(分治)一般是尽量分成两个数量尽量接近的数列,我们可以考虑从两边往中间找。 此时,最坏情况为这个元素在序列的正中间,则 \(Time(n)=2\times Time(n/2)+O(n)\) ,解得 \(Time(n)=O(nlog_n)\) 。 所以算法的总时间复杂度为 \(O(nlog_n)\) 。 #include <bits/stdc++.h> using namespace

[考试反思]0520省选模拟101:目的

走远了吗. 提交于 2020-07-28 11:38:15
没得说。怎么这么菜啊。 $T1$的$60$分白送的基本都不用想。 (诶那我这场考试干啥了? $T2$看着像个$min25$筛的板子。就是数据范围大了点 然而因为几乎没怎么遇到过$min25$的题,只写过一次而且还是三个月前了。 所以基本上是忘的一干二净考场上一点一点尝试想的。 结果写的混天黑地终于写完,过掉样例,就交了。 十分快乐的是:少取了个模。直接爆零。然后这场就没了。 就当是练习不熟练的知识点了(自己都不信。。。 我到现在都不知道我这么做的目的是什么。但愿不要再考场弱智了(事实上明天还是这样 T1:石子游戏 大意:$nim$。问去掉最少几堆石子后可以先手必胜。$n \le 5 \times 10^5,A \le 5 \times 10^5$ 要求出最少用多少个堆能得到和所有石子堆一样的异或值。 删掉的石子堆数是$logA$级别。否则线性基可以表出就可以去掉了。 所以暴力做$dp$是$O(n^2)$的。每一轮用$xorFWT$优化可以做到$O(nlog^2n)$。用$FWT$本质求单点点值可以做到$O(nlogn)$ 1 #include<cstdio> 2 #define S 1<<19 3 int a[S],n,t[S],T,ans; 4 void FWT( int *a){ for ( int i= 1 ;i<S;i<<= 1 ) for ( int j= 0 ;j<S

Net Core NLog.Web “aspnet-user-identity” is empty?

吃可爱长大的小学妹 提交于 2020-06-27 08:16:40
问题 I was using "NLog.Extensions.Logging" for logging and need to log user identity and found that it is possible with "NLog.Web.AspNetCore". "nlog.config" file is configured to log the "aspnet-user-identity". However, when I look at logs, user identity part is always empty string, the other columns are look pretty good. Am I missing something? A part of my configuration file is here: <extensions> <assembly="NLog.Web.AspNetCore" /> </extensions> <parameter name="@identity" layout="${aspnet-user