python 读取oracle 数据,并写入Excel, 加密保护Excel,部分列数据可编辑,其他列数据为只读

一、引入模块 cx_Oracle xlwt xlrd # -*- coding: gbk -*- import xlwt import cx_Oracle import zipfile import os from xlrd import open_workbook from xlutils.copy import copy 二、连接oracle conn = cx_Oracle.connect('oracle连接账户', '连接密码', 'tnsname') cur=conn.cursor(); 三、python生成的Excel 部分列保护只读,其他列可编辑 # Protect worksheet - 设置所有的列数据为只读 worksheet.protect = True # 默认为False worksheet.password = "加密密码" # 创建只读或可编辑属性 editable = xlwt.easyxf("protection: cell_locked false;") readonly = xlwt.easyxf("") # "cell_locked true" 默认 # 应用方式 worksheet.write(0, 0, "只读数据", readonly) worksheet.write(2, 2, "

如何在Windows上构建V8而不发疯

“打造V8并不是为了胆小” –互联网上的某人 有时我想知道我对JavaScript知识的无限渴望会导致我走向何方。 这次,我决定学习浏览器和Node如何使用V8,以及每天使用的API来自何处。 因此,我着手研究V8和两个最受欢迎的托管环境之间的集成。 我的计划是构建一个嵌入V8的简单应用程序。 而且由于没有多少Web开发人员知道事件循环不是由V8实现的,而是由托管环境实现的,因此我想在我的应用程序中对此进行演示。 我也希望一路了解V8的内部运作方式。 但是首先我必须从源代码构建V8并将其嵌入到简单的HelloWorld应用程序中。 事实证明,这项任务不适合胆小的人。 我花了一个星期的时间来搜索和学习有关C ++和python的许多知识。 我不得不问四个关于stackoverflow的问题。 我将保留它们,这是我建造该产品所需的其余工作。 由于构建和嵌入都不是无关紧要的,因此本文由两部分组成。 第一个展示了如何从Windows计算机上的源代码构建V8。 第二部分介绍了将其插入应用程序所需的条件。 当前V8只能在x64计算机上构建,因此请确保您在Windows x64版本上构建。 请推荐这篇文章💚,以便其他人知道有更简单的方法来构建V8。 我真的希望这篇文章可以使一些好奇的人省去很多麻烦。 搭建环境 此处提供了有关如何构建V8的说明,但不幸的是,它们假定您已经具有工作环境,并且省略了许多详细信息。 但是这些细节正是构建V8棘手的原因。 V8使用了Chromium项目工具链的一部分,因此这里找到的一些信息对我也有帮助。 请注意,您无需获取和构建Chromium源即可构建V8。 仅需要一部分工具链,例如depot_tools。 吉特 V8使用GIT作为VCS,因此请下载并安装它。 VS 2015 在Windows上构建V8需要Visual Studio附带的构建工具。 自2016年12月8日起,Chromium需要带有14393 Windows SDK的Visual Studio 2015 Update 3。 因此,继续并在此处下载带有Update 3的Visual Studio Community 2015的安装程序。 此页面需要会员资格,但是它是免费的,因此这里无后顾之忧。 现在运行安装程序,并确保选择以下内容: 安装完成后,请检查安装程序是否已将调试接口访问(DIA)SDK和vcvarsall.bat安装到以下目录: …\ Microsoft Visual Studio 14.0 \ DIA SDK …\ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat 由于某些原因,这些在安装后可能会丢失。 如果是这样,您将必须弄清楚原因以及安装它们的方式。 否则,您将无法构建。 就我而言,它正确地安装在一台机器上而另一台机器上却没有。 Windows SDK 由于Chromium使用的Debugging Tools For Windows并未作为VS安装的一部分安装,因此您还需要单独安装Windows SDK。 在此处下载安装程序并进行安装。 确保已在安装程序中选择了软件包: 仓库工具 下载 depot_tools捆绑包并将其解压缩到某处。 警告: 请勿使用资源管理器中的拖放粘贴或复制粘贴粘贴,这不会提取隐藏的“ .

基于JAVA对象流写的图书进销存系统管理

