Entry

源码解读·RT-Thread操作系统从开机到关机

旧时模样 提交于 2020-12-24 05:10:19
\\参加RT-Thread线上活动,请移步文末 本篇内容比较简单,但却很繁琐,篇幅也很长,毕竟是囊括了整个操作系统的生命周期。这篇文章的 目的是作为后续设计多任务开发的铺垫 ,后续会单独再抽出一篇分析任务的相关知识。另外本篇文章以单核MCU为背景,并且以最新的 3.1.xLTS 版本源码进行分析。主要内容目录如下 : 基于bsp/stm32/stm32f103-mini-system为背景 Cortex-M3的堆栈基础概念 C语言main函数和rt-thread的main rt-thread操作系统的传统初始化与自动初始化组件 任务是怎样运行起来的 Idle任务与新的构想 基于bsp/stm32/stm32f103-mini-system的开机介绍 关于体系结构的知识这里不做过多的介绍,因为这些知识要讲清楚的话足以写出一本大部头的书出来。不过会简单介绍一些必要的东西。 Stm32f103单片机是cortex-m3内核,在cortex-m3内核中使用双堆栈psp和msp,模式分为线程模式和handler模式,权限级别分为非特权级别和特权级别(现在只需要知道这么多就行了),handler模式就是当处理发生中断的时候自动进入的模式,其handler模式永远为特权级。 上电开机最开始运行的是MCU内部的ROM部分,这部分代表我们通常看不到,其通常是对芯片进行必要的初始化

用LindedHashMap实现LRU算法

