目的:人在穿戴手表的时候,通过6轴传感器采集到三个方向的加速度acc和角速度gyro,以此检测人体的运动状态,是处于静止(坐着)、走路或跑步状态。

方法2:传统处理方法
数据集:20-30人
准确度:0.99
具体步骤:
1.使用低通滤波去噪,获得平滑的曲线
2.寻找所有的波峰波谷,修正波峰波谷
3.计算相邻的距离和高度,判断是否走路

备注:目前仅用了a0的信号数据

效果图:

静止样例1

静止样例2

运动样例1

运动样例2

信号滤波+寻找波峰波谷:

import numpy as np
import cv2
import os
import math
from scipy import signal
import matplotlib.pyplot as pltdef load_data(path):ax=[]ay=[]az=[]gx=[]gy=[]gz=[]ppg=[]labels=[]files=[]for file in os.listdir(path):if file.endswith('txt'):file_name=path+fileelse:continuef=open(file_name, 'r')for line in f.readlines():line=line.strip().split(',')label=line[0]data=line[1:]# data=np.array(data)# data=np.reshape(data,(-1,1))# 归一化/标准化# data = preprocessing.scale(data, axis=1, with_std=True)  # 标准化# data = preprocessing.normalize(data, norm="l1", axis=1)  # 归一化# data=(data-np.min(data))/(np.max(data)-np.min(data))   # min-max归一化# data=(data-np.mean(data)) / np.std(data)   # 0均值,1方差 归一化if 'ax' in file:ax.append(data[0:20])if 'ay' in file:ay.append(data[0:20])if 'az' in file:az.append(data[0:20])if 'gyrox' in file or 'gx' in file:gx.append(data[0:20])if 'gyroy' in file or 'gy' in file:gy.append(data[0:20])if 'gyroz' in file or 'gz' in file:gz.append(data[0:20])ax0=np.reshape(np.array(ax),-1)ay0=np.reshape(np.array(ay),-1)az0=np.reshape(np.array(az),-1)gx0=np.reshape(np.array(gx),-1)gy0=np.reshape(np.array(gy),-1)gz0=np.reshape(np.array(gz),-1)return ax0, ay0, az0, gx0, gy0, gz0# path="E:/data/手表采集/all/clear-200/0/"
# path="data/jiexi1/all/1/"
path="test/test5/clear-200/0/"
ax0, ay0, az0, gx0, gy0, gz0 = load_data(path)
print("加载数据:", type(ax0), ax0.shape)acc=[]
for i in range(len(ax0)):x0=int(ax0[i])y0=int(ay0[i])z0=int(az0[i])sqrt=np.sqrt((pow(x0,2)+pow(y0,2)+pow(z0,2)))acc.append(sqrt)base=1
gg=[]
t=20
total=int(len(acc)/t)-int(600/t)
for index in range(total+1):
# for index in range(1):acc_y=acc[index*t : index*t+600]# acc_y=np.array(acc[:])acc_x=np.arange(len(acc_y))# 滤波b0, a0 = signal.butter(4, 2*2/100, 'lowpass')  # 1.低通滤波# b, a = signal.butter(4, [2*1/100, 2*2/100], 'bandpass')  # 2.带通滤波acc_y2 = signal.filtfilt(b0, a0, acc_y)# acc_y2 = np.convolve(acc_y, np.ones(25)/25, mode='same')  # 3.平均滤波# acc_y2 = sgolay(acc_y, 71, 3)  # 4.平滑滤波# 寻找极值点maxs_x=signal.argrelextrema(acc_y2,np.greater)[0]maxs_y=acc_y2[signal.argrelextrema(acc_y2, np.greater)]mins_x=signal.argrelextrema(acc_y2,np.less)[0]mins_y=acc_y2[signal.argrelextrema(acc_y2, np.less)]# 保证极小点作为开头和结尾,删除开头和结尾的极大点if maxs_x[0]<mins_x[0]:maxs_x=np.delete(maxs_x,0)maxs_y=np.delete(maxs_y,0)if len(maxs_x)==len(mins_x):maxs_x=np.delete(maxs_x,-1)maxs_y=np.delete(maxs_y,-1)# print(len(mins_x), len(mins_y), len(maxs_x), len(maxs_y))# 计算特征step=0for i in range(len(mins_x)-1):distance1=mins_x[i+1] - mins_x[i]   # 两个极小点的x轴距离distance2=maxs_y[i] - mins_y[i]   # 波峰-波谷的距离k=(maxs_y[i]-mins_y[i])/(maxs_x[i]-mins_x[i])   # 斜率:波峰/波谷# print(i+1, distance1, distance2, k)if distance1>30 and distance2>400:step+=1# print(step)# 步数大于5则证明这段时间在走路if step>=5:label=1else:label=0if label==base:gg.append(1)else:gg.append(0)
print("acc:", np.mean(gg))plt.plot(acc_x, acc_y, 'r',label='polyfit values')
plt.plot(acc_x, acc_y2, 'g',label='polyfit values')
plt.plot(maxs_x,maxs_y, 'o', color='blue', markersize=5) #极大值点
plt.plot(mins_x, mins_y,'o', color='green', markersize=5) #极小值点
plt.show()# if label!=base:#     plt.title([index, step],fontsize=16)#     plt.text(-3, 20, "function: y = x * x", size = 15)#     plt.plot(acc_x, acc_y, 'r',label='polyfit values')#     plt.plot(acc_x, acc_y2, 'g',label='polyfit values')#     plt.plot(maxs_x,maxs_y, 'o', color='blue', markersize=5) #极大值点#     plt.plot(mins_x, mins_y,'o', color='green', markersize=5) #极小值点#     # plt.show()#     plt.pause(0.3)#     plt.close()