基于JAVA对象流写的图书进销存系统管理 1、用户登录 用户只需一个,即admin管理员,用户密码为123456,用户登录信息保存在属性文件user. properties中,用户登录时输入用户名和密码,如果成功则打印系统菜单,不成功则重新登录,不成功的次数最多3次,超过3次,则系统退出。 (在内存中一行一行读取出来,对字符串进行修改,然后覆盖) 2、系统菜单:1、库存管理 2、销售管理 3、查询库中所有图书信息 4、查询销售信息、5,退出 3、选择不同的菜单,进入不同的管理功能。1、库存管理 : 使用bookStore.txt文件作为图书数据文件, 进入库存管理后只能进行图书入库操作和退出,既向文件中添加图书信息,如果图书名称在文件中已经存在,则再录入此书的时候,需要在原有的图书的库存基础上添加数据。如果没有此书,则作为新的数据录入。 如果录入信息为: Java基础,则下一步只需要录入进货数量即可。 如果录入信息为:HTML,此书没有,则需要进行详细录入,下一步录入作者名称、进价、售价、库存等信息。 4、销售管理:使用sell.txt文件作为图书销售信息保存, 卖出去之后 用新的集合对象(盈利) 提示:第一次运行可能会抛出异常,因为第一次写入的时候会读到文件末尾流!!!后面运行一切正常! 第一个文件Book.java package com.langxikeji.Object; import java.io.Serializable; //创建一个Book类,并且实现Serializable接口 public class Book implements Serializable{ private int bookId; private String bookName; private String auther; private double purprice; private double sellprice; private int stock; private int salecount; private double profit; public int getBookId() { return bookId; } public void setBookId(int bookId) { this.bookId = bookId; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.

Nginx 配置不当造成加载静态资源件提示ERR_CONTENT_LENGTH_MISMATCH解决方法

前段时间,心血来潮,捣鼓了一个个人博客,在本地运行时,资源文件一切正常,发布到到服务器上时却提示如下错误:net::ERR_CONTENT_LENGTH_MISMATCH 猜想可能是nginx文件配置的不合理,查看nginx日志发现很多js,css都没有加载成功, [error] 22284#0: *8521 open() "/home/tomcat1/webapps/leo-web/css/home.css" failed (2: No such file or directory), client: 119.162.21.135, server: 47.93.57.254, request: "GET /css/home.css HTTP/1.1", host: "www.lei-o.cn", referrer: "http://www.lei-o.cn/", 经过百度,初步定位是nginx目录权限的问题,添加一个nginx组,一个nginx用户,然后分配权限 chown -R nginx.nginx ./nginx (将nginx目录下的文件属主和用户制定为nginx) 然后重启nginx 命令: ./sbin/nginx -s reload,发现提示: 去logs目录发现没有nginx.pid文件,使用./sbin/nginx -c ./conf/nginx.conf 命令,会自动在nginx目录形成nginx.pid文件,如果nginx之前已经运行,会提示下面的端口占用, 使用netstat -ntpl命令查看占用80端口的应用, 发现以前的nginx占用了80端口,使用kill命令杀掉该进程 再次运行./sbin/nginx -c ./conf/nginx.conf,就正常了, 重启nginx后,在浏览器中敲入www.lei-o.cn,访问资源文件都正常了

vue.js 过滤器传参数及接收

看官方的代码,过滤器中是可以传多个参数的。 我的初始代码如下: html代码: …… <div class="order-view-box"> <div class="order-progress"> <ol class="progress-list clearfix"> <li class="step step-done step-first"> <div class="progress"><span class="text">创建</span></div> <div class="info">{{taskitem.createDate | FormatDate( taskitem.createDate ,'MM月DD日 HH:mm' )}}</div> </li> <li class="step step-active"> <div class="progress"><span class="text">出发</span></div> <div class="info">01月20日 11:00</div> </li> <li class="step"> <div class="progress"><span class="text">到达</span></div> <div class="info"></div> </li> <li class="step"> <div class="progress"><span class="text">记录</span></div> <div class="info"></div> </li> <li class="step step-last"> <div class="progress"><span class="text">完成</span></div> <div class="info"></div> </li> </ol> </div> </div> . 省略 . . <script src="