时光怂恿深爱的人放手 提交于 2020-12-23 18:49:22
  LRU,最近最少使用。如果我们用一个数据结构来实现LRU的话,那么需要满足两个条件,第一个该数据结构需要存储最近使用或未使用的,第二个,需要限制这个数据结构的大小。   我们用LindedHashMap实现LRU,第一需要设置accessOrder,在默认情况下,accessOrder是为false,表示顺序为插入顺序。为true时,表示会根据访问顺序排序(在get时),最新使用的排在尾巴上。初始化设置accessOrder的源码如下: /** * Constructs an empty <tt>LinkedHashMap</tt> instance with the * specified initial capacity, load factor and ordering mode. * * @param initialCapacity the initial capacity * @param loadFactor the load factor * @param accessOrder the ordering mode - <tt>true</tt> for * access-order, <tt>false</tt> for insertion-order * @throws IllegalArgumentException if the initial

阿里面试题:说说HashMap的扩容过程?

被刻印的时光 ゝ 提交于 2020-12-23 18:44:44
  这是一道阿里的面试题,考察你对HashMap源码的了解情况,废话不多说,咱们就直接上源码吧! jdk 1.7 源码 void resize( int newCapacity) { Entry[] oldTable = table; // 保存旧数组 int oldCapacity = oldTable.length; if (oldCapacity == MAXIMUM_CAPACITY) { // 判断当前数组大小是否达到最大值 threshold = Integer.MAX_VALUE; return ; } Entry[] newTable = new Entry[newCapacity]; // 创建一个新数组 boolean oldAltHashing = useAltHashing; useAltHashing |= sun.misc.VM.isBooted() && (newCapacity >= Holder.ALTERNATIVE_HASHING_THRESHOLD); boolean rehash = oldAltHashing ^ useAltHashing; // 是否需要重新计算hash值 transfer(newTable, rehash); // 将oldTable的元素迁移到newTable table = newTable; //

什么情况用ArrayList or LinkedList呢?

喜你入骨 提交于 2020-12-23 04:15:40
阅读本文大概需要 7 分钟。 来自:网络 ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口。先对List做一个简单的了解: 列表(list)是元素的有序集合,也称为序列。它提供了基于元素位置的操作,有助于快速访问、添加和删除列表中特定索引位置的元素。List 接口实现了 Collection 和 Iterable 作为父接口。它允许存储重复值和空值,支持通过索引访问元素。 读完这篇文章要搞清楚的问题: ArrayList和LinkedList有什么不同之处?什么时候应该用ArrayList什么时候又该用LinkedList呢? 下面以增加和删除元素为例比较ArrayList和LinkedList的不同之处 增加元素到列表尾端: 在ArrayList中增加元素到队列尾端的代码如下: public boolean add (E e) { ensureCapacity(size+ 1 ); //确保内部数组有足够的空间 elementData[size++]=e; //将元素加入到数组的末尾,完成添加 return true ; } ArrayList中add()方法的性能决定于ensureCapacity()方法。ensureCapacity()的实现如下:

什么情况用ArrayList or LinkedList呢?

丶灬走出姿态 提交于 2020-12-22 06:17:01
ArrayList 和 LinkedList 是 Java 集合框架中用来存储对象引用列表的两个类。ArrayList 和 LinkedList 都实现 List 接口。先对List做一个简单的了解: 列表(list)是元素的有序集合,也称为序列。它提供了基于元素位置的操作,有助于快速访问、添加和删除列表中特定索引位置的元素。List 接口实现了 Collection 和 Iterable 作为父接口。它允许存储重复值和空值,支持通过索引访问元素。 读完这篇文章要搞清楚的问题: ArrayList和LinkedList有什么不同之处?什么时候应该用ArrayList什么时候又该用LinkedList呢? 下面以增加和删除元素为例比较ArrayList和LinkedList的不同之处 增加元素到列表尾端: 在ArrayList中增加元素到队列尾端的代码如下: public boolean add(E e){ ensureCapacity(size +1); // 确保内部数组有足够的空间 elementData[size++]=e; // 将元素加入到数组的末尾,完成添加 return true ; } ArrayList中add()方法的性能决定于ensureCapacity()方法。ensureCapacity()的实现如下: public vod ensureCapacity(

聊聊golang的zap的level

纵然是瞬间 提交于 2020-12-22 00:15:08
序 本文主要研究一下golang的zap的level Level zap@v1.16.0 /zapcore/level.go // A Level is a logging priority. Higher levels are more important. type Level int8 const ( // DebugLevel logs are typically voluminous, and are usually disabled in // production. DebugLevel Level = iota - 1 // InfoLevel is the default logging priority. InfoLevel // WarnLevel logs are more important than Info, but don't need individual // human review. WarnLevel // ErrorLevel logs are high-priority. If an application is running smoothly, // it shouldn't generate any error-level logs. ErrorLevel // DPanicLevel logs are particularly

SpringCloud-Sentinel

半世苍凉 提交于 2020-12-21 17:57:53
TODO: 线程池线程异常,处理??? Add Dependency <!-- replace here with the latest version --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.0</version> </dependency> Define Resource // > - 2. Define Resource try (Entry entry = SphU.entry("HelloWorld")) { // Your business logic here. System.out.println("hello world"); } catch (BlockException e) { // Handle rejected request. e.printStackTrace(); } // try-with-resources auto exit Define Resource List<FlowRule> rules = new ArrayList<>(); FlowRule rule = new FlowRule(); rule.setResource("HelloWorld"); // set

LRU

随声附和 提交于 2020-12-20 23:06:51
一、LRU Least Recently Used,即最近最少使用,当一个数据最近一段时间没有被访问,未来被访问的概率也很小。当空间被占满后,最先淘汰最近最少使用的数据。 二、LinkedHashMap HashMap的存取是无序的,当我们希望其有序时,就可以使用LinkedHashMap。当LinkedHashMap的构造函数的accessOrder参数为false时,按插入顺序存取;当accessOrder为true时,按访问顺序存取(新插入的元素放在表尾,刚访问的元素也移动到表尾)。 LinkedHashMap的组成就是一个HashMap+双端链表。 插入: 插入Entry1 插入Entry2 插入Entry3 更新: 三、LRU的实现 思路: 固定缓存大小,需要给缓存分配一个固定的大小。 每次读取缓存都会改变缓存的使用时间,将缓存的存在时间重新刷新。 需要在缓存满了后,将最近最久未使用的缓存删除,再添加最新的缓存。 1、使用LinkedHashMap实现LRU public class LRU1<K, V> { private final int MAX_CACHE_SIZE; private final float DEFAULT_LOAD_FACTORY = 0.75f; LinkedHashMap<K, V> map; public LRU1(int

数据库避免插入重复数据需求解决:MySQL之insert、insert ignore、replace和insert into on duplicate key update区别

为君一笑 提交于 2020-12-20 00:41:55
背景 最近在做项目的时候,简单的后台增删改查,但是每次在做新增数据操作的时候,都需要校验一次数据库中是否存在相同的数据(唯一索引字段),起初同时的做法是每次按照唯一主键作为条件去数据库中进行查询,如果存在,则不进行insert操作,如果不存在,则进行insert操作,这样做有两个弊端: 每次进行insert操作之前都会有一步select操作,我们知道,数据库的io是比较耗性能的,尤其是在数据量比较大的情况下; 本人想偷懒,每次去查询太繁琐; 在并发场景下同意出问题,除非加锁(目前还没有这个场景,博主未验证~) 那么到底有没有什么比较爽的方式可以解决这样的问题呢? 答案是当然的! 下面就来看看博主总结的几种方式,大家可以根据情况自行选取: 1.insert 2.insert ignore 3.replace 4.insert into on duplicate key update 测试代码 创建表 CREATE TABLE `test` ( `id` int NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `age` int DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `index

Django学习笔记之Django QuerySet的方法

馋奶兔 提交于 2020-12-19 10:03:24
一般情况下,我们在写Django项目需要操作QuerySet时一些常用的方法已经满足我们日常大多数需求,比如get、filter、exclude、delete神马的感觉就已经无所不能了,但随着项目但业务逻辑越来越复杂,这几个方法可能就不能很好但满足我们了,所以这时候,最好的办法是神马??对,读文档!这里的读文档不是有业务需求时去查文档,而是要为了阅读文档而阅读文档。以下也是作为我的文档阅读笔记,我记下了一些我以后可能会用到或者一些技巧性提升的东西,好,不废话,正文开始: 首先,我们假设有以下两个model: class Entry(Model.models): ip = models.CharField(max_length=20 ) time = models.DateTimeField() black = models.BooleanField(default= False) class Blog(Model.models): title = models.CharField(max_length=100 ) content = models.CharField(max_length=500 ) publish = models.BooleanField(default= False) entry = models.ForeignField(Entry, relate_name