类型

PHP获取浏览器类型及版本号

让人想犯罪 __ 提交于 2020-12-03 12:22:30
function getBrowser(){ $agent=$_SERVER["HTTP_USER_AGENT"]; if(strpos($agent,'MSIE')!==false || strpos($agent,'rv:11.0')) //ie11判断 return "ie"; else if(strpos($agent,'Firefox')!==false) return "firefox"; else if(strpos($agent,'Chrome')!==false) return "chrome"; else if(strpos($agent,'Opera')!==false) return 'opera'; else if((strpos($agent,'Chrome')==false)&&strpos($agent,'Safari')!==false) return 'safari'; else return 'unknown'; } function getBrowserVer(){ if (empty($_SERVER['HTTP_USER_AGENT'])){ //当浏览器没有发送访问者的信息的时候 return 'unknow'; } $agent= $_SERVER['HTTP_USER_AGENT']; if (preg_match('/MSIE\s

Python优先权队列出现TypeError: unorderable types 解决方法

£可爱£侵袭症+ 提交于 2020-11-24 06:26:05
class MyType: def __init__(self, arg1, arg2=None): self.data1 = arg1 self.data2 = arg2 q = queue.PriorityQueue() m1 = MyType(5) m2 = MyType(2) m3 = MyType(4) q.put( (1, m1)) q.put( (2, m2)) q.put( (3, m3)) while not q.empty(): print( q.get()) PriorityQueue 里的数据格式是 (优先级, 数据) 其中优先级为一个整形数字, 数据可以是内置类型或者自定义类型,当队列里的所有数据项的优先级没有重复时上面的代码没有什么问题,但万一两个数据项的优先级相同就会报错,类似这样: 因为python的优先级队列使用了堆排序,当队列中两个数据项优先级相同时,队列就会把两个数据项直接拿来再比较确定数据的排列顺序,但是由于我们使用了自定义的数据类型,系统不知道如何比较我们定义的数据,所以就会报错。 所以为了让我们自定义的数据可以比较大小,我们可以覆盖 __lt__这个函数,实现小于比较操作。然后python报错就解决了。(觉得这玩意和c++的stl一样 , stl中也需要类重载<运算符) class MyType: def __init__(self,

管理Spring容器中的自定义Bean

懵懂的女人 提交于 2020-04-07 02:15:45
Spring作为一个Bean容器,通过AOP和IoC很好的将这些Bean管理起来。但是,有的时候,我们希望从Spring的上下文管理其中部分与我们业务相关的对象。今天,想说的问题就是通过一个Map取出Spring符合我们业务中的Bean,在业务的特定阶段进行使用。 问题描述: 在处理业务中,把一部分数据信息需要放置到一个托管的地方,根据不同的状态来完成处理。而处理数据的逻辑不同。 解决办法: 那么我们可以通过为数据添加业务类型,然后我们通过类型去寻找符合它的业务处理。而我们的业务很多,如果通过switch判断,这样的程序耦合性很高,很不符合Spring的规范。通过查看资料,我们发现通过Spring将这件事变得简单了很多。 思路描述: 1. 通过定义一个Bean注册器(BeanRegistry),通过实现ApplicationContextAware接口,获取Spring的上下文,通过InitializingBean接口,在实例加载完毕后,从Spring上下中获取MarkedBizBean接口类型的Bean信息。 2. 需要配合业务处理的Bean需要实现MarkedBizBean接口,这样我可以通过BeanFactoryUtils.beansOfTypeIncludingAncestors方法从Spring上下文收集需要的Bean。 3.

ResultSet移动

自古美人都是妖i 提交于 2020-01-07 17:37:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ResultSet 功能1: 获取查询结果中的数据: getXxxx – 可以使用 遍历结果集 - 默认只有next可用 因为默认游标是仅向前的 常量: 1:让RS成为可以前后移动的 @Test public void test() throws Exception { // 在创建St对象时,可以指定查询的rs是否可以滚动 Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = st.executeQuery("select * from person"); // 直接移动到行尾 rs.afterLast(); // 前移动 while (rs.previous()) { String name = rs.getString("name"); System.err.println(name); } System.err.println("-----此时游标的位置是:行首--------"); while (rs.next()) { String name = rs.getString("name"); System.err.println

js判断是否为数组的函数: isArray()

試著忘記壹切 提交于 2019-12-21 15:48:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 今天刚好在学习支付宝 JS 框架 base.js 。瞄了一下,实现是这样的: if (value instanceof Array || (!(value instanceof Object) && (Object.prototype.toString.call((value)) == '[object Array]') || typeof value.length == 'number' && typeof value.splice != 'undefined' && typeof value.propertyIsEnumerable != 'undefined' && !value.propertyIsEnumerable('splice'))) { return 'array'; } 怎么说呢,乱。当然,也可以说是,“史上最全”,它确实使用了最主流的方法,只是把他们都写一起了而已。 像我们所知道的,用 instanceof 和 constructor 是最直接的、简单的方式: var arr = []; arr instanceof Array; // true arr.constructor == Array; //true 只是,由于 在不同 iframe 中创建的 Array 并不共享

golang: 常用数据类型底层结构分析

梦想的初衷 提交于 2019-12-10 17:05:05
虽然golang是用C实现的,并且被称为下一代的C语言,但是golang跟C的差别还是很大的。它定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struct来实现。了解golang的数据类型和数据结构的底层实现,将有助于我们更好的理解golang并写出质量更好的代码。 基础类型 源码在:$GOROOT/src/pkg/runtime/runtime.h 。我们先来看下基础类型: /* * basic types */ typedef signed char int8; typedef unsigned char uint8; typedef signed short int16; typedef unsigned short uint16; typedef signed int int32; typedef unsigned int uint32; typedef signed long long int int64; typedef unsigned long long int uint64; typedef float float32; typedef double float64; #ifdef _64BIT typedef uint64 uintptr; typedef int64 intptr; typedef int64

JavaScript的赋值深坑

家住魔仙堡 提交于 2019-12-01 13:14:59
以前学C++的时候(大学时代),对传参时印象深刻的是,传的 值 是 值 还是 值的地址 . 之后学JavaScript的时候,发现不用理会那么多,虽然不严谨,但是用起来很便捷,比如说类型转换呀,啥的简单多了..... 可是最近几天就遇到了坑... 先上代码: []===[] // false []==[] // false 上面的代码是用来判断是否为空数组用的.不巧的是,结果如大家看到的,起初我以为是JavaScript的bug,也就不以为然.因为JavaScript的坑还是挺多了,而且之前也有大概的例子,如下: 表达式 值 null == undefined true "NaN" == NaN false 5 == NaN false NaN == NaN false NaN != NaN true false == 0 true true == 1 true true == 2 false undefined == 0 false null == 0 false "5" == 5 true 所以,也就没有多放在心上.....大胆的继续前行去了~~ 可是最近又遇到了一个问题,是创建二维数组的时候: !function matrixAddition() { var temAry = [], newAry = [], i, j; for (i = 3; i--;) { for (j

Oracle 基础篇 --- 索引

╄→гoц情女王★ 提交于 2019-11-30 16:18:50
##第四. 索引 ###4.1 定义 索引是与表关联的可选结构。通过创建索引可提高数据更新和检索的性能。Oracle 索引提供到数据行的直接访问路径。 可以对表的一个或多个列创建索引。创建索引后,Oracle 服务器会自动维护和使用索引。表数据的更新(如添加新行、更新行或删除行)会自动传播到所有相关的索引,这些对用户来说是完全透明的。 索引还可以提高实施主键和唯一键约束条件时的性能。如果没有索引,则每次对表执行DML 操作时都会扫描整个表(全表扫描)。 ###4.2 类型 有多种类型的索引结构,可以根据需要使用。最常用的两种 类型是: ####4.2.1 B 树索引 默认的索引类型; 采用平衡树的形式. B 树索引的键值存储在平衡树(B 树)中,这样可以快速执行二进制搜索。 B 树索引的结构 索引的顶层为根,它包含指向索引中下一层次的条目。下一层次为分支块,它又指向位于索引中下一层次的块。最底层是叶节点,它包含指向表行的索引条目。叶块是双向关联的,这便于按键值升序或降序扫描索引。 索引叶条目的格式 条目头:存储列数和锁定信息 键列长度/值对:用于定义键中的列大小,后面跟随列值(此类长度/值对的数目就是索引中的最大列数)。 ROWID:包含键值的行的行ID 索引叶条目的特性 在非分区表的B 树索引中: 当多个行具有相同的键值时,如果不压缩索引,键值会出现重复

MySQL索引类型详解,让MySQL高效运行起来

时间秒杀一切 提交于 2019-11-29 13:57:40
索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。 在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin。 在查找username="admin"的记录 SELECT * FROM mytable WHERE username='admin';时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记录。相反,MySQL会扫描 所有记录,即要查询10000条记录。 索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。 MySQL索引类型包括: (1)普通索引 这是最基本的索引,它没有任何限制。它有以下几种创建方式: ◆创建索引 CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。