模拟现网数据:(二分类)

现网每次进来200个点,滑窗间隔20个点,每600点(3s)作为一条数据。

import numpy as np
import cv2
import os
import math
from scipy import signal
import matplotlib.pyplot as pltdef load_data(path):ax=[]ay=[]az=[]gx=[]gy=[]gz=[]ppg=[]labels=[]files=[]for file in os.listdir(path):if file.endswith('txt'):file_name=path+fileelse:continuef=open(file_name, 'r')for line in f.readlines():line=line.strip().split(',')label=line[0]data=line[1:]# data=np.array(data)# data=np.reshape(data,(-1,1))# 归一化/标准化# data = preprocessing.scale(data, axis=1, with_std=True)  # 标准化# data = preprocessing.normalize(data, norm="l1", axis=1)  # 归一化# data=(data-np.min(data))/(np.max(data)-np.min(data))   # min-max归一化# data=(data-np.mean(data)) / np.std(data)   # 0均值,1方差 归一化if '-ax' in file:ax.append(data[0:20])if '-ay' in file:ay.append(data[0:20])if '-az' in file:az.append(data[0:20])if 'gyrox' in file or '-gx' in file:gx.append(data[0:20])if 'gyroy' in file or '-gy' in file:gy.append(data[0:20])if 'gyroz' in file or '-gz' in file:gz.append(data[0:20])ax0=np.reshape(np.array(ax),-1)ay0=np.reshape(np.array(ay),-1)az0=np.reshape(np.array(az),-1)gx0=np.reshape(np.array(gx),-1)gy0=np.reshape(np.array(gy),-1)gz0=np.reshape(np.array(gz),-1)return ax0, ay0, az0, gx0, gy0, gz0# return gx0, gy0, gz0, gx0, gy0, gz0def lvbo(acc_y):# 滤波b0, a0 = signal.butter(4, 2*2/100, 'lowpass')  # 1.低通滤波acc_y2 = signal.filtfilt(b0, a0, acc_y)# 寻找极值点# acc_point=new_accacc_point=acc_y2maxs_x=signal.argrelextrema(acc_point, np.greater)[0]maxs_y=acc_point[signal.argrelextrema(acc_point, np.greater)]mins_x=signal.argrelextrema(acc_point,np.less)[0]mins_y=acc_point[signal.argrelextrema(acc_point, np.less)]return acc_y2,maxs_x,maxs_y,mins_x,mins_ydef append_data(arr, data):if len(arr)<3:arr.append(data)else:arr=arr[1:]arr.append(data)return arrdef data_change(arr):new_arr=[]for datas in arr:for data in datas:new_arr.append(data)return new_arrdef data_change2(arr):new_arr=[]for i in range(len(arr)):datas=arr[i]for data in datas:data=data+200*inew_arr.append(data)return new_arr# path='E:/data/watch_data/all/clear-200/0/'
# path="data/jiexi0/all/1/"
path="test/test5/clear-200/0/"
# ax0, ay0, az0, gx0, gy0, gz0 = load_data(path)
ax0, ay0, az0, gx0, gy0, gz0 = load_data(path)
print("加载数据:", type(ax0), ax0.shape)acc=[]
for i in range(len(ax0)):x0=int(ax0[i])y0=int(ay0[i])z0=int(az0[i])sqrt=np.sqrt((pow(x0,2)+pow(y0,2)+pow(z0,2)))acc.append(sqrt)maxs_xx2=[]
maxs_yy2=[]
mins_xx2=[]
mins_yy2=[]
y2_list=[]y_list=[]
gg=[]
base=1
t=200
total=int(len(acc)/t)
for index in range(total):data=acc[index*t : (index+1)*t]# 整体:600点滤波# 1.数据进栈y_list=append_data(y_list, data)# 2.数据转换-变成一维数组acc_y=data_change(y_list)# 3.滤波+极值点acc_y2,maxs_x,maxs_y,mins_x,mins_y=lvbo(acc_y)# 4.删除开头和结尾的极大点if maxs_x[0]<mins_x[0]:maxs_x=np.delete(maxs_x,0)maxs_y=np.delete(maxs_y,0)if len(maxs_x)==len(mins_x):maxs_x=np.delete(maxs_x,-1)maxs_y=np.delete(maxs_y,-1)# print(maxs_x,mins_x)# 现网模拟-200点滤波# 1.滤波+极值点y2,maxs_x2,maxs_y2,mins_x2,mins_y2=lvbo(data)# print(maxs_x2,)# 纠正波峰波谷if index>=1:if len(mins_x2)>0 and len(maxs_x2)>0:if maxs_x2[0]<mins_x2[0] and new_maxs_x[-1]>new_mins_x[-1]:maxs_x2=np.delete(maxs_x2,0)maxs_y2=np.delete(maxs_y2,0)if len(mins_x2)>0 and len(maxs_x2)>0:if maxs_x2[0]>mins_x2[0] and new_maxs_x[-1]<new_mins_x[-1]:mins_x2=np.delete(mins_x2,0)mins_y2=np.delete(mins_y2,0)# 2.数据进栈y2_list=append_data(y2_list,y2)maxs_xx2=append_data(maxs_xx2,maxs_x2)maxs_yy2=append_data(maxs_yy2,maxs_y2)mins_xx2=append_data(mins_xx2,mins_x2)mins_yy2=append_data(mins_yy2,mins_y2)# 3.数据转换new_acc=data_change(y2_list)new_maxs_x=data_change2(maxs_xx2)new_maxs_y=data_change(maxs_yy2)new_mins_x=data_change2(mins_xx2)new_mins_y=data_change(mins_yy2)# print(index,len(new_acc), len(new_maxs_x), len(new_maxs_y))# 4.删除开头和结尾的极大点a=len(maxs_xx2)-1if new_maxs_x[0]<new_mins_x[0]:maxs_xx2[0]=np.delete(maxs_xx2[0],0)maxs_yy2[0]=np.delete(maxs_yy2[0],0)new_maxs_x=np.delete(new_maxs_x,0)new_maxs_y=np.delete(new_maxs_y,0)if new_maxs_x[-1]>new_mins_x[-1]:maxs_xx2[a]=np.delete(maxs_xx2[a],-1)maxs_yy2[a]=np.delete(maxs_yy2[a],0)new_maxs_x=np.delete(new_maxs_x,-1)new_maxs_y=np.delete(new_maxs_y,-1)# print(len(new_mins_x), len(new_mins_y))# 计算特征step=0for i in range(len(new_mins_x)-1):distance1=new_mins_x[i+1] - new_mins_x[i]   # 两个极小点的x轴距离distance2=new_maxs_y[i] - new_mins_y[i]   # 波峰-波谷的距离k=(new_maxs_y[i]-new_mins_y[i])/(new_maxs_x[i]-new_mins_x[i])   # 斜率:波峰/波谷# print(i+1, distance1, distance2, k)if distance1>30 and distance2>400:step+=1# print(step)if index>=2:# 步数大于5则证明这段时间在走路if step>=4:label=1else:label=0if label==base:gg.append(1)else:gg.append(0)
# print("acc:", np.mean(gg), path, index)acc_x=np.arange(len(acc_y))x2=np.arange(len(new_acc))plt.figure(figsize=(15,7))plt.plot(acc_x, acc_y, 'b',label='acc_y')plt.plot(acc_x, acc_y2, 'g',label='acc_y2')plt.plot(x2, new_acc, 'r',label='new_acc')plt.legend(loc='upper right')plt.plot(new_maxs_x,new_maxs_y, 'o', color='blue', markersize=5) #极大值点plt.plot(new_mins_x, new_mins_y,'o', color='green', markersize=5) #极小值点plt.show()
#     # plt.pause(0.3)
#     # plt.close()