利用回调函数实现一个计算器,实现加减乘除操作

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int Add(int x, int y) { return x + y; } int Sub(int x, int y) { return x - y; } int Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x / y; } void menu() { printf("*************************\n"); printf("******1.Add 2.Sub*****\n"); printf("******3.Mul 4.Div*****\n"); printf("****** 0.exit ********\n"); printf("*************************\n"); } int calc(int(*pfun)(int, int)) //函数指针作为参数,pfun将会接收到形参(函数)的地址 { int x = 0; int y = 0; printf("

数据库事务的四大特性

数据库中事务的四大特性(ACID)介绍 ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 ⑵ 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 ⑶ 隔离性(Isolation) 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。 ⑷ 持久性(Durability) 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务以及正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成,否则就会造成我们看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。 以上介绍完事务的四大特性(简称ACID),现在重点来说明下事务的隔离性,当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,在介绍数据库提供的各种隔离级别之前,我们先看看如果不考虑事务的隔离性,会发生的几种问题: 1,脏读 脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。 当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。例如:用户A向用户B转账100元,对应SQL命令如下 update account set money=money+100 where name=’B’; (此时A通知B) update account set money=money - 100 where name=’A’; 当只执行第一条SQL时,A通知B查看账户,B发现确实钱已到账(此时即发生了脏读),而之后无论第二条SQL是否执行,只要该事务不提交,则所有操作都将回滚,那么当B以后再次查看账户时就会发现钱其实并没有转。 2,不可重复读 不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。 例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。 不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。 在某些情况下,不可重复读并不是问题,比如我们多次查询某个数据当然以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,例如对于同一个数据A和B依次查询就可能不同,A和B就可能打起来了…… 3,虚读(幻读) 幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。 幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。 现在来看看MySQL数据库为我们提供的四种隔离级别: ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。 ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。 ③ Read committed (读已提交):可避免脏读的发生。 ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。 以上四种隔离级别最高的是Serializable级别,最低的是Read uncommitted级别,当然级别越高,执行效率就越低。像Serializable这样的级别,就是以锁表的方式(类似于Java多线程中的锁)使得其他的线程只能在锁外等待,所以平时选用何种隔离级别应该根据实际情况。在MySQL数据库中默认的隔离级别为Repeatable read (可重复读)。 转自数据库事务的四大特性以及事务的隔离级别 转载于:https://www.cnblogs.com/zhaopengcheng/p/6842588.html

解决android libcore局部编译时`out/target/common/obj/JAVA_LIBRARIES/sqlite-jdbc_intermediates/javalib.jar'

在最近的工作中,对libcore/下的文件进行了修改,编译时遇到了如下错误: make: *** No rule to make target `out/target/common/obj/JAVA_LIBRARIES/sqlite-jdbc_intermediates/javalib.jar', needed by `out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/classes-full-debug.jar'. Stop. 以往的解决方案很暴力,都是直接将整个源码进行一次重新编译,也可以通过,不过这种做法很没有工程师精神, 于是将libcore下的Android.mk文件进行了梳理,发现与JAVA_LIBRARIES以及sqlite同时相关的编译语句是用于测试的, 现在并不需要测试,其中一部分语句如下: ifeq ($(LIBCORE_SKIP_TESTS),) # Make the core-tests library. include $(CLEAR_VARS) LOCAL_SRC_FILES := $(test_src_files) LOCAL_JAVA_RESOURCE_DIRS := $(test_resource_dirs) LOCAL_NO_STANDARD_LIBRARIES := true LOCAL_JAVA_LIBRARIES := core-libart okhttp core-junit bouncycastle LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support sqlite-jdbc mockwebserver nist-pkix-tests LOCAL_JAVACFLAGS := $(local_javac_flags) LOCAL_MODULE := core-tests LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/JavaLibrary.mk include $(BUILD_STATIC_JAVA_LIBRARY) endif 于是在libcore\JavaLibraby.mk文件的开头加入了一句export LIBCORE_SKIP_TESTS := false 加入位置摘抄: The Java files and their associated resources.

博客养成记 の 小会议:关于论文综述的修改以及项目的开发

