2019独角兽企业重金招聘Python工程师标准>>> LRUMap对于构建缓存或者连接池之类的技术经常用到,common-collections框架给了现成的实现,大家在不需要修改的情况下,直接用,好用且稳定。
一个cache的简单例子:
import org.apache.commons.collections.map.LRUMap; import java.util.Collections; public class SampleCache { private static SampleCache instance = null;
private Map<Long, Integer> cache = null;
private static int maxLength = 100000;
private SampleCache () {
init();
}
public static SampleCache getInstance() {
if (instance == null) {
instance = new SampleCache ();
}
return instance;
}
private void init() {
LRUMap map = new LRUMap(maxLength);
this.cache = Collections.synchronizedMap(map);
}
}
=======解析LRUMap=======
Java将二进制流转Base64字符串并在页面显示(附Base64转二进制流) java代码如下:
/**
* 二进制流转Base64字符串 * * @param data 二进制流 * @return data * @throws IOException 异常 */ public static String getImageString(byte[] data) throws IOException {
BASE64Encoder encoder = new BASE64Encoder();
return data != null ? encoder.encode(data) : "";
} /** * Base64字符串转 二进制流 * * @param base64String Base64 * @return base64String * @throws IOException 异常 */ public static byte[] getStringImage(String base64String) throws IOException {
BASE64Decoder decoder = new sun.
题意 二维平面有N(<=10^5)个蚁穴,每个蚁穴的蚂蚁会不断的爬向最近的蚁穴(距离相同则按x,y坐标选最小的),Q(<=10^5)个查询,问两只蚂蚁是否会相遇。
思路 其实行走过程就像不断寻找、逼近最近点对,最终再最近点对循环,那么落入同一个最近点对的蚂蚁就会相遇。即把每个点和离他最近的点连边,不必考虑方向,同一个连通分量中的蚂蚁一定会相遇。建立图之后用并查集维护一下联通关系即可。 建图的难点就在于如何寻找最近点,有一个很好的数据结构KD树可以再O(NlogN)的时间建立,并完成每次平均O(logN),最坏O(sqrt(N))的查询,而且还可以查第K大。 KD树——K-Dimensional Tree KD树首先通过不断划分空间的方法,规划一条logN级别的搜索路径来探测最近点。也就是说,对当前N个点,在某个维度选取中位点,然后将点集在这个维度以中位点坐标分成两部分,往目标点所在的那部分去查询。然后递归进入相应的那一半区间重复此操作。这样就可以在这条渐进路上得到一个最小值。 但显然有这样一种情况,跨过分界线的点更优。对于这种情况有个必要条件就是目标点到分解线的距离比已知的最小值要小。所以KD树是在回溯的时候在以目标点为圆心,当前最小值为半径做圆,如果和分界线相交那么在递归另外一边。也正是这个例外的存在会导致KD树处理询问会退化到O(根号N)。 怎样让跨界点的情况尽可能少呢?我们要在划分的时候选择尽可能稀疏的维度,来避免在靠近根的地方产生额外分支。所以划分是选择哪一维时,可以用取当前点集方差最大的维度。 有人写了一个比较通用完善的KD树500多行,ACM中对于低维度空间,只要用深度去摸来随机决定哪一位划分就很不错了。
AC代码 C++ #include <stdio.h> #include <algorithm> using namespace std; #define MAXD 2 //空间维度 #define MAXN 100005 #define EPS 0.5 //判断重点的阈值 struct KD_P //空间点结构 { int x[MAXD]; //坐标 int id; //初始编号 bool operator < (const KD_P& b) { int i; for (i = 0; i < MAXD; i++) if (x[i] != b.x[i]) return x[i] < b.x[i]; return false; } }; KD_P point[MAXN]; //原始点 KD_P node[MAXN]; //KD树划分用排序节点 //int split[MAXN]; //这一点的划分参考维度,一般选择方差最大的一维,或奇偶划分 int split_now; //当前排序的维度 bool KD_cmp(const KD_P a, const KD_P b) { return a.
ubuntu apache2的禁止IP访问在etc/apache2/sites-available/000-default.conf 其他linux系统的Apache的配置文件是httpd.conf 而并非Ubuntu下的 NameVirtualHost 145.32.22.52:80 <virtualhost 145.32.22.52:80> ServerName 145.32.22.52 <Location /> Order Allow,Deny Deny from all </Location> </virtualhost> <virtualhost 145.32.22.52:80> ServerName www.baidu.com DocumentRoot /var/www/html/3d //网站路径 </virtualhost> http://www.tecbbs.com/thread-2556-1-1.html
前面一篇博客已经介绍了跨进程通信的几种方式,这篇博文主要实现一下Aidl方式的跨进程通信。 首先新建一个file文件,后缀名改为aidl,aidl文件内容与java文件差不多,我们写2个简单的方法意思一下
选择工程目录新建,直接就可以生成aidl文件
package com.caidong.aidl; /** Example service interface */ interface IRemoteService { /** Request the process ID of this service, to do evil things with it. */ int getPid(); /** Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); } 定义的是接口而不是class这个需要注意一下,写好了之后如果使用的是android studio的话就需要清空工程然后重写编译工程了,就会自动生成IRemoteService.java文件 下面是自动生成的java文件的具体内容
/* * This file is auto-generated.
Android应用程序是用Java语言写的,通过aapt工具把应用程序所需要的任何数据、资源文件打包成apk文件,这个文件是一个将应用安装到手机上的一个载体。 每个Android应用程序存在于不同的世界:
(1)默认的,每个应用在他自己的Linux进程中运行,当应用中的任何代码需要执行时Android就启动相应的进程,当不需要执行时并且系统资源被其他应用请求时android就关闭相应的进程。
(2)每个进程都有他自己的虚拟机对象(VM),所以应用程序代码与其他的应用运行是彼此隔离的。
(3)默认的,每个应用被分配一个唯一的Linux user ID,都被设置权限以便应用程序的文件只对用户可见或者只对应用自己可见。安排两个应用程序共享一个user ID是可能的,这种情况下他们彼此之间是可以看见对方的文件的,为了保护系统资源,拥有相同ID的应用也能被安排运行在一个相同的Linux进程中,共享相同的VM。
1、应用组件(Application Components)
Android一个核心的特点就是一个应用能使用另一个应用的元素(如果另一个应用允许的话),你的应用不需要包含你用到的另一个应用的代码也不需要你连接这些代码,相反的,只是当应用需要这些代码时,就启动另一个应用相应的代码(不是让另一个应用全部启动)
为了这个能工作,当一个应用的任何部分被需要时系统必须能启动这个应用进程,并且将这个部分实例化成java对象,因此,和其他大多数系统不同的 是,android应用程序没有一个单独的程序入口(例如:没有main()函数),相反的,android应用有必要的组件以便当需要时系统能实例化并 运行它,android中有四种组件:
(1)Activity
一个Activity是一个可见的用户可以使用的用户界面,如果一个应用中有多个Activity,虽然彼此结合形成一个应用在一起工作,但是每个Activity是彼此独立的,每个都是Activity的一个子类。
一个应用程序可能由一个或多个Activity组成,这些Activity这么样显示,需要多少个Activity,依赖于这个应用的设计者,一般的,有一个Activity应该被标记成当这个应用启动时第一个呈现出来给用户的。
每个Activity默认的被给予一个窗口来绘制,一般的,这个窗口占满整个屏幕,但是他可以比屏幕小并且浮在另一个窗口的上面。
一个窗口中的可见的内容是由一些具有层次关系的view组成的,都是继承自View类的,每个view都控制一个窗口中的特定的矩形框,parent view 包含children view和组织children view的布局,leaf view(那些在继承层次最底层的view)绘制在他们所控制的矩形框中,并且对用户的动作做出直接的回应,因此view就是Activity和用户交互的地方,android有很多已经做好的view你可以使用,包括buttons,text fields,scroll bars,menu items,check boxes等等
一个view hierarchy是通过Activity.setContentView()方法被放到一个Activity的window中的,content view是view hierarchy中最顶端的那个view。
(2)Services
一个service不是一个用户可见的组件,在不确定的一段时间内运行在后台,每个service都继承自Service类。
你可以连接(connect)或者绑定(bind)到一个正在运行的service(如果这个service还没运行的话就启动它),当连接到service后,你可以通过一个service暴露出来的接口和这个service交流,对music service来说,这个接口可以是允许用户暂停,后退,停止,重新播放。
和Activity或者其他组件一样,service运行在这个应用进程的主线程中,所以他不会阻塞其他的组件或者用户界面,他们经常为那些耗时长的任务单独开一个线程。
(3)Broadcast receivers
一个broadcast receiver这样一个组件,他只是接收广播并作出反应,在系统中有很多已有的广播,比如反应时区变化(timezone)的,电池变化 (battery)的,用户修改了系统语言时的广播,应用程序也可以自己定义广播,比如定义这样一个广播,让其他的应用知道某些数据已经下载完毕了可以使 用了。
一个应用可以有任意多个broadcast receiver来对他所关心的广播进行监听并作出反应。所有的receiver都继承自BroadcastReceiver类。
BroadcastReceiver不显示在用户界面上,然而,他们可以启动一个Activity来作为他们接收到的信息一种反应,或者他们可以使用 NotificationManager来提示用户,Notifications可以通过不同的方式获得用户的注意,比如点亮呼吸灯,震动电话,播放一个 声音等等,他们一般放一个图标在状态栏上,来让用户可以打开获得这些信息。
(4)Content providers
Content providers是一个应用程序数据的集合,来让其他的应用可以访问这些数据,这些数据可以被存在文件系统中,SQLite数据库中,或者其他可以存数据的地方,Content providers是一个基本的方法集合来使其他的应用可以获得和存储这些数据,然而应用不直接调用这些方法,而是使用一个ContentResolver对象来调用这些方法,一个ContentResolver可以和任何的Content providers交流,他和provider协作来管理系统中任何进程间的通信。
无论何时一个请求都应该由一个特定的组件来处理,android系统来确保包含这个组件的应用进程运行,如果需要就启动它,如果需要就为这个组件创造一个实例,确保这个组件的一个适当的实例可以被得到。
2、启动组件:intent
当有一个来自于content resolver的请求指向Content provider时,content provider启动,其他的三个组件(Activity,service,broadcast receiver)是通过一个叫做intent的异步的消息来启动的,一个intent持有一个message的内容,对Activity和service来说,他是一个被要求的动作(action)和在该动作上的数据的URI,对broadcast receiver来说,intent对象是一个被广播的动作。
针对每种组件分别有对应的方法来启动它:
(1)一个 Activity是通过传递一个Intent对象到Context.startActivity()或者 Activity.startActivityForResult()来启动的(或者去做一些新的任务),被启动的这个Activity可以通过 getIntent()来获得导致他启动的那个intent的。
(2)一个service是通过传递一个Intent对象到 Context.startService()来启动的(或者给一些新的命令给正在运行的service),android调用service的 onStart()方法,并且把Intent对象传递给他,同样的,一个Intent可以传递到Context.
http://www.centoscn.com/mysql/2014/1211/4290.html ##login mysql -u root -p
1. linux下启动oracle su - oracle sqlplus /nolog conn /as sysdba startup exit lsnrctl start exit 2. linux下关闭oracle su - oracle sqlplus /nolog conn /as sysdba shutdown immediate exit lsnrctl stop exit 3、启动监听器 oracle@suse92:~> lsnrctl start 4、停止监听器 oracle@suse92:~> lsnrctl stop 5、查看监听器状态 oracle@suse92:~> lsnrctl LSNRCTL> status LSNRCTL> exit Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production Start Date 05-AUG-2016 01:42:49 Uptime 0 days 5 hr. 45 min. 44 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /data/oracle/product/11.
1.新建default.aspx页面 2.添加引用 首先在该页面的后台文件default.aspx.cs中添加引用。
using System.Web.Services; 3.调用后台无参方法 后台代码:
//【注意事项一】,要添加[WebMethod]特性 [WebMethod] //【注意事项二】,一定是静态方法 public static string GetResult() { return "guoguo"; } js代码:
$(document).ready(function () { $("#btnNoParameters").click(function () { $.ajax({ type: "Post", url: "default.aspx/GetResult", contentType: "application/json; charset=utf-8", dataType: "json",//表示后台返回的数据是json对象 success: function (data) { //由于dataType=json //系统会根据后台返回的数据returnValue自动生成一个key=d、value=returnValue的json对象 //此处的data是json对象 //我们就可以用data.d获取返回的数据 alert("data.d=" + data.d); }, error: function (error) { alert("error=" + error); } }); }); }); 运行结果: 4.调用后台含参方法 后台代码:
[WebMethod] public static double GetSum(string num1, string num2) { return double.
redis的备份和还原,借助了第三方的工具,redis-dump 1,安装redis-dump
[root@localhost tank]# yum install ruby rubygems ruby-devel //安装rubygems 以及相关包 [root@localhost tank]# gem sources -a http://ruby.taobao.org/ //源,加入淘宝,外面的源不能访问 http://ruby.taobao.org/ added to sources [root@localhost tank]# gem install redis-dump -V //安装redis-dump 2,redis-dump导出数据 [root@localhost tank]# telnet 127.0.0.1 6379 //telnet到redis Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. set test 11 //设置一个值 +OK get test //取值 $2 11 [root@localhost tank]# redis-dump -u 127.0.0.1:6379 >test.json //导出数据 3,redis-load还原数据 [root@localhost tank]# telnet 127.0.0.1 6379 //telnet到redis Trying 127.
fid=fopen('scr_new.txt','wt'); %新建一个txt文件 phns = ['src.txt']; %要读取的文档所在的路径 fpn = fopen (phns, 'rt'); %打开文档 while feof(fpn) ~= 1 %用于判断文件指针p在其所指的文件中的位置,如果到文件末,函数返回1,否则返回0 file = fgetl(fpn); %获取文档第一行 %%% new_str=file %中间这部分是对读取的字符串file进行任意处理 %%% fprintf(fid,'%s\n',new_str);%新的字符串写入当新建的txt文档中 end fclose(fid);
Mac下教你如何使用Github客户端开源项目(详细) 文章摘要
工作之余自己也会一写一些小的程序项目,由于一直没时间“折腾”开源,之前写博客都是直接粘代码片段,今天看别人写技术博客大都会放出项目Github地址,突然感觉自己有点点outandlow,作为一个励志成为“攻城狮”的人这绝对不能忍,决心网上学习Github的使用,这一查直接懵逼了,Windows上的教程一把一把的,Mac版的教程肿么少的可怜/(ㄒoㄒ)/~~还好自己折腾了大半天算是入门了,,,废话说的有点多了,,,现在小菜鸟会把详细过程一步一步分享给大家,避免小伙伴们走弯路。1、我们首先需要注册我们的Git 工作之余自己也会一写一些小的程序项目,由于一直没时间“折腾”开源,之前写博客都是直接粘代码片段,今天看别人写技术博客大都会放出项目Github地址,突然感觉自己有点点out and low,作为一个励志成为“攻城狮”的人这绝对不能忍,决心网上学习Github的使用,这一查直接懵逼了,Windows上的教程一把一把的,Mac版的教程肿么少的可怜/(ㄒoㄒ)/~~还好自己折腾了大半天算是入门了,,,废话说的有点多了,,,现在小菜鸟会把详细过程一步一步分享给大家,避免小伙伴们走弯路。
1、我们首先需要注册我们的Github账号
2、接下来我们需要下载安装Github客户端
3、注册完我们自己的Github登录进入会看到这个页面
创建项目.png
4、我们安装完Github Desktop客户端,按步骤来登录刚才注册的账号,会看到这个页面
Github desktop客户端.png
5、到目前为止我们的准备工作就已经做好了,接下来我们会学习一下怎么开源项目,怎么更新修改已有的项目。
6、在这里我创建一个空的iOS项目,命名为“Github_test”
新建项目.png
7、我们填上Github上的显示的项目名字,点击创建即可
创建Git项目.png
8、我们找到新创建的项目右键open in finder,将刚才新创建的工程全部copy到该文件夹中
本地项目.png
项目都copy进来.png
9、接下来我们会在Git的客户端中看的上传文件,根据下图提示填写内容并上传
上传项目.png
10、接下来我们刷新我们登录账号的Github网页就能看到我们上传的项目了
web查看项目.png
11、接下来我们学习更新Github上的项目,首先点击测试项目show in finder打开本地项目,打开工程修改代码,这里我修改了页面的背景色
更新的代码.png
12、接下来我们可以打开Github客户端查看修改内容
查看修改.png
13、接下来我们添加更新描述,点击左上角Sync就可以进行同步跟新到Github了
更新.png
14、之后我们进入Github网站查看我们的更新
进入项目.png
进入记录.png
项目上传记录.png
15、到现在为止我们已经学会了上传项目以及更新项目到Github了,接下来我们要学的东西对缓解强迫症有所帮助(^__^) ……删除我们的测试项目。
进入设置.png
进入设置页面翻到底
删除.png
复制黑体字粘贴后就可以点击删除
复制删除.png
到目前为止我们已经可以上传Github我们自己的项目了,也能对自己的的项目进行更新和删除了。
.so文件是什么? linux下的.so文件即Shared Libraries。Shared Library 是程序运行时加载的库文件。当一个shared library 被成功的安装以后,之后启动的所有程序都会自动使用最新的shared library。也就是说,生成一个.so文件并告诉编译器它的位置之后,所有的需要引入它的程序都可以同时调用它。
使用.so文件有以下这么几个好处:
升级库但是可以继续支持一些程序,这些程序想要使用较老版本的,或者不向后兼容的库。重写特定的库文件或者甚至可以在执行特定程序时,指定一个库文件的特定函数做以上这些的时候程序甚至可以正在使用着当前的库文件 每一个shared library都有一个soname、一个real name、一个linker name。
soname有一个前缀lib、自定义的短语、后跟一个.so、还有一个版本号。如:/usr/lib/libreadline.so.3
real name是一个soname的实体,在文件名中包涵了真实的库版本号。real name相比soname添加了一个句点,一个次要版本号,另一个句点,和一个发型版本号。最后一个句点和发行版本号是可选的。次要号码和发行号码支持配置控制,使别人可以明白安装的是哪个确切的版本。
linker name是没有任何版本号的soname。如/usr/lib/libreadline.so。
管理shared libraries的关键就是将这个文件名拆开。当程序内部列出它们需要的shared libraries时,仅仅需要列出soname即可。相反的,当创建一个shared library时,你只需要创建一个特定的文件名(包括详细的版本信息)即可。当你安装了一个新版本的库时,你只需将它安装在一小部分特殊的文件夹中的一个之中,然后运行程序ldconfig。lgconfig将会检查现存的文件,并且创建real name的soname和symbolic link,同时设置好春村文件。缓存文件位于/etc/ld.so.cache。
ldconfig并不设置linker name;通常这是在库安装时干的事,然后linker name作为指向最新soname或者realname的symbolic link被创建。
symbolic link(软连接)是自己指定的。名字如: /usr/lib/libreadline.so.3.0。
linker name就是一个与/usr/lib/libreadline.so.3相关联的symbolic link。
如果以上看不懂的话,是的我也没看懂,只是大体翻译了这篇文章
LD_LIBRARY_PATH 这个路径中的库文件将被在正常寻找前首先寻找。
注意事项 .so文件(也就是Shared Libraries)必须以lib开头,以.so结尾,比如:libalpha.so。(作为特例,一些最低级的C库并不是以lib开头的) 必须将自定义的文件加入到LD_LIBRARY_PATH中才能运行。 生成并测试.so文件。 aplusb.c
#include <iostream> #include "aplusb.h" using namespace std; int aPlusB(int a, int b) { int c = a + b; return c; } aplusb.h
#ifndef APLUSB_H__ #define APLUSB_H__ extern int aPlusB(int a, int b); #endif main.
根据签名获取hashCode的值的函数:
int checkAPP(Context context) { try { PackageInfo packageInfo = context.getPackageManager() .getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES); Signature[] signs = packageInfo.signatures; Signature sign = signs[0]; int hashcode = sign.hashCode(); Log.i("test", "hashCode : " + hashcode); return hashcode == -82892576 ? 1 : 0; } catch (Exception e) { e.printStackTrace(); } return -1; }
检查特定用户上次登录的时间:lastlog
命令所在路径:/usr/bin/lastlog
执行权限:所有的用户
语法:last -u [用户ID]
范例:
last -u 505
近日在使用qt 5.7.0 开发驱动的时候遇见问题。最基本的项目无法编译。
遇到cannot find -lGL 的问题。是因为缺少opengl的开发依赖包。
ubuntu 16.04 64bit
1.sudo apt-get install libgl1-mesa-dev
Fedora 24 64bit
1.sudo dnf install libGL-devel
再次编译就会解决基础编译不通过的问题。以上方法通用使用cent os / redhat / debian
错误代码 1045 Access denied for user ‘root’@’localhost’ (using password:YES)。以下是此类错误解决方法的汇总。仅为总结,如有异议,欢迎交流。 【Windows平台】解决办法是重新设置root用户密码,操作步骤如下: 1、以系统管理员身份登录到系统; 2、如果MySQL服务器正在运行,停止它。 如果是作为Windows服务运行的服务器,进入服务管理器:开始菜单->控制面板->管理工具->服务 如果服务器不是作为服务而运行的,可能需要使用任务管理器来强制停止它。 3、创建1个文本文件,并将下述命令置于单一行中: SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘MyNewPassword’); 用任意名称保存该文件。在本例中,该文件为C:mysql-init.txt。 4、进入DOS命令提示:开始菜单->运行-> cmd 假定你已将MySQL安装到C:mysql。如果你将MySQL安装到了另一位置,请对下述命令进行相应的调整。 在DOS命令提示符下,执行命令: C:> C:mysqlbinmysqld-nt –init-file=C:mysql-init.txt 在服务器启动时,执行由“–init-file”选项(作用:在启动时从指定的文件中读取SQL命令)命名的文件的内容,更改根用户密码。当服务器成功启动后,应删除C:mysql-init.txt。 5、停止MySQL服务器,然后在正常模式下重启它。如果以服务方式运行服务器,应从Windows服务窗口启动它。如果以手动方式启动了服务器,能够像正常情形下一样使用命令。 应能使用新密码进行连接。
// /etc/init.d/mysql stop // mysqld_safe –user=mysql –skip-grant-tables –skip-networking & // mysql -u root mysql mysql> UPDATE user SET Password=PASSWORD(‘newpassword’) where USER=’root’; mysql> FLUSH PRIVILEGES; mysql> quit // /etc/init.d/mysql restart // mysql -uroot -p Enter password: <输入新设的密码newpassword>
【Linux】错误原因可能如下: Red Hat Enterprise Linux 5服务器上mysql启动报错:ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
前几个星期,刚好有一个关于FAQ的需求,包含了搜索FAQ内容的需求,而在这之前在微信公众号的一片文章中提到了倒排索引的知识,感觉眼前一亮,于是就自己写了一个全文搜索引擎,目前只是实现了一些简单的功能;
索引的存储分为两级,第一级是在内存中的倒排索引,第二级是把倒排索引存放到MySQL中,在添加,修改和删除索引的同时也对MySQL中的数据进行操作,在搜索引擎启动时重建索引的过程只是从数据库中读出索引的数据,而不用根据Documents进行重建,加快重建的过程.
感兴趣的朋友可以看看:https://github.com/ThinkpadNC5/SearchEngine.git
前段时间在个人开发的项目中需要用到弹出菜单,类似QQ右上角的弹出菜单,自己使用popwin的次数也不是很多,其中也遇到过一点问题,今天正好有时间就把一些经验分享给大家。 先来看看最终实现过后的效果怎么样,下面放上图 自定义的弹出菜单是继承的popwin,并不是view 因为没有必要重复造车轮,如果想要实现某种特殊的效果另说。首先创建类MyPopWindow继承Popwindow。
public class MyPopWindow extends PopupWindow implements View.OnClickListener { private Context context; private View view; private LinearLayout scan; private LinearLayout add; public MyPopWindow(Context context) { this(context, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); } public MyPopWindow(Context context, int width, int height) { super(context); this.context = context; setWidth(width); setHeight(height); setFocusable(true); setOutsideTouchable(true); setTouchable(true); view = LayoutInflater.from(context).inflate(R.layout.layout_mypopwin,null); setContentView(view); scan = (LinearLayout) view.findViewById(R.id.scan); add = (LinearLayout) view.findViewById(R.id.add); } @Override public void onClick(View view) { switch (view.
Caused by: org.apache.ibatis.binding.BindingException: Parameter 'set' not found. Available parameters are [1, 0, param1, param2]
void insertData(@Param("id")String id, @Param("set")String set);
或者
public List<PagaData> getAllList(Set<String> set);
改SQL:
sql中的参数用 #{0},#{1}代替即可
在抓取网页内容时Jsoup无疑是个很好的工具,但最近在做一个抓取blog内容的app时,发现抓取下来的代码块部分的换行符消失了,这样代码几乎就没法看了。 Google了一波,得知可以通过以下方式阻止Jsoup对html字符串中换行符的处理:
Document doc = Jsoup.parse(source); doc.outputSettings(newDocument.OutputSettings().prettyPrint(false));
项目程序包默认放在tomcat的webapps文件下;
webapps里面默认有这几个文件;
项目程序包也可以不放在webapps里面,需要在tomcat下的conf文件里面去设置;
在conf里面的server.xml里面找到host节点;
看错误日志:
先看时间,然后找到项目包的名称;
项目包名称规则,在tomcat/WEB-INF/classes/com;com往后面三层路径,把/换成.就是项目包名了;项目包名:com.yougou.bi
1、tinyint(一个字节)是-128(-2^7)到(2^7-1)127,如果是unsigned(无符号型),则是0——255;
tinyint(1)是指定显示长度,并不表示存储长度,只有字段指定zerofill时有用;
如int(3),如果实际值是2,如果列指定了zerofill,查询结果就是002,左边用来填充;
intyint[(M)] [unsigned] [zerofill]
2、smallint(2个字节) 从-2^15(-32,768)到2^15-1(32,767),unsigned时范围为:0——2^16-1(65535),所以smallint最大有5位数,smallint(100)还是显示5位数;
3、int从-2^31到2^31-1,存储字节为4个字节,最大为10位,int(10);
4、bigint从-2^63到2^63-1,存储大小为8个字节,最大为20位,bigint(20);
转载于:https://www.cnblogs.com/xiaodanCZ/p/5665993.html
演示效果:http://www.jq22.com/yanshi4800
原文出自以上地址,我根据实例内的代码修改了一下。
一、构建html 实例内有5层需要移动的图片,需要使用绝对定位,并用z-index排列好层次,一定要有style=”z-index”属性。
<ul id="mousemove"> <li class="pic-zaijian" style="z-index: 3;"><img src="images/5644025cN28d8a58c.png" alt="" /></li> <li class="pic-yhao" style="z-index: 2;"><img src="images/5644025cN8cd82f47.png" alt="" /></li> <li class="pic-11y" style="z-index: 4;"><img src="images/56440ff7N8104ff46.png" alt="" /></li> <li class="pic-joy" style="z-index: 5;"><img src="images/5644369dN2177d534.png" alt="" /></li> <li class="pic-light" style="z-index: 6;"><img src="images/564409feN8fc5ae9f.png" alt="" /></li> </ul> 二、编写css样式 根据你的实际需要写好css样式,把各个图片都定好位,使用绝对定位absolute。
三、编写js代码 关键的js代码部分
<script> function ScrollBG () { //定义滚动背景容器变量 var oUl = document.getElementById('mousemove'), oLi = oUl.getElementsByTagName('li'), //获取当前窗口的尺寸并改变其中心为原点坐标,也可以改为仅获取指定层的坐标:oUl.offsetWidth x = document.body.offsetWidth/2, y = document.body.offsetHeight/2; //设置当前窗口内的鼠标移动事件,也可以改为仅作用于指定层:oUl.onmousemove document.body.onmousemove = function (event) { //获取鼠标在当前窗口内的坐标值,也可以改为获取指定层的坐标:event.
配置springmvc的时候,出现这个错误,原因是:我赋值了类中的方法,结果没有
改@RequestMapping(名称)这里,修改即可。
在springmvc中不能同时映射一个名字(@RequestMapping("/***"))
Int转Character:
Character类没有以Int作为参数的初始化方法,但Character能通过UnicodeScalar类型来初始化,而UnicodeScalar类型又能通过Int类型来初始化。
//Int转Character代码 //number是一个整数 var number = 65 //转换成character字符 var character = Character(UnicodeScalar(number)) Character转Int
相比之下,Character转Int稍微复杂,没有任何现成的函数可用。只能把Character变量转为String类型,再利用循环取出String里面的唯一一个字符的Unicode编码,最后转为整数。
//Character转Int代码 //characterB是一个Character变量 var characterB:Character = "B" //numberFromB用于接收转换后的整数,先暂时初始化为0 var numberFromB = 0 //使用for-in循环遍历转化成String的“B” for scalar in String(characterB).unicodeScalars { //字符串只有一个字符,这个循环只会执行1次 numberFromB = Int(scalar.value) } //最后得到numberFromB=66 但是如果需要频繁将Character转成Int,上述代码使用起来未免太麻烦。一个比较好的做法是把上述运算写成Character类型的一个扩展方法,方便以后直接调用。
//Character扩展代码 extension Character { func toInt() -> Int { var intFromCharacter:Int = 0 for scalar in String(self).unicodeScalars { intFromCharacter = Int(scalar.value) } return intFromCharacter } } //以后可以直接对Character变量调用toInt()方法
var characterB:Character = "
我们可能经常用到配置文件ini文件来获取或者保存参数信息,在VC中其函数中主要用到的有: 读取 读取字符 DWORD GetPrivateProfileString(
LPCTSTR lpAppName, // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName, // lpAppName 下的一个键名,也就是里面具体的变量名
LPCTSTR lpDefault, // 如果lpReturnedString为空,则把个变量赋给lpReturnedString
LPTSTR lpReturnedString, // 存放键值的指针变量,用于接收INI文件中键值(数据)的接收缓冲区
DWORD nSize, // lpReturnedString的缓冲区大小
LPCTSTR lpFileName // INI文件的路径
);
读取整型值 (返回值为读到的整) UINT GetPrivateProfileInt(
LPCTSTR lpAppName, // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName, // lpAppName 下的一个键名,也就是里面具体的变量名
INT nDefault, // 如果没有找到指定的数据返回,则把个变量值赋给返回值
LPCTSTR lpFileName // INI文件的路径
);
写入 写入字符 BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName, // lpAppName 下的一个键名,也就是里面具体的变量名
LPCTSTR lpString, // 键值,也就是数据
@Autowired注解的作用是解决对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
例如:
我们编写Spring框架代码的时候,一直循环这样一个规则:所有在Spring中注入的bean都建议定义成私有变量,
并且要配套上get和set方法,那么,通过 @Autowired的使用来消除 set ,get方法。当然方法上加上此注解也是可以的,
@Autowired 将寻找与之匹配的bean来创建(类名)bena.
@Override是伪代码,表示重写(当然不写也可以),不过也有好处:
1、可以当注释用,方便阅读; 2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。 例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,
因为编译器以为这个方法是你的子类中自己增加的方法。
举例:在重写父类的onCreate时,在方法前面加上@Override 系统可以帮你检查方法的正确性。 @Override public void onCreate(Bundle savedInstanceState) {…….} 这种写法是正确的,如果你写成: @Override public void oncreate(Bundle savedInstanceState) {…….} 编译器会报如下错误: The method oncreate(Bundle) of type HelloWorld must override or implement a supertype method, 以确保你正确重写onCreate方法(因为oncreate应该为onCreate)。 而如果你不加@Override,则编译器将不会检测出错误,而是会认为你为子类定义了一个新方法:oncreate
如果票选近二十年最伟大的发明,我相信搜索引擎肯定会占据一个不容小觑的位置,它不单是一项发明,更是一项成就,最大程度消灭了信息的不平等。既然人人都可以接触到海量的信息,那么衡量信息财富多寡就只剩下技巧这惟一的标准了:善用搜索引擎的都是信息时代的富翁,不懂搜索引擎的都是信息时代的负翁。
而像程序员这种必须终生学习的职业,搜索引擎就是我们的左膀右臂。懂搜索引擎就是我们的基本功,不,应该是童子功。只是大部分新手都在过分粗放的使用搜索引擎,而花几分钟时间了解搜索引擎的技巧和语法,就能让自己的信息财富来一个大跃进,不也是一笔划算的买卖么。
而对于技术类问题的检索,谷歌的表现水准无疑要甩百度几条街;所以善用搜索引擎的第一条原则必然是:一如既往毫不犹豫百折不挠的使用Google。而对于一名程序员来说,保证自己随时随地能访问Google,是最最基本的技能,哪怕花费少许金钱也是物超所值。那么以下就撇开百度、专门讲讲使用Google的小贴士。 完整匹配 在Google的输入框里,所有的空格都被理解为加号。如果你输入的是mysql foreign key,那么返回的搜索结果里也许既有mysql存在,也有foreign key存在,但不一定有mysql foreign key存在。另外,过分常用的、单独存在没有意义的词汇往往被忽略掉,比如the/a/that等等。
如果你想要找含有mysql foreign key这个词组的文章,那么你必须在搜索词前后加上引号,输入"mysql foreign key",不管你输入的时候使用的是全角字符(“或者”)还是半角字符("),Google都照样能够正确处理。这就是引号的作用:返回完整匹配的结果。
排除匹配 为了进一步筛选搜索结果,还需要学会另外一个符号 — 减号(-)。比如,"mysql foreign key" - "nodejs"就要求Google返回含有mysql foreign key但不存在nodejs的文章。
通配符 另外一个程序员耳熟能详的符号是正则里最常露脸的星号,看到星号就下意识的想到通配符,在Google的搜索规则中也是如此,输入"mysql connect error *"就会返回所有已知的关于MySQL连接错误的文章。
站内搜索 最后推荐一个威力无穷的语法,让你有机会再对搜索结果做一次筛选。比如针对程序员查bug,stackoverflow是我个人觉得可信度最高也最全面的一个网站,所以我就经常使用site的魔法,像"mysql foreign key" site:stackoverflow.com就会返回对应网站内所有关于mysql foreign key的文章。
语言和日期 像2shou叔这种英语阅读能力不过关的人,遇到急事就不能一篇篇翻原版文档了,不得不求助国内的二手货;这时,Google界面上的一个小按钮就帮上大忙了:点击搜索工具 - 不限语言,下拉选择所有简体中文网页,一下子就回到了祖国母亲的怀抱。有时用新出的库版本,别忘了隔壁那个不限日期按钮,可以帮你找到最最新鲜的技术文章。
Tab,以及宅男福利 只限Chrome的一招:输入某个网址,再点击Tab,会能直接使用这个站点的站内搜索了,比别人快个几秒,关键时刻也很管用不是么。
最后留个福利吧,曾经被人偷偷问过,谷歌的安全搜索怎么关闭;网上有一些繁复的攻略,对我们程序员,搜索网址加个参数:&safe=off,一招就可日天。
一、基本概念 模型选择主要有两个思路:
1.解释性框架
在已有数据下,重点关注哪些变量是模型的重要变量,模型的形式应该怎样。好的模型应该是最能解释现有数据的模型。
2.预测性框架
重点关注哪些变量是模型的潜在变量以及模型的可能形式。好的模型应该是最能预测结果的模型。
AIC: Akaike information criterion,赤池信息量。
BIC:Bayesian information criterion,贝叶斯信息度量,也叫 SIC, SBC, SC,SBIC。
在选择模型来预测推理时时默认了一个假设,即给定数据下存在一个最佳的模型,且该模型可以通过已有数据估计出来,根据某个选择标准选择出来的模型,用它所做的推理应该是最合理的。这个选择标准就可以是AIC和BIC。没有模型的选择的绝对标准,好的选择标准应该根据数据分布不同而不同,并且要能融入到统计推理的框架中去。
AIC:基于Kullback-Leibler (K-L)信息损失的,provides an asymptotically unbiased estimator of the expected Kullback discrepancy between the generating model and the fitted approximating model [ 1 ] ^{[1]} [1]。
BIC:基于贝叶斯因子。
定义式为:
A I C = 2 l n ( f ( y ∣ θ k ) ) − 2 K AIC =2 ln(f (y| θ _k)) - 2K AIC=2ln(f(y∣θk))−2K。选择模型时选择AIC最大的模型。
前段时间android项目中用到一个可以滑动的数量可变的导航栏,在网上也没找到合适的替代品,所以就自定义了个该控件,在此分享一下该控件,给有需要的人。
首先,来看看我们要实现的效果是什么样的。
上图就是我们要实现的最终效果图了,下面就说一下实现的过程。
考虑到能支持横向滑动,android提供的横向滑动的控件我选择了HorizontalScrollView作为基类,当然横向的ListView也是可以的,废话不多说先上代码。
public class CustomHorizontalScrollview extends HorizontalScrollView { Context context; int prevIndex = 0; public CenterLockHorizontalScrollview(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; this.setSmoothScrollingEnabled(true); } public void setAdapter(Context context, CustomListAdapter mAdapter) { try { fillViewWithAdapter(mAdapter); } catch (ZeroChildException e) { e.printStackTrace(); } } public void fillViewWithAdapter(CustomListAdapter mAdapter) throws ZeroChildException { if (getChildCount() == 0) { throw new ZeroChildException( "CenterLockHorizontalScrollView must have one child"); } if (getChildCount() == 0 || mAdapter == null) return; ViewGroup parent = (ViewGroup) getChildAt(0); parent.
删除一个表中的部分数据,数据量百万级。
一般delete from 表 delete from ysh where date<’2016-06-21’ ; 此操作可能导致,删除操作执行的时间长;日志文件急速增长;
针对此情况处理 delete top from
declare @onecount int set @onecount=1000000 print getdate() while 1=1 begin delete top(@onecount) from ysh where date<'2016-06-21' ; //此处不能写任何语句 print也可能导致无法全部删除 IF (@@rowcount<@onecount) BREAK; print getdate() end 说明 :@onecount 每次删除的数据量,此处设置100w,可根据实际情况调整。
此操作删除时间快,以及生成的日志量少。
HTML基本语法
HTML的构造非常简单,组成HTML语法的元素只有HTML标签与HTML属性.
HTML文档(页面)[国家]--->HTML元素[家庭]--->HTML标签[重要成员,男人女人]--->HTML属性[其它成员,比如孩子]
1.HTML的标签
HTML标签是HTML语言中最基本的单位,HTML标签是HTML语言最重要的组成部分.
通常要用两个角括号括起来:<和>.都是闭合的(闭合就是标签的最后要有一个/,来标示结束.),但不一定是成对出现的,比如<body>和</body>一对标签.(<body>是开始标签,</body>是结束标签,在开始和结束标签中可以有内容),比如<br />就是单独的.(注意要在最后加上/,以标示其是独立的)标签是大小写无关的,<body>跟<BODY>表示的意思是一样的.标准推荐使用小写. HTML标签语法 HTML标签(两种形式,成对与不成对):
<标签名>内容</标签名> <标签名 /> 示例 <table> </table> 表格的开始标签与结束标签
<br /> 单独出现的换行标签
常用HTML标签 html标签 -- 定义HTML文档.body标签 -- 定义HTML文档的内容.p标签 -- 定义段落.h1-h6标签 -- 定义标题.html注释 -- 定义注释内容. 2.HTML属性
HTML属性 -- 一般都出现在HTML标签中, HTML属性是HTML标签的一部分 标签可以有属性,它包含了额外的信息.属性的值一定要在双引号中标签可以拥有多个属性属性由属性名和值成对出现 HTML属性语法 <标签名 属性名1="属性值" 属性名2="属性值" ... 属性名N="属性值"></标签名> 示例 <a href="http://www.baidu.com/"> 标签<a>是超链接标签.使用href属性,可以定义链接的位置(URI)代码:
<table summary="html table" border="0"> 标签<table>是表格标签.使用border属性,定义没有边框的表格.使用summary属性定义表格的简短描述
3.HTML元素
HTML元素是构建网页的一种单位,是由HTML标签和HTML属性组成的,HTML元素也是网页中的一种基本单位.
示例 <a href="http://www.cnblogs.com/JSWBK"> 尽情学习 </a> 这是一个HTML链接元素.
<p>这是我的第一个网页,在这里 <a href= "http://www.cnblogs.com/JSWBK"> 尽情学习 </a>吧!</p> 这是一个HTML段落元素,它包含了一个HTML链接元素.
4. HTML文档
在windows下使用gcc编译jni的简单教程 发表于2012 年 07 月 29 日由admin
来源于: http://veikr.com/201207/windows_gcc_jni.html
1、安装MinGW,这个可以为windows提供gcc编译环境。
到http://sourceforge.net/projects/mingw/files/ 下载,是.exe的,在线安装,但很快。安装时选c compiler就行了,也可以把c++的也装了。安装完成后,为了方便使用最好配置一下环境变量。把MinGW/bin目录加入环境变量。
2、编写JAVA文件。
写个最简单的: public class Test {
static{ System.loadLibrary("lib"); //这是DLL文件名,不要后缀 } static native void print(int a); public static void main (String args[]) { print(3); } } 然后编译java文件 javac Test.java
3、生成.h头文件。
javah Test
就这一个简单的命令就行了。(如果有包名,需要类似javah com.google.Test这样,注意命令行目录)
4、实现.c文件。
.h生成后可以打开看一下,里面有个方法是需要自己实现的。如下:
JNIEXPORT void JNICALL Java_Test_print (JNIEnv *, jclass, jint); 这个就是我们java里写的print方法了。
这里简单说一下c的方法名命名规则是 Java_packagename_Classname_method
要实现的就是这个方法了。
#include <stdio.h> #include <jni.h> #include "Test.h" JNIEXPORT void JNICALL Java_Test_print(JNIEnv *env, jclass jthiz,jint a){ printf("
安卓实现TextView后面跟随一个高度和宽度固定的ImageView(不要问我为什么不直接用drawableRight,因为宽高不好控制) TextView只为1行,即singleLine为true,宽度不定,要求TextView和ImageView站在同一排。
如图: 直接上代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="16dp" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=" 安卓实现TextView后面跟随一个高度和宽度固定的ImageView(不要问我为什么不直接用drawableRight,因为宽高不好控制)\n TextView只为1行,即singleLine为true,宽度不定,要求TextView和ImageView站在同一排。" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:singleLine="true" android:text="1234567890123456789012345678901234567890123456789012345678901234567890" /> <ImageView android:layout_width="16dp" android:layout_height="16dp" android:src="@drawable/ic_global_list_lable_groupon" /> </LinearLayout> </LinearLayout> Linearlayout里面的weight其实很好用,但是有朋友可能会想着,为什么只给TextView加weight属性,为什么不给ImageView加。weight是权重的意思,给组件加了该属性之后,该组件就会与其他的同级组件比较权重,然后再布局。闲的无聊的可以去试试把ImageView加weight,或者把TextView的weight取消试试效果。
使用记事本编写Java程序
xxx.java 编译器 compiler(使用javac命令 ,如javac HelloWorld.java) xxx.class 解释器 interpreter(使用Java命令,如 java HelloWorld) my Program
最近一段时间在使用spring boot开发项目,其中有一个项目用到了多数据源的配置,网上的资料还是不太多,走了好多才找到一个合适的,把自己写的分享一下,做个笔记,以后也许有用,第一次写博客,不好勿喷!!
首先介绍下我的业务场景,此项目用到了两种数据库,一个是mysql,另一个是sqlserver,
首先第一步需要在application.yml中将多数据源的配置信息进行配置,
mysql数据源:
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.28.230:3306/****?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
username: ****
password: ****
sqlserver数据源配置 custom:
datasource:
names: ds1
ds1:
driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://ip:1433;databaseName=数据库名称
username: ****
password: ****
第二步编写数据源的配置和加载类:
SQLserver数据源 @Configuration
@MapperScan(basePackages = RdsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "rdsSessionFactory")
public class RdsDataSourceConfig {
static final String PACKAGE = "com.jyall.ehr.kaoqin"; //本项目中用的是mybatis,此路径为扫描的mapper的包结构
@Value("${custom.datasource.ds1.url}") //第一步中配置文件中的数据库配置信息
private String dbUrl;
@Value("${custom.datasource.ds1.username}")//同理为配置文件中信息
private String dbUser;
@Value("${custom.datasource.ds1.password}")//同理为配置文件信息
private String dbPassword;
@Bean(name = "rdsDatasource")
public DataSource rdsDataSource() {
AspNet_Exts=txt就能把你指定的扩展名交给asp.net处理。
同理,可以写很多个,AspNet_Exts=txt,htm,html 转载于:https://www.cnblogs.com/RainbowInTheSky/p/5577620.html
这个错误是我在设置一个类为启动项,调试它的时候出现的。
解决办法是右键选择这个类的属性,修改 调试-启动外部程序 将目录指向你可以运行的exe即可。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.action.extension" value="action,do,,"/><!-- 执行的拓展 --> <constant name="struts.configuration.xml.reload" value="true"/><!-- xml配置自动重载 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"/><!-- 感叹号、冒号可以使用 --> <constant name="struts.multipart.maxSize" value="10240000"></constant> <!-- 表示Action由Spring来进行创建,可以直接使用Spring依赖注入来注入 --> <constant name="struts.objectFactory" value="spring" /> <!-- <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> --> <package name="default" namespace="/" extends="struts-default"> <strong><span style="color:#FF0000;"><!-- 权限拦截器 --> <interceptors> <interceptor name="authInterceptor" class="authInterceptor"/> <interceptor-stack name="authStack"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="authInterceptor"/> </interceptor-stack> </interceptors></span></strong> <!-- 全局结果集 就是公共的结果集,所有Action只要找到相应的返回值,就会来相应的全局结果集找结果--> <global-results> <result name="
在应用中,常常有要将用户的密码加密储存的需要。
以明文保存密码有个缺点:一旦泄漏时容易造成极大的损失,可能会连带其他网站的用户、密码也造成损失(因为大多数用户在多数网站使用相同的账号与密码)。
这个泄漏可能来自于两方面:骇客入侵与运维人员监守自盗。
为了防止在密码明文泄漏,我们需要对在数据库中保存的密码字段进行不可逆加密。准确地说,是加密以后再保存到数据库中。
常用的不可逆加密算法有MD5与SHA-1。
在NodeJS中,它们的使用极为简便,直接使用官方内建的 crypto 包即可:
var clearText = '123456'; // MD5 Hash require('crypto').createHash('md5').update(clearText).digest('hex'); // 'e10adc3949ba59abbe56e057f20f883e' // SHA-1 Hash require('crypto').createHash('sha1').update(clearText).digest('hex'); // '7c4a8d09ca3762af61e59520943dc26494f8941b' 当用户注册时,将用户提交的密码先不可逆加密,然后将密文保存在数据库内。
当用户登录时,将用户提交的密码先以相同方式加密,然后与数据库中的密文比对,来判断密码的正误。
理论上有无数个密码对应同一个Hash值,不过不用过于担心被撞表的风险,因为相比之下,你的Web服务器与数据库可能会在泛洪攻击中先行崩溃。
有时候,在项目开发过程中,版本的发布可能会一直持续,在版本发布的过程中,可能用户更新的步调不一致导致在某个特定版本上,用户出现问题。当需要版本追溯时,如果版本中存在tag,则可以直接定位到版本,并确认问题是否存在。
可以通过
git tag查看目前有哪些tag,因为tag的命名或者标注通常都会使用版本号信息。如果想看某个标签的具体信 息,可以使用
git show tag-name 如果看到我们想要的版本号tag,则可以直接使用
git checkout tag-name 将工程定位到相应的tag处。
那么如果进行打tag和提交呢?
git tag -a V-1.02.003 -m “v-1.02.003 xxx” 通常情况下,我们会使用上面的方法为当前版本添加附注
提交可以有两种方式,单独提交本次tag
git push origin V-1.02.003 提交所有的tags
git push –tags 另外,如果想为之前的提交提交tag,可以使用
git tag -a V-0.02.005 commit-id
gg=G
转载于:https://www.cnblogs.com/Alex0111/p/5554085.html
SlickGrid 是一个JavaScript编写的数据控件,其采用数据虚拟显示的特性备受后来的Grid推崇,如ExtJS DataGrid,其架构设计优秀,UI交互功能非常丰富,插件化的可扩展功能开发非常值得Web开发人员学习
SlickGrid简单介绍 : https://github.com/mleibman/SlickGrid/wiki
快速入门 : https://github.com/mleibman/SlickGrid/wiki/Getting-Started
使用示例 : https://github.com/mleibman/SlickGrid/wiki/Examples
API文档: https://github.com/mleibman/SlickGrid/wiki/API-Reference
处理选择模式: https://github.com/mleibman/SlickGrid/wiki/Handling-selection
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>SlickGrid example 1: Basic grid</title> <link rel="stylesheet" href="./css/slick.grid-2.1.0.css" type="text/css" /> <link rel="stylesheet" href="./css/jquery-ui-1.8.16.custom.css" type="text/css" /> <!-- <link rel="stylesheet" href="../css/examples.css" type="text/css" /> --> </head> <body> <table width="100%"> <tr> <td valign="top" width="50%"> <div id="myGrid" style="width:600px;height:500px;"></div> </td> <td valign="top"> <h2>Demonstrates:</h2> <ul> <li>basic grid with minimal configuration</li> </ul> </td> </tr> </table> <script src="
在Linux下,使用iptables来维护IP规则表。要封停或者是解封IP,其实就是在IP规则表添加规则。
要禁止指定IP地址的网络连接,可以使用以下两种方法来快速实现。
1.禁止特定IP的连接 要禁止一个IP,使用下面这条命令: iptables -I INPUT -s ***.***.***.*** -j DROP
要解封一个IP,使用下面这条命令: iptables -D INPUT -s ***.***.***.*** -j DROP
参数-I是表示 Insert (添加),-D表示 Delete (删除)。后面跟的是规则, INPUT 表示入站,***.***.***.*** 表示要封停的IP, DROP 表示放弃连接。
可以使用下面的命令来查看当前的IP规则表: iptables -list
wsliu@qcloud:~$ sudo iptables -L [sudo] password for wsliu: Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 120.203.229.36 anywhere DROP all -- 117.169.67.5 anywhere DROP all -- 103.52.217.131 anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination 2.
我的问题是突然要做其他项目且jdk用的不一样,所以我的jdk从32位换到64位,结果出现提示:内存不足
解决的办法如下:
在File-》setting设置中可以看到,将其中的heap size设置大点就行了
由于开发需要,有时我们需要能够远程访问链接数据库。默认mysql设置关闭了远程访问。我们可以通过修改设置来达到目的
$ cd /etc/mysql $ sudo vim my.cnf 在文件中将bind-address = 127.0.0.1注释掉(即在行首加#) 旧版本的MySQL(从一些资料上显示是5.0及其以前的版本)上使用的是skip-networking。 创建一个mysql用户,并设置可以远程访问
grant usage on *.* to 'fred'@'localhost' identified by 'fred';//创建用户fred密码ferd select host,user,password from mysql.user where user='fred';//查看记录 grant all privileges on *.* to fred@'%'identified by 'fred';//设置可以远程访问 创建一个mysql用户,并设置可以远程访问 grant usage on *.* to 'fred'@'localhost' identified by 'fred';//创建用户fred密码ferd select host,user,password from mysql.user where user='fred';//查看记录 grant all privileges on *.* to fred@'%'identified by 'fred';//设置可以远程访问
//将时间转化成时间戳 function transdate(time){ var date=new Date(); date.setFullYear(time.substring(0,4)); date.setMonth(time.substring(5,7)-1); date.setDate(time.substring(8,10)); return Date.parse(date); } //验证起始时间 function checkTime(start, end){ start = transdate(start); end = transdate(end); if(start > end) { alert('开始时间不能大于截止时间'); return false; } return true; } //表单验证 function verifyForm(){ var start = $("#start_time").val(); var end = $("#end_time").val(); if(start!='' && end!='' &&!checkTime(start, end) ){ return false; } return true; } //根据年月获取当月天数 function getDaysInMonth(year,month) { month = parseInt(month,10); var temp = new Date(year,month,0); return temp.
今天小测安装了vm,使用unzip的时候,提示用不了,结果蒙逼。。。,还是问度娘,发现没有安装unzip软件,具体步骤如下:
#yum list | grep zip/unzip #yum install zip
#yum install unzip
基本完成,如果在编译的时候出现错误:gcc : error trying to exec 'cc1plus': execvp : No sunch file or directory
可以用gcc -v/g++ -v 来查看gcc 版本,会发现没有安装。安装如下:
#yum list | grep gcc
#yum install gcc-c++
#yum install unzip
fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把 缓冲区内最后剩余的数据输出到内核缓冲区,并释放 文件指针和有关的缓冲区。 函数原型:int fclose( FILE *fp ); 返回值:如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。(如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。)
int fclose(FILE *stream)
1 2 3 4 5 6 7 8 9 10 11 12 #include<string.h> #include<stdio.h> int main( void ) { FILE *fp = NULL; const char *buf = "0123456789" ; fp = fopen ( "DUMMY.FIL" , "w" ); /*创建一个包含10个字节的文件*/ fwrite (buf, strlen (buf),1,fp); /*将buf内容写入到文件中*/ fclose (fp); /*关闭文件*/ fp = NULL; return 0; } 可在fclose(fp)后使用 if(fclose()) { perror("