KMP算法
KMP算法是BF算法的改进算法, 当匹配过程中有不匹配项时,在BF算法中,主串直接回溯到i+1,而模式回溯到第一个字符上重新匹配。KMP算法中,匹配失败时,主串指针i不变,模式指针j回退到next[j]重新进行匹配,当j指针回退到0时,指针i和指针j同时自增1。next中的值是模式的真前缀和真后缀相等的最大字串长度。
KMP算法C++实现:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include<iostream>using namespace std;void getNext(char T[], int next[]) { int i,j,len; next[0] = -1; for(j = 1; T[j] != '\0'; j ++) { for(len = j - 1; len >= 1; len --) { ...
BF串匹配算法
BF算法比较简单粗暴,属于蛮力法 原理也比较简单,将主串与模式从第一个字符依次开始匹配,知道完全匹配上或者主串结束,因此最坏情况下时间复杂度为O(m*n)
C++描述:
12345678910111213141516171819202122232425262728293031#include<iostream>using namespace std;int BF(char S[], char T[]) { int index = 0, i = 0, j = 0; //当主串或者模式都未到达最末尾时候循环 while(S[i] != '\0' && T[j] != '\0') { if(S[i] == T[j]) { i ++; j ++; } else { index ++; i = index; j = 0 ...
JVM类加载机制
JVM类加载机制JVM类加载机制分为五个部分:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)。然后 使用(Using)、卸载(Unloading)。其中验证、准备和解析统称为连接(Linking)
加载(Loading)加载是第一个阶段,这个阶段会在内存中生成这个类的java.lang.Class对象,最为方法区这个类的各种数据的入口。这里并不一定要从class文件中获取,也可以从zip包中读取(jar、war)、运行时生成(动态代理)。
连接(Linking)验证(Verification)这一阶段的主要目的是确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机的安全。不同虚拟机对这个阶段的实现可能不同,大致上分为一下四个阶段的校验过程:
文件格式验证。验证字节流是否符合class文件格式规范,并且是否能被当前虚拟机所处理
元数据验证。对字节码描述信息进行语义分析,保证其描述的信息符合java语言的规范
字节码验证。也是最复杂的一个阶段,主要对数 ...
git命令备忘
基本配置12git config --global user.namegit config --global user.email
创建本地仓库1git init
获取远程仓库1git clone <url>
创建远程仓库1234567891011# 添加新的远程仓库git remote add <name> <url># 查看所有remotegit remote [-v]# 删除remotegit remote rm <name># 重命名 remotegit remote rename <old> <new>
分支123456789101112131415161718192021# 列出分支git branch# 创建新分支git branch <branch-name># 删除分支git branch -d <branch-name># 删除remote分支git push --delete <remote-name> <remote-branch> ...
java中Thread和Runnable实现多线程的区别
java中实现多线程有两种方法:继承Thread类和实现Runnable接口。
一个类如果继承Thread,则不适合资源共享,但是如果实现Runnable接口,则很容易实现资源共享。在程序开发中永远以实现Runnable接口为主。
实现Runnable接口和继承Thread相比,有如下优势:
避免java单继承带来的局限性。
增加程序健壮性,代码能被多个线程共享,代码和数据独立
适合多个相同的程序代码去处理同一个资源
线程池中只能放入实现Runnable和Callable类的线程,不能直接放入继承Thread的类
首先通过继承Thread类的实现:
12345678910111213141516171819202122package com.thread;public class ThreadImplByThread { public static void main(String[] args) { new MyThread().start(); new MyThread().start(); new MyThread().start(); } ...
求子集问题
问题描述:给定一个集合,求其所有子集。
解法思路:一个长度为n的集合,共有2^n个子集,每一种可能都用二进制表示,相应的二进制数的0和1对应相应的元素不存在/存在,问题解决。
C++实现:
1234567891011121314151617181920212223242526272829303132333435363738394041#include<iostream>#include "math.h"using namespace std;//用二进制表示元素的存在/不存在void findSubset(int r[], int n) { //子集个数 int p = (int) pow(2 ,n); //元素下标 int i = 0; while(p != 0) { int j = p; //该种情况下的集合 while(j != 0) { int m = j % 2; //余数为1存在 ...
由两个栈组成的队列
思路:设计两个栈,一个栈作为压入栈,另一个作为弹出栈。
压入栈向弹出栈压入数据的时候,必须一次性全部压入
如果弹出栈不为空,绝对不能向弹出栈中压入数据
如果两个栈都为空,则队列就为空
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364import java.util.Stack;public class TwoStackQueue { private Stack<Integer> stackPush; private Stack<Integer> stackPop; public static void main(String[] args) { TwoStackQueue twoStackQueue = new TwoStackQueue(); twoStackQueue.add(1); ...
一个有getMin功能的栈
思路:设计两个栈,一个和正常功能的栈没有区别,另一个保存每一步的最小值,每次弹出时,两个栈同时弹出,这样保证每步都保存了剩余元素的最小值。
java实现代码如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162import java.util.Stack;public class MyStack1 { private Stack<Integer> stackData; private Stack<Integer> stackMin; public MyStack1() { stackData = new Stack<>(); stackMin = new Stack<>(); } public static void main(String[] args) { ...
NFC模拟门禁卡
首先必须支持NFC,而且必须root,system有读写权限测试机型:小米5先安装类似 NFC TagInfo 软件读取出卡的ID,假设卡的ID为 1f,ef,ff,4d 修改/etc/下的libnfc-nxp.conf文件(可能有的手机不是在这个目录下,可全局搜索nfc),找到下面这段:
NXP_CORE_CONF={20, 02, 27, 0E, 18, 01, 01, 21, 01, 00, 28, 01, 00, 30, 01, 04, 31, 01, 00, 32, 01, 60, 33, 00, 50, 01, 02, 54, 01, 06, 5B, 01, 00, 60, 01, 0E, 80, 01, 01, 81, 01, 01, 82, 01, 0E }
将第一行括号里 ...
初识WebService
WebService,一句话来说就是跨编程语言和操作系统的交互技术,实现了异构平台之间的交互,基于HTTP使用SOAP协议 JAVA自身也提供了一个WebService的实现:JAX-WS(Java API Xml For Web Service) 简单实例: 首先创建一个接口
1234567891011package org.test.service;import javax.jws.WebService;@WebServicepublic interface TestService { public int max(int a,int b); public int min(int a,int b);}
创建它的实现类:
12345678910111213141516171819package org.test.service;import javax.jws.WebService;@WebService(endpointInterface = "org.test.service.TestService")public cl ...