导师开会: 一.论文综述的修改 1.修改不可信信息的分类类别以及特征,以减少不可信信息类型定义的交叉及模糊。 修改极端突发事件的信息。如何划分类别?谣言(极端中的不可信、虚假)、偏激、垃圾? 2.对论文中描述同一件事件的文献进行整合。例如wisdom文献。 3.在模型中加入公式(尤其是在深层语义建模中) 二.加快项目的构建 三.养成写博客的习惯 看刘谣言方向的ppt及论文。 https://wenku.baidu.com/view/eb069c5a49d7c1c708a1284ac850ad02de8007cf.html http://weibo.com/1464484735/DaM6Bb2an?sudaref=www.baidu.com&retcode=6102&type=comment http://rumor.thunlp.org/ 做事要用心! —————2017.05.11(周四)早晨

HTTP请求的方法(与服务器交互方法)

Http与服务器交互的不同方法 (1)GET 主要用于向指定的URL(URI)请求资源(资源文件或是数据均可), 可以带参数也可以不带参数, 带参数时,参数是明文传递,你可以在浏览器的地址栏中看到参数名及参数值,get安全性不高,所以常用于安全性要求低的场合, 比如登录后请求数据。 (2) POST 主要是向指定的URL(URI)提交数据, 通常用于表单发送,psot所传递的数据或参数不是以明文形式存在的,而是封装后的,因此相对安全系数高,像注册、登录、提交表单都是用该方法实现的。 (3)PUT 向指定资源位置上传其最新内容。 功能跟post相似,用来将信息放到请求的URL(URI)上,put方法是幂等方法, post非幂等方法,put在请求时容易造成数据冗余, 而post则不然。 (4)DELETE 请求服务器删除Request-URI所标识的资源。 用于删除请求URL上的某个资源, 该请求返回状态有3. 1. 200:表示删除请求被成功执行,返回被删除的资源 2. 202:表示删除请求被接受,但还没有被执行 3. 204:表示删除请求被执行,但没有返回被删除的资源 (5)HEAD:主机端响应Client端的一些数据文件头。 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。 (6)OPTIONS:主机端响应Client端的一些允许的功能与方法。 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。 HTTP有几种请求头?option请求头的作用 OPTIONS请求方法的主要用途有两个: 1、获取服务器支持的HTTP请求方法;也是黑客经常使用的方法。 2、用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。 (7)TRACE 回显服务器收到的请求,主要用于测试或诊断。 (8)CONNECT。 TTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 最基本的方法是GET,POST,PUT,DELETE。

美团面试,万一用的上呢

作者博客 http://www.jianshu.com/u/b997cd1b6a9d 前言 开发职位或许没有之前如此火爆,但是只要你有真才实学,找个较好的工作还是比较容易的。如果你是985,211,如果你是硕士学历,那找个满意的offer更是不再话下;即使不是上面的条件,只要你好好努力的学习,把每一项的技术点攻破了,同样可以达到甚至超越上面条件的同学。 我隔一段时间都会出去面试一次,面试的目的不是为了找到好的工作,而是知道自己的优缺点是什么?知道市场需要什么样的人?同样,面试你的也是同行,这样也能够碰撞出不同的思想。当然,遇到好的机会那是再好不过了。试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是很可怕的,至少我这么认为。如果您同意这样的观点,不妨接着往下看,让我们一起研究面试过程中需要具备的知识。下面是我亲生经历的一次面试,这里写出来给大家分享,更多的是总结面试中遇到的问题以及以后学习过程中的方向。只有这样才能和社会接上轨迹。 我面试的是美团,这家公司还算不错的,至少在我印象中还是挺好。技术面试一共是三面。下面做一个总结 第一面 1 手写算法题。一共有3个,面试官随机选择一个。猫扑素数;1到n,求1的个数;单词反转。 2 Activity的加载模式。 standard,singleTop,singleTask,singleInstance。 可以参考:https://developer.android.com/guide/components/tasks-and-back-stack.html 2.1 什么时候会用到singleTask? 在MainActivity的时候用到 3 Handler机制? MessageQueue,Looper等。 3.1 一个线程是否只有一个Looper? 3.2 如何保证一个线程只有一个Looper? 参考:ThreadLocal 4 多线程的方式有哪些? 1) new Thread() 2) AsyncTask 3) Handler 4) IntentService 5) ThreadPoolExecutor 5 ANR异常发生条件 1)5s内没有响应用户输入事件 2)10s内广播接收器没有处理完毕 3)20s内服务没有处理完毕 5.1 如何分析ANR log+trace.txt 6自定义View和ViewGroup 说一下自己定义的组件就行 7 事件处理 分发,拦截,处理。只是View没有拦截处理 8 GC算法 标记清除,标记整理,复制,分代收集 参考:http://www.jianshu.com/p/7c708a66ff42 把上面文章弄懂了,就能刷过GC 9 四大引用 强,软,弱,虚,并说明下合适GC 10 动画 View动画,属性动画,帧动画。再说下View和属性动画区别。 参考:https://developer.android.com/guide/topics/graphics/overview.html 11 Dalvik和Art区别?(Just In Time和Ahead Of Time) 就这样第一面基本结束。一共问了11个问题,其中美团的手写算法在业界算是比较出名,很多小伙伴可能卡在手写算法上。然后就是一些Android和Java的细节性东西,这些基础内容只要有1年经验的都基本能说出个一二三。

