Entry

[由零开始]Redis数据类型与底层数据结构

旧街凉风 提交于 2020-09-24 11:31:12
数据类型与底层数据结构 1.数据类型 Redis是一个Key-Value的存储系统,使用ANSI C语言编写。 key的类型是字符串。 常用的:string字符串类型、list列表类型、set集合类型、sortedset(zset)有序集合类型、hash类 型。 不常见的:bitmap位图类型、geo地理位置类型。 Redis5.0新增一种:stream类型 注意:Redis中命令是忽略大小写,(set SET),key是不忽略大小写的 (NAME name) 2. Redis数据类型分析 2.1 Redis的Key的设计 用:分割 把表名转换为key前缀, 比如: user: 第二段放置主键值 第三段放置列名 比如:用户表user, 转换为redis的key-value存储 userid username password email 1 zhangf 111111 zhangf@163.com username 的 key: user:9:username {userid:9,username:zhangf} email的key user:9:email 2.2 String字符串类型 String能表达3种值的类型:字符串、整数、浮点数 2.2 .1 常见操作命令: 命令名称 命令描述 set set key value 赋值 get get key 取值 getset

input输入子系统

时光怂恿深爱的人放手 提交于 2020-08-20 09:16:36
一、什么是input输入子系统? 1、Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型、不同原理、不同的输入信息的 输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。从整体上来说,input输入子系统分为3层:上层(输入事件驱动层)、中层(输入核心层)、 下层(输入设备驱动层),如下图所示: 联系之前学过的驱动框架做对比,input输入子系统其实就是input输入设备的驱动框架,与之前的学过的驱动框架不同的是,input输入子系统分为3层:上、中、下,所以他的复杂度 要高于之前讲的lcd、misc、fb等的驱动框架。 2、图中Drivers对应的就是下层设备驱动层,对应各种各样不同的输入设备,Input Core对应的就是中层核心层,Handlers对应的就是上层输入事件驱动层,最右边的代表的是用户空间。 (1)从图中可以看出,系统中可以注册多个输入设备,每个输入设备的可以是不同的,例如一台电脑上可以带有鼠标,键盘....。 (2)上层中的各个handler(Keyboard/Mouse/Joystick/Event)是属于平行关系,他们都是属于上层。不同的handler下对应的输入设备在应用层中的接口命名方式不一样,例如 Mouse下的输入设备在应用层的接口是 /dev

SpringData Jpa使用原始sql返回自定义对象

落花浮王杯 提交于 2020-08-20 08:16:42
网上大量的copy文 真让人难受... 最近学习了jpa,多表条件查询时+分页,使用了Query这个对象,翻阅了大量资料终于找到了方法 核心方法: @PersistenceContext EntityManager entityManager ; //这里主要处理返回的自定义对象和字段类型 一定要和数据类型保持一致 比如bigInt=Long,varChar=String... Query query = entityManager . createNativeQuery (querySql). unwrap ( NativeQueryImpl . class ).setResultTransformer( Transformers . aliasToBean ( 自定义对象 . class )) //需要查询处理的字段和类型 //这里的name必须和自定义对象的name一致!!!比如数据库中是 order_no必须转为orderNo . addScalar ( "id" , StandardBasicTypes . LONG ) . addScalar ( "companyName" , StandardBasicTypes . STRING ) . addScalar ( "orderNo" , StandardBasicTypes . STRING ) ; // 参数赋值

[A*算法]A*算法的简单实现(一)

北城以北 提交于 2020-08-20 07:01:50
写在前面:之前看过一点,然后看不懂,也没用过。 最近正好重构项目看到寻路这块,想起来就去查查资料,总算稍微理解一点了,下面记录一下自己的成果(哈哈哈 :> ) 下面分享几篇我觉得挺不错的文章 A*算法 A*寻路算法详细解读 ======================================================================================== 搜索区域(The Search Area) 我们假设某人要从 A 点移动到 B 点,但是这两点之间被一堵墙隔开。如图 1 ,绿色是 A ,红色是 B ,中间蓝色是墙。 图 1 你应该注意到了,我们把要搜寻的区域划分成了正方形的格子。这是寻路的第一步,简化搜索区域,就像我们这里做的一样。这个特殊的方法把我们的搜索区域简化为了 2 维数组。数组的每一项代表一个格子,它的状态就是可走 (walkalbe) 和不可走 (unwalkable) 。通过计算出从 A 到 B需要走过哪些方格,就找到了路径。一旦路径找到了,人物便从一个方格的中心移动到另一个方格的中心,直至到达目的地。 方格的中心点我们成为“节点 (nodes) ”。如果你读过其他关于 A* 寻路算法的文章,你会发现人们常常都在讨论节点。为什么不直接描述为方格呢?因为我们有可能把搜索区域划为为其他多变形而不是正方形,例如可以是六边形

[A*算法]基于Unity实现A*算法(二)

