根据表中的时间戳字段统计每天数据的数量

我们在存数据的时候,经常会存下数据被写入或更新的时间备用。
今天遇到一个需要统计每天插入了多少数据的需求
实现的SQL 如下:

select FROM_UNIXTIME(create_time/1000,’%Y-%m-%d’)as date,COUNT(*)
FROM table_1
where 1
GROUP BY date;
1
2
3
4
create_time/1000 是因为我存的时间戳是精确到毫秒的,如果你存的时间戳精确到秒,则不需要除以1000
————————————————
版权声明:本文为CSDN博主「刘宇LY」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28766327/article/details/79390629

java实现网络编程之 UDP多线程在线聊天(超详细)

这个涉及到多线程
发送端:

package chat;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

public class TalkSend implements Runnable{

DatagramSocket socket = null;
BufferedReader reader = null;

private int fromPort;
private String toIp;
private int toPort;


public TalkSend(int fromPort, String toIp, int toPort) {
    this.fromPort = fromPort;
    this.toIp = toIp;
    this.toPort = toPort;
    try {
        socket = new DatagramSocket(fromPort);
        reader = new BufferedReader(new InputStreamReader(System.in));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
@Override
public void run() {
    while(true) {
        String data = null;
        try {
            data = reader.readLine();
            byte[] datas = data.getBytes();
            DatagramPacket packet = new DatagramPacket(datas, 0, datas.length, new InetSocketAddress(this.toIp, this.toPort));
            socket.send(packet);

            if(data.equals("bye")) {
                break;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    socket.close();
}

}

接收端:

package chat;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class TalkReceive implements Runnable {
DatagramSocket socket = null;
private String msgFrom;
private int port;

public TalkReceive(int port, String msgFrom) {
    this.port = port;
    this.msgFrom = msgFrom;
    try {
        socket = new DatagramSocket(port);
    } catch (SocketException e) {
        e.printStackTrace();
    }
}

@Override
public void run() {
    try {
        while(true) {
            //准备接收包裹
            byte[] container = new byte[1024];
            DatagramPacket packet = new DatagramPacket(container, 0, container.length);
            socket.receive(packet); //阻塞式接收包裹

            //断开连接
            byte[] data = packet.getData();
            String receiveData = new String(data, 0, data.length);
            System.out.println(msgFrom + ":" + receiveData);
            if(receiveData.equals("bye")) {
                break;
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    socket.close();
}

}

测试代码:
学生端:

package chat;

public class TalkStudent {
public static void main(String[] args) {
//开启两个线程
new Thread(new TalkSend(7777, “localhost”, 9999)).start();
new Thread(new TalkReceive(8888, “老师”)).start();
}
}


老师端:

package chat;

public class TalkTeacher {
public static void main(String[] args) {
new Thread(new TalkSend(555, “localhost”, 8888)).start();
new Thread(new TalkReceive(9999, “学生”)).start();
}
}


测试结果:

————————————————
版权声明:本文为CSDN博主「太阳石笑笑」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45806131/article/details/109089984

Linux系统下安装jdk及环境配置(两种方法)

第一种方式一键安装(yum安装)默认安装在/usr/lib/jvm

第二种手动安装,需要自己去Oracle官网下载需要的jdk版本,然后解压并配置环境,整个过程其实很简单。

一、yum一键安装

查看:

复制代码
1.查看是否已安装JDK

# yum list installed |grep java

2.卸载CentOS系统Java环境

# yum -y remove java-1.8.0-openjdk*   *表示卸载所有openjdk相关文件输入 

# yum -y remove tzdata-java.noarch       卸载tzdata-java  

3.查看JDK软件包版本

# yum -y list java*      或者使用# yum searchjava | grep -i --color JDK 

查看JDK软件包列表
复制代码

下载:

复制代码
安装JDK
# yum install java-1.8.0-openjdk*  安装java1.8.0所有程序 
yum install -y java-1.8.0-openjdk-devel.x86_64
注意:输入确认(y)直到控制台返回Complete安装成功

查看java版本信息
# java -version

输入javac    java命令后显示帮助信息就算是安装成功了

使用yum安装环境变量自动就配好了
复制代码

 二、手动安装

1.去Oracle官网下载需要安装的jdk版本,我这里用的是jdk-8u221-linux-x64.tar.gz
2.将该压缩包放到/usr/local/java目录下(java需要自己创建,名字自己随意取,见名知意),然后解压该压缩包,输入如下指令:

tar zxvf jdk-8u221-linux-x64.tar.gz 

3.配置环境变量,输入以下指令进行配置:

复制代码
vi /etc/profile

在文件尾部添加如下信息:
复制代码

JAVA_HOME=/usr/local/java/jdk1.8.0_221
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

复制代码

注意:JAVA_HOME=/usr/local/java/jdk1.8.0_221 此处等号右边的是自己的jdk实际解压目录。如果不是该目录则需要改成自己的实际目录,其他不变。

实际情况如下图所示:

复制代码

 4.编辑完之后,保存并退出,然后输入以下指令,刷新环境配置使其生效:

source /etc/profile

PHP解压缩zip文件

1、使用PHP执行文件解压缩zip文件,前提条件,一定要确定服务器开启了zip拓展

2、封装的方法如下:

实例代码

 1 <?php 
 2 /**
 3  * 压缩文件
 4  * @param array $files 待压缩文件 array('d:/test/1.txt','d:/test/2.jpg');【文件地址为绝对路径】
 5  * @param string $filePath 输出文件路径 【绝对文件地址】 如 d:/test/new.zip
 6  * @return string|bool
 7  */
 8 function zip($files, $filePath) {
 9     //检查参数
10     if (empty($files) || empty($filePath)) {
11         return false;
12     }
13 
14     //压缩文件
15     $zip = new ZipArchive();
16     $zip->open($filePath, ZipArchive::CREATE);
17     foreach ($files as $key => $file) {
18         //检查文件是否存在
19         if (!file_exists($file)) {
20             return false;
21         }
22         $zip->addFile($file, basename($file));
23     }
24     $zip->close();
25 
26     return true;
27 }
28 
29 /**
30  * zip解压方法
31  * @param string $filePath 压缩包所在地址 【绝对文件地址】d:/test/123.zip
32  * @param string $path 解压路径 【绝对文件目录路径】d:/test
33  * @return bool
34  */
35 function unzip($filePath, $path) {
36     if (empty($path) || empty($filePath)) {
37         return false;
38     }
39 
40     $zip = new ZipArchive();
41 
42     if ($zip->open($filePath) === true) {
43         $zip->extractTo($path);
44         $zip->close();
45         return true;
46     } else {
47         return false;
48     }
49 }
50 ?>
复制代码

php实现ZIP压缩文件解压缩(转)

测试使用了两个办法都可以实现:

第一个:需要开启配置php_aip.dll

复制代码
<?php
//需开启配置 php_zip.dll
//phpinfo();
header("Content-type:text/html;charset=utf-8");

function get_zip_originalsize($filename, $path) {
  //先判断待解压的文件是否存在
  if(!file_exists($filename)){
    die("文件 $filename 不存在!");
  }
  $starttime = explode(' ',microtime()); //解压开始的时间

  //将文件名和路径转成windows系统默认的gb2312编码,否则将会读取不到
  $filename = iconv("utf-8","gb2312",$filename);
  $path = iconv("utf-8","gb2312",$path);
  //打开压缩包
  $resource = zip_open($filename);
  $i = 1;
  //遍历读取压缩包里面的一个个文件
  while ($dir_resource = zip_read($resource)) {
    //如果能打开则继续
    if (zip_entry_open($resource,$dir_resource)) {
      //获取当前项目的名称,即压缩包里面当前对应的文件名
      $file_name = $path.zip_entry_name($dir_resource);
      //以最后一个“/”分割,再用字符串截取出路径部分
      $file_path = substr($file_name,0,strrpos($file_name, "/"));
      //如果路径不存在,则创建一个目录,true表示可以创建多级目录
      if(!is_dir($file_path)){
        mkdir($file_path,0777,true);
      }
      //如果不是目录,则写入文件
      if(!is_dir($file_name)){
        //读取这个文件
        $file_size = zip_entry_filesize($dir_resource);
        //最大读取6M,如果文件过大,跳过解压,继续下一个
        if($file_size<(1024*1024*30)){
          $file_content = zip_entry_read($dir_resource,$file_size);
          file_put_contents($file_name,$file_content);
        }else{
          echo "<p> ".$i++." 此文件已被跳过,原因:文件过大, -> ".iconv("gb2312","utf-8",$file_name)." </p>";
        }
      }
      //关闭当前
      zip_entry_close($dir_resource);
    }
  }
  //关闭压缩包
  zip_close($resource);
  $endtime = explode(' ',microtime()); //解压结束的时间
  $thistime = $endtime[0]+$endtime[1]-($starttime[0]+$starttime[1]);
  $thistime = round($thistime,3); //保留3为小数
  echo "<p>解压完毕!,本次解压花费:$thistime 秒。</p>";
}

$size = get_zip_originalsize('../../textaa.zip','../../ffff/');
复制代码

上述方法中:$filename:文件名称,是要解压的文件名称,包括相对于方法的路径,$path表示的是:解压到(什么目录下,以/结束)

第二个方法是:使用pclzip自带的类,项目过程中因为路径的问题采用的第一种方法

复制代码
<?php
/*
php 从zip压缩文件中提取文件
*/
$zip = new ZipArchive;

if ($zip->open('test.zip') === TRUE) {//中文文件名要使用ANSI编码的文件格式
  $zip->extractTo('foldername');//提取全部文件
  //$zip->extractTo('/my/destination/dir/', array('pear_item.gif', 'testfromfile.php'));//提取部分文件
  $zip->close();
  echo 'ok';
} else {
  echo 'failed';
}
复制代码