Android 用adb 打印linux内核调试信息dmesg和kmsg命令

Android的log信息分为内核空间和用户空间中LOG,查看用户空间(也就是app等上层的log)的log直接用logcat就可以了,如果想过滤一些信息就用adb shell "logcat | grep -E 'log_xxx|log_aaa'"命令,这样log只会显示含有log_aaa和log_xxx的log信息了。上层的log信息大家基本都会查看,我们这里就只说用adb查看内核的log信息,毕竟如果接个串口线来查看log,有时候确实麻烦。 1、执行dmesg命令,可以查看全部消息。如果想把log信息保存到文件,可以用adb shell dmesg >D:/Kernel.log. 2、adb shell 然后执行 cat /proc/kmsg。程序里面用printk函数打印的信息会显示出来。用cat /proc/kmsg命令打印出来的信息跟与dmesg 有不同, 第一次执行/proc/kmsg 打印到当前时间的所有内核信息,再次执行cat /proc/kmsg,不会再打印已经打印的信息,只打印上一次执行之后打印出来的新的信息。

Retrofit实现文件上传和下载【二】

概述 通过前一篇的博客介绍,我们已经对Retrofit的使用有了一个大概的了解,今天来讲讲利用Retrofit进行文件的上传和下载 文件上传 服务器使用的是SSH框架,因此这里是以struts2的方式来获取数据的,我这里定义了三个字段用来接收上传过来的数据 private File file;//获取单个文件 private File[] files;//获取多个文件 private String description; 单文件上传 先定义咱们的接口 @Multipart @POST("user!getFile") //description表示key Call<RequestBody> upFile(@Part("description") RequestBody description, @Part MultipartBody.Part file); 解释:@Multipart表示请求发送multipart数据,需要配合@Part一起使用,MultipartBody.Part用来封装需要上传的文件,RequestBody用来封装一段文字 下面来看看具体实现 //把file封装到RequestBody中 RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), files[0]); //再把RequestBody封装到MultipartBody.Part中,第一个参数file就是和服务器约定的key MultipartBody.Part body = MultipartBody.Part.createFormData("file", files[0].getName(), requestFile); String descriptionString = "hello, 这是文件描述"; RequestBody description = RequestBody.create(MediaType.parse("multipart/form-data"), descriptionString); Call<RequestBody> call = fileService.upFile(description, body); 多文件上传 在介绍多文件上传前,先对RequestBody、MultipartBody、MultipartBody.Builder、MultipartBody.Part这几个类作一个简单说明,方便我们对下面的代码有一个清晰的认识 1.RequestBody是MultipartBody的父类 2.MultipartBody.Part通过createXXX方法来创建请求用的数据 3.MultipartBody.Part可以传入RequestBody对象来创建请求用的数据 4.MultipartBody.Builder可以添加多个MultipartBody.Part 5.通过MultipartBody.Builder的build()方法返回MultipartBody对象 6.RequestBody的create(MediaType contentType, File file)方法,把File封装到请求体中 详细内容可以去看看okhttp的API 多文件的上传大致有三种形式: 1.第一种方法(太Low不可取)