模拟现网数据:(三分类)

现网每次进来200个点,滑窗间隔20个点,每600点(3s)作为一条数据。

import numpy as np
import cv2
import os
import math
from scipy import signal
import matplotlib.pyplot as pltdef load_data(path):ax=[]ay=[]az=[]gx=[]gy=[]gz=[]ppg=[]labels=[]files=[]for file in os.listdir(path):if file.endswith('txt'):file_name=path+fileelse:continuef=open(file_name, 'r')for line in f.readlines():line=line.strip().split(',')label=line[0]data=line[1:]# data=np.array(data)# data=np.reshape(data,(-1,1))# 归一化/标准化# data = preprocessing.scale(data, axis=1, with_std=True)  # 标准化# data = preprocessing.normalize(data, norm="l1", axis=1)  # 归一化# data=(data-np.min(data))/(np.max(data)-np.min(data))   # min-max归一化# data=(data-np.mean(data)) / np.std(data)   # 0均值,1方差 归一化if '-ax' in file:ax.append(data[0:20])if '-ay' in file:ay.append(data[0:20])if '-az' in file:az.append(data[0:20])if 'gyrox' in file or '-gx' in file:gx.append(data[0:20])if 'gyroy' in file or '-gy' in file:gy.append(data[0:20])if 'gyroz' in file or '-gz' in file:gz.append(data[0:20])ax0=np.reshape(np.array(ax),-1)ay0=np.reshape(np.array(ay),-1)az0=np.reshape(np.array(az),-1)gx0=np.reshape(np.array(gx),-1)gy0=np.reshape(np.array(gy),-1)gz0=np.reshape(np.array(gz),-1)return ax0, ay0, az0, gx0, gy0, gz0# return gx0, gy0, gz0, gx0, gy0, gz0def find_peak(arr):peak1=[]peak1_index=[]for i in range(1,len(arr)-1):if arr[i]>arr[i-1] and arr[i] > arr[i + 1] and len(peak1)<33:peak1.append(arr[i])peak1_index.append(i)peak2=[]peak2_index=[]for i in range(1,len(arr)-1):if arr[i]<arr[i-1] and arr[i] < arr[i + 1] and len(peak2)<33:peak2.append(arr[i])peak2_index.append(i)return peak1_index,peak1,peak2_index,peak2def lvbo(acc_y):# 滤波b0, a0 = signal.butter(2, 4*2/100, 'lowpass')  # 1.低通滤波acc_y2 = signal.filtfilt(b0, a0, acc_y)# 寻找极值点acc_point=acc_y2# maxs_x=signal.argrelextrema(acc_point, np.greater)[0]# maxs_y=acc_point[signal.argrelextrema(acc_point, np.greater)]# mins_x=signal.argrelextrema(acc_point,np.less)[0]# mins_y=acc_point[signal.argrelextrema(acc_point, np.less)]maxs_x,maxs_y,mins_x,mins_y=find_peak(acc_point)return acc_y2,maxs_x,maxs_y,mins_x,mins_ydef append_data(arr, data):if len(arr)<3:arr.append(data)else:arr=arr[1:]arr.append(data)return arrdef data_change(arr):new_arr=[]for datas in arr:for data in datas:new_arr.append(data)return new_arrdef data_change2(arr):new_arr=[]for i in range(len(arr)):datas=arr[i]for data in datas:data=data+200*inew_arr.append(data)return new_arrpath = "test/test5/clear-200/0/"
ax0, ay0, az0, gx0, gy0, gz0 = load_data(path)
print("加载数据:", type(ax0), ax0.shape)acc=[]
for i in range(len(ax0)):x0=int(ax0[i])y0=int(ay0[i])z0=int(az0[i])sqrt=np.sqrt((pow(x0,2)+pow(y0,2)+pow(z0,2)))acc.append(sqrt)maxs_xx2=[]
maxs_yy2=[]
mins_xx2=[]
mins_yy2=[]
y2_list=[]y_list=[]
gg=[]
base=0
t=200
total=int(len(acc)/t)
for index in range(total):data=acc[index*t : (index+1)*t]# 整体:600点滤波# 1.数据进栈y_list=append_data(y_list, data)# 2.数据转换-变成一维数组acc_y=data_change(y_list)# 3.滤波+极值点acc_y2,maxs_x,maxs_y,mins_x,mins_y=lvbo(acc_y)# 4.删除开头和结尾的极大点if maxs_x[0]<mins_x[0]:maxs_x=np.delete(maxs_x,0)maxs_y=np.delete(maxs_y,0)if len(maxs_x)==len(mins_x):maxs_x=np.delete(maxs_x,-1)maxs_y=np.delete(maxs_y,-1)# print(maxs_x,mins_x)# 现网模拟-200点滤波# 1.滤波+极值点y2,maxs_x2,maxs_y2,mins_x2,mins_y2=lvbo(data)# print(maxs_x2,)# 纠正波峰波谷if index>=1:if len(mins_x2)>0 and len(maxs_x2)>0:if maxs_x2[0]<mins_x2[0] and new_maxs_x[-1]>new_mins_x[-1]:maxs_x2=np.delete(maxs_x2,0)maxs_y2=np.delete(maxs_y2,0)if len(mins_x2)>0 and len(maxs_x2)>0:if maxs_x2[0]>mins_x2[0] and new_maxs_x[-1]<new_mins_x[-1]:mins_x2=np.delete(mins_x2,0)mins_y2=np.delete(mins_y2,0)# 2.数据进栈y2_list=append_data(y2_list,y2)maxs_xx2=append_data(maxs_xx2,maxs_x2)maxs_yy2=append_data(maxs_yy2,maxs_y2)mins_xx2=append_data(mins_xx2,mins_x2)mins_yy2=append_data(mins_yy2,mins_y2)# 3.数据转换new_acc=data_change(y2_list)new_maxs_x=data_change2(maxs_xx2)new_maxs_y=data_change(maxs_yy2)new_mins_x=data_change2(mins_xx2)new_mins_y=data_change(mins_yy2)# print(index,len(new_acc), len(new_maxs_x), len(new_maxs_y))# 4.删除开头和结尾的极大点a=len(maxs_xx2)-1if new_maxs_x[0]<new_mins_x[0]:maxs_xx2[0]=np.delete(maxs_xx2[0],0)maxs_yy2[0]=np.delete(maxs_yy2[0],0)new_maxs_x=np.delete(new_maxs_x,0)new_maxs_y=np.delete(new_maxs_y,0)if new_maxs_x[-1]>new_mins_x[-1]:maxs_xx2[a]=np.delete(maxs_xx2[a],-1)maxs_yy2[a]=np.delete(maxs_yy2[a],0)new_maxs_x=np.delete(new_maxs_x,-1)new_maxs_y=np.delete(new_maxs_y,-1)# print(len(new_mins_x), len(new_mins_y))# 计算特征step1 = 0step2 = 0for i in range(len(new_mins_x)-1):distance1=new_mins_x[i+1] - new_mins_x[i]   # 两个极小点的x轴距离distance2=new_maxs_y[i] - new_mins_y[i]   # 波峰-波谷的距离# k=(new_maxs_y[i]-new_mins_y[i])/(new_maxs_x[i]-new_mins_x[i])   # 斜率:波峰/波谷# print(i+1, distance1, distance2, k)if distance1 > 30:if distance2 > 400 and distance2 < 3000:step1 += 1if distance2 > 3000:step2 += 1# print(step)if index>=2:# 步数大于5则证明这段时间在走路if step2 >= 5:label = 2elif step1 >= 5:label = 1else:label = 0if label == base:gg.append(1)else:gg.append(0)# print("0-acc:", np.mean(gg), path, index)acc_x=np.arange(len(acc_y))x2=np.arange(len(new_acc))plt.figure(figsize=(15,7))plt.plot(acc_x, acc_y, 'b',label='acc_y')plt.plot(acc_x, acc_y2, 'g',label='acc_y2')plt.plot(x2, new_acc, 'r',label='new_acc')plt.legend(loc='upper right')plt.plot(new_maxs_x,new_maxs_y, 'o', color='blue', markersize=5) #极大值点plt.plot(new_mins_x, new_mins_y,'o', color='green', markersize=5) #极小值点plt.show()
#     # plt.pause(0.3)
#     # plt.close()