馋奶兔 提交于 2020-08-20 05:07:27
写在前面:上一篇当时是非常简单的了解一下A*,昨天还有一些问题没解决,就暂时把自己查阅的文坛摘抄了过来(毕竟人家写的比我要好的多 :> ) 今天终于解决了,就又写了这一篇,正好我自己再梳理一遍,把Unity的实现也记录一下(Unity版本:2019.3.7.f1) ==================================================================================== 一、Unity UI表现实现   UI制作很简单,如下图    Canvas          UGUI画布(参考官网文档)     我这边主要是在上面挂载一个寻路脚本CSPathFindManager_AStar.CS   2.Panel          这里我用的是UGUI创建的Panel,主要是用来生成寻路点,挂载生成脚本CopyManager.CS   3.Node          UGUI创建的Image,用的纯色,用来充当路径点,挂载路径点脚本CSNode.CS   4.F/G/H/Pos/Index          UGUI创建的Text,通过修改文件对齐方式,使他们的文字分别位于Node的上下左右和中间,用来方便显示相关的值 二、Unity UI显示代码 1 using System; 2 using System

Visual Studio开发利器,CodeRush全新发布v20.1.6——支持Blazor

为君一笑 提交于 2020-08-20 03:42:39
CodeRush 能帮助你以极高的效率创建和维护源代码。Consume-first 申明,强大的模板,智能的选择工具,智能代码分析和创新的导航以及一个无与伦比的重构集,在它们的帮助下能够大大的提高你效率。 CodeRush v20.1.6新版下载 具体更新内容如下: Visual Studio 2019的CodeRush菜单位置自定义中的更改 Visual Studio 2019 16.4及更高版本现在允许您指定应放置CodeRush菜单的位置,因此已删除了较旧的CodeRush选项(位于Quick Setup选项页面上),这也使您在启动时性能得到提升(在典型的开发机器上节省了大约1600ms )。 默认情况下,CodeRush菜单位于Visual Studio Extensions菜单中。 如果您想将CodeRush菜单重新定位到Visual Studio菜单栏的顶层(建议使用CodeRush获得更高效率编码体验的大多数开发人员),请按照以下步骤操作: 打开Visual Studio 2019 选择Extensions -> Customize Menu... 在Extensions Menu标签中取消选中CodeRush entry 重新启动Visual Studio 支持Blazor .razor文件中@code部分中现已提供以下CodeRush功能: Smart Dot

webots Controller Plugin

落爺英雄遲暮 提交于 2020-08-20 01:11:42
Controller Plugin The controller functionality can be extended with user-implemented plugins. The purpose of a controller plugin is to ease the programming of robot-specific robot windows and remote-control wrappers. Programming controller plugins rather than programming directly in the controller is more convenient because it increases considerably the modularity and the scalability of the code. For example a robot window can be used for several robots. Index Fundamentals Robot Window Remote-Control Plugin Fundamentals Whatever its language, a controller executable is linked with the Webots

深度解密 Go 语言之 sync.map

走远了吗. 提交于 2020-08-20 01:06:02
工作中,经常会碰到并发读写 map 而造成 panic 的情况,为什么在并发读写的时候,会 panic 呢?因为在并发读写的情况下,map 里的数据会被写乱,之后就是 Garbage in, garbage out ,还不如直接 panic 了。 目录 是什么 有什么用 如何使用 源码分析 数据结构 Store Load Delete LoadOrStore Range 其他 总结 参考资料 是什么 Go 语言原生 map 并不是线程安全的,对它进行并发读写操作的时候,需要加锁。而 sync.map 则是一种并发安全的 map,在 Go 1.9 引入。 sync.map 是线程安全的,读取,插入,删除也都保持着常数级的时间复杂度。 sync.map 的零值是有效的,并且零值是一个空的 map。在第一次使用之后,不允许被拷贝。 有什么用 一般情况下解决并发读写 map 的思路是加一把大锁,或者把一个 map 分成若干个小 map,对 key 进行哈希,只操作相应的小 map。前者锁的粒度比较大,影响效率;后者实现起来比较复杂,容易出错。 而使用 sync.map 之后,对 map 的读写,不需要加锁。并且它通过空间换时间的方式,使用 read 和 dirty 两个 map 来进行读写分离,降低锁时间来提高效率。 如何使用 使用非常简单,和普通 map 相比,仅遍历的方式略有区别:

java如何对map进行排序详解(map集合的使用)

寵の児 提交于 2020-08-19 23:01:19
一、简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map。map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍): HashMap :我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。 TreeMap : 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。 Hashtable : 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。 LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。 二、Map排序 TreeMap TreeMap默认是升序的

新鲜出炉!面试90%会被问到的Java多线程面试题,史上最全系列!

大城市里の小女人 提交于 2020-08-19 21:59:52
前言 最近很多粉丝朋友私聊我说能不能给整理出一份多线程面试题出来,说自己在最近的面试中老是被问到这一块的问题被问的很烦躁,前一段时间比较忙没时间回私信,前两天看到私信我也是赶紧花了两天给大家整理出这一块的面试题库出来让大家看看,话不多说都给大家总结在下面了! 1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓知其然知其所以然,会用只是知其然,为什么用才是知其所以然,只有达到知其然知其所以然的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法: (1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4 核、8 核甚至 16 核的也都不少见,如果是单线程的程序,那么在双核 CPU 上就浪费了 50%,在 4 核 CPU 上就浪费了 75%。单核 CPU 上所谓的多线程那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程同时运行罢了。多核 CPU 上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核 CPU 的优势来,达到充分利用 CPU 的目的。 (2)防止阻塞 从程序运行效率的角度来看,单核 CPU 不但不会发挥出多线程的优势,反而会因为在单核 CPU