ADB与按键精灵手机助手连接手机调试问题记录

连接安卓手机问题 adb 连接 使用 adb devices 未发现设备 红米手机,手机连接时,设备管理器 出现未识别的驱动如图: 解决: 使用驱动精灵升级驱动失败,查找论坛,,,, 使用第三方adb均失败。 后面通过开启手机 开发者调试模式解决, 使用adb devices可以查看到设备。 adb连接手机可参考 adb连接手机 adb 命令使用 adb操作命令详解及大全 按键精灵安卓手机助手连接 连接模拟器 逍遥模拟器:据说助手有对 adb 程序进行优化,将按键精灵安装目录下的 android下的 adb.exe、 AdbWinApi.dll、AdbWinUsbApi.dll 覆盖到逍遥模拟器对应文件。 目前还存在一个问题:连接模拟器调试时进行调试出现环境初始化失败,尝试以下方式没有解决: 1、模拟器按键精灵版本过低,按键精灵; 2、卸载模拟器按键精灵,使用按键精灵pc客户端连接模拟器自动安装; 3、使用模拟器自带市场进行安装按键精灵; 4、切换模拟器手机型号 XIAOMI MI 5、 SAMSUNG Galaxy Tab3 连接手机:直接安装手机精灵即可通过wifi或usb运行。

给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”

题目描述 给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”。 “回文串”是指正着和反着读都一样的字符串。如:”aa”,”bob”,”testset”是回文串,”alice”,”time”都不是回文串。 #include<iostream> #include<algorithm> #include<string> #include<string.h> using namespace std; bool check(char *str)//判断这是不是一个回文字符串. { int i = 0; int j = strlen(str) - 1; while (i<j) { if (*(str + i) != *(str + j)) return false; i++; j--; } return true; } int main() { string s,s1,s2; cin >> s; s1 = s + s[0]; reverse(s.begin(), s.end()); s2 = s; s2 = s2 + s2[0]; char *s3= (char*)s1.data(); char *s4 = (char*)s2.

video.js动态设置视频的播放地址。

小白想通过js动态设置video的播放地址,饶了一天,终于走出坑,下面是解决的方法 js中 var videoUrl=var videoUrl="/file/"+row.path.substring(row.path.lastIndexOf("\\")+1); //此处填写你的视频地址 alert("videoUrl==="+videoUrl); var myPlayer = videojs('my-video'); videojs("my-video").ready(function() { var myPlayer = this; myPlayer.src(videoUrl); /*动态设置video.js播放的地址。*/ myPlayer.autoplay(); }); jsp页面中 <div > <video id="my-video" class="video-js vjs-big-play-centered " width="800px" height="450" data-setup="{}"> <source src="" class="ms_4" type="video/mp4"> <p class="vjs-no-js"> To view this video please enable JavaScript, and consider upgrading to a web browser that <a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a> </p></video> </div>

Hololens官方教程精简版 -配置篇