手表运动状态识别(静止/走路/跑步)_v2(使用传统处理方法)相关推荐

  1. 手表运动状态识别(静止/走路/跑步)_数据样例

    原始数据:包括acc和gyro的三轴数据 样例1:走路数据 {"accX":[458,490,546,560,612,582,489,522,550,524,0,0,0,0,0], ...

  2. android 模拟器识别,一种基于符号的识别Android应用运行在模拟器中的方法与流程...

    本发明涉及一种基于符号的识别android应用运行在模拟器中的方法. 背景技术: 很多的移动应用都会使用一种基于lbs的地理围栏的技术(如移动打卡),某些用户为了突破这种围栏的限制,将移动应用运行在模 ...

  3. 对话中情绪识别,研究挑战、数据集和前沿方法

    对话中情绪识别,研究挑战.数据集和前沿方法: https://zhuanlan.zhihu.com/p/86777515

  4. 文字识别:关键信息提取的3种探索方法

    本文分享自华为云社区<技术综述十:文字识别之关键信息提取>,原文作者:小菜鸟chg . 深度学习模型已经在OCR领域,包括文本检测和文本识别任务,获得了巨大的成功.而从文档中提取关键信息( ...

  5. 进入U盘PE系统无法识别硬盘分区的原因分析和解决方法

    进入U盘PE系统无法识别硬盘分区的原因分析和解决方法 时间:2015-07-15     来源:http://www.xitongtiandi.com/    复制网址        进入U盘PE系统 ...

  6. python图片转文字easyocr_OCR识别软件将图片转文字的具体方法

    OCR识别软件将图片转文字的具体方法 OCR识别软件是一款我们经常需要使用的办公软件,如果想要将图片转换成文字,那么就需要使用这款软件进行转换,那么如何将使用OCR识别软件将 首先在这里大家可以使用捷 ...

  7. 图片截图识别文字怎么操作?这两个方法不要错过

    现如今,图片截图识别文字是一项非常有用的技术.很多小伙伴平时在工作或者生活中都会保存很多图片格式的资料文件把.如果遇到需要讲内容图区到文档中编辑的话,识别技术就可以帮助我们快速识别图片中的文字,从而节 ...

  8. 情绪识别的多模态特征,分类器和融合方法研究

    Investigation of Multimodal Features, Classifiers and Fusion Methods for Emotion Recognition(情绪识别的多模 ...

  9. 人物关系 人脸识别_一种基于人脸识别系统的人物关系挖掘系统及方法与流程...

    本发明涉及人脸识别技术领域,具体涉及一种基于人脸识别技术进行人物关系挖掘的系统及其方法. 背景技术: 人脸识别作为生物身份识别的典型技术,由于不需要被检测个体的主动配合,近年来在人机交互,安防,身份认 ...

最新文章

  1. How to enable mod_rewrite on Apache?
  2. Android之在BaseAdapter源码中了解观察者模式
  3. C/C++ 语言中表达式的求值
  4. Photoshop CC2015软件安装资料及教程
  5. MaxScript Slider/Timer
  6. Linux和unix中 awk 的print浅谈
  7. centos mysql权限不够_centos执行文件时权限不够怎么解决_网站服务器运行维护,centos...
  8. tomcat配置用户数据
  9. Android中Context详解
  10. PowerShell~文件操作和对象遍历
  11. android项目中values中几个文件的作用
  12. [leetcode][JAVA]面试题第[1028]题[迭代]
  13. java里shake是什么意思_shake是什么意思_shake在线翻译_英语_读音_用法_例句_海词词典...
  14. iOS开发:对于AFNetworking HTTP转HTTPS请求证书问题
  15. 大数据之-Hadoop3.x_Hadoop之HDFS_DataNode的工作机制_原理---大数据之hadoop3.x工作笔记0077
  16. JSP ---- 入门
  17. 设置时间同步(ntp)详细步骤
  18. Java集合ArrayList的应用
  19. Java - 多线程Callable、Executors、Future
  20. Java Web实战篇-轻松提高千万级数据库查询效率

热门文章

  1. Android截屏-- ScrollView,ListView及RecyclerView截屏(三)
  2. 美工面试题目(合集)
  3. (Windows)Anaconda创建虚拟环境安装tensorflow
  4. fomo3D漏洞学习文章
  5. 去中心化时代的创作者经济
  6. 走向人生巅峰....
  7. jQuery Sizzle
  8. LD衰减图绘制--PopLDdecay
  9. 测试用例管理工具Zephyr(jira插件)的具体使用
  10. 计算机的机械硬盘,高端电脑配置为什么还会卡?机械硬盘惹的祸!