前言 初衷 首先,官方教程更新很慢,使用的旧版HoloToolkit(微软提供的工具包)。 其次,官方教程提供了对应的源码包,但是体积大得吓人。下个教程对应的源码就需要很长时间。 最后,我觉得官方教程太复杂,整个教程实践下来,做了后面就忘了前面。 所以有了这个系列,权当做一下学习笔记。 为什么标题里包含“Hololens官方教程”? 因为这个系列就是按照官方教程的步骤进行的 为什么叫做“精简版”? 因为这个系列不依赖官方教程的源码包及素材,全部使用内置素材和官方提供的工具库。 并尽可能的使用工具库进行快速开发。 安装开发工具 需要安装如下工具: Windows 10(专业版、企业版或教育版):https://www.microsoft.com/zh-cn/software-download/windows10Visual Studio 2015 Update 3:https://developer.microsoft.com/zh-cn/windows/downloadsHololens模拟器:http://go.microsoft.com/fwlink/?LinkID=823018Unity 5.5及以上版本:https://store.unity.com/download 如果有Hololens设备,请在设备上安装: Holographics Remoting Player:https://www.microsoft.com/en-us/store/p/holographic-remoting-player/9nblggh4sv40 官方参考网址:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/install_the_tools 注意以下几点 如果没有Hololens设备,那么请保证主板支持Hyper-V,并在系统中打开Hyper-V功能,这样才能安装Hololens模拟器 另外,请安装Windows10的专业版、企业版或教育版,并让版本至少为:10586,推荐为14393以上。可以运行dxdiag命令查看当前系统的版本 安装VS2015时,记得勾选通用Windows应用开发工具 Unity需使用5.5及以上版本(包含测试版,截止本文最新版本为:5.5.0.f3) 下载HoloToolkit-Unity 这个是微软官方提供的开发工具包,帮我们封装了很多常用的组件及脚本。 下载地址:https://github.com/Microsoft/HoloToolkit-Unity 解压,用Unity打开该项目,并导出: 图中HoloToolkit-Example不是必须的,但为了学习需要,建议还是导出 将导出的资源包任意命名,本例中命名为:HoloToolkit-Unity-5.5.0f3.unitypackage Chapter 1 - 新建Hololens项目 本例中,命名为:TinyHolo 导入刚才的HoloToolkit-Unity-5.5.0f3.unitypackage Chapter 2 - 设置摄像机 新建目录:Assets/_Scenes/Holograms 100/ 保存当前场景到该目录下,如图: 删除默认的Main Camera,将Assets/HoloToolkit/Input/Prefabs/HoloLensCamera拖入到根级 Chapter 3 - 创建全息物体 新建一个Cube,按如下设置: Position > (X: 0, Y: 0, Z: 2) Rotation > (X: 45, Y: 45, Z: 45) Scale > (X: 0.

unique函数自我理解

unique()函数是STL里面一个非常有用的去重的函数,首先,它的功能是去除相邻的重复的元素,只保留其中一个,但是有一点一定得注意:它并没有真正的去除,而只是,除了保留一个外,其余的重复的元素均被它搞到容器后面去了,该函数的返回值是需要删除的重复值的第一个元素的地址. 例如:一个vector<int>a={1,2,3,3,3,4},unique(a.begin(),a.end()),它的返回值是{1 ,2, 3, 4,3 ,3}这个排列中4后面的3的位置。所以,要想真正的删除此重复的元素,还得借助于erase()函数。 a.erase(unique(a.begin(),a.end()),a.end()); 最后呢,因为有时候给定的序列不是有序的,因此还需要在执行unique()前进行sort().

Retrofit的使用【一】

Retrofit简介 Retrofit是Square公司开发的一个Android和Java的REST客户端库,官方的解释是一个针对Android和Java类型安全的http客户端,通俗的来说Retrofit是一个应用在Android中,用来请求网络的第三方库,它的本质是对okhttp进行了封装,使我们的开发更为简便高效. 环境搭建 官网地址:http://square.github.io/retrofit/GitHub地址:https://github.com/square/retrofit相关jar包的下载:https://github.com/square/retrofit/tree/master/retrofit-converters到各自对应目录下进行下载jar包导入 compile ‘com.squareup.retrofit2:retrofit:2.2.0’ compile ‘com.squareup.retrofit2:converter-gson:2.2.0’ compile ‘com.squareup.retrofit2:converter-scalars:2.2.0’ 导入后确保有以下jar包即可 converter-gson-2.2.0.jar、 converter-scalars-2.2.0.jar、 gson-2.7.jar、 okhttp-3.7.0.jar、 okio-1.12.0.jar、 retrofit-2.2.0.jar 使用步骤 1.创建用于接收的返回JSON数据的实体类:Entity 2.创建一个接口来管理请求的URL:EntityService 3.通过创建Retrofit类来帮我们自动实现接口的实现类 4.调用实现类里的方法可以同步或异步HTTP请求到远程服务器,并得到Call对象 5.调用Call里的方法去获取响应数据 入门案例 请求的url:http://10.8.29.49:8080/test/user!getUser 请求参数:loginCode 返回的json数据: {"username":"小明","password":"1234","address":"地球"} 创建实体类User public class User { private String name; private String password; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.