next

Linux未来极有可能支持Li-Fi技术,可以跟WiFI说再见了。

北战南征 提交于 2020-12-22 20:51:53
据 phoronix 报道,Li-Fi 技术供应商 PureLiFi 近来正在向 Linux 内核社区积极贡献代码,以推动将其开源的 Li-Fi 驱动程序并入 Linux 内核主线。 Li-Fi 全称为 Light Fidelity ,中文名称为“光保真技术”,是一种利用可见光波谱进行数据传输的全新无线传输技术,由英国爱丁堡大学电子通信学院移动通信系主席、德国物理学家 Harald Hass 教授发明。 Li-Fi 的技术原理是利用快速的光脉冲无线传输信息。一个简单的例子是 LED 灯开表示 1,关表示 0,通过快速开关就能实现编码。在实际应用中,Li-Fi 通常是利用电信号控制 LED 发出肉眼看不到的高速闪烁信号来传输信息。Li-Fi 与光纤通信拥有同样的优点,高带宽,高速率,不同的是 Li-Fi 是使光传播在我们周围的环境中,自然光能到达的地方,就有 Li-Fi 的信号。Li-Fi 技术的部署可以运用生活中无处不在的灯泡,只要在灯泡上植入一个微小的芯片,就能使其变成一个类似于 Wi-Fi 热点的设备,使终端随时能接入网络。 PureLiFi 是一家致力于推广 Li-Fi 技术和研发制造 Li-Fi 设备的厂商,由 Li-Fi 技术发明人 Harald Hass 教授创立。目前,Li-Fi 网络技术正处于一个比较早期的阶段,PureLiFi 的设备支持的是电子工程师协会

Android源码解析——Handler、Looper与MessageQueue

♀尐吖头ヾ 提交于 2020-12-22 17:49:58
本文的目的是来分析下 Android 系统中以 Handler、Looper、MessageQueue 组成的异步消息处理机制,通过源码来了解整个消息处理流程的走向以及相关三者之间的关系 需要先了解以下几个基本概念 Handler:主线程或者子线程通过 Handler 向 MessageQueue(消息队列) 发送 Message,以此来触发定时任务或者更新 UI MessageQueue:通过 Handler 发送的消息并非是立即执行的,需要存入消息队列中来依次执行,消息队列中的任务依照消息的优先级高低(延时时间的长短)来顺序存放 Looper:Looper 用于从 MessageQueue 中循环获取消息并将之传递给消息处理者(即消息发送者 Handler 本身)来进行处理,每条 Message 都有个 target 变量用来指向消息的发送者本身,以此把 Message 和其处理者关联起来 互斥机制:可能会有多条线程(1条 UI 线程,n 条子线程)同时向同一个消息队列插入消息,此时就需要有同步机制来保证消息的有序性以避免竞态 先从开发者日常的使用方法作为入口,以此来分析其整个流程的走向 Handler 发送消息的形式主要有以下几个方法,不管其是否是延时任务,其最终调用的都是 sendMessageAtTime() 方法 public final boolean

图论——最短路:Floyd,Dijkstra,Bellman-Ford,SPFA算法及最小环问题

北城以北 提交于 2020-12-22 07:28:22
一.Floyd算法   用于计算 任意两个节点之间的最短路径 。 参考了 five20 的博客 Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点到B,所以,我们假设dist(AB)为节点A到节点B的最短路径的距离,对于每一个节点K,我们检查dist(AK) + dist(KB) < dist(AB)是否成立,如果成立,证明从A到K再到B的路径比A直接到B的路径短,我们便设置 dist(AB) = dist(AK) + dist(KB),这样一来,当我们遍历完所有节点K,dist(AB)中记录的便是A到B的最短路径的距离。 标准五行代码如下: for (k= 1 ;k<=n;k++ ) for (i= 1 ;i<=n;i++ ) for (j= 1 ;j<=n;j++ ) { if (dis[i][k]+dis[k][j]< dis[i][j]) { dis[i][j] =dis[i][k]+ dis[k][j]; } }    但是这里我们要注意循环的嵌套顺序,如果把检查所有节点K放在最内层,那么结果将是不正确的,为什么呢?因为这样便过早的把i到j的最短路径确定下来了,而当后面存在更短的路径时,已经不再会更新了。      更多关于Floyd算法,详细请见: Floyd算法百度百科链接 二.Dijkstra算法

windows平台上MongoDB安装配置

安稳与你 提交于 2020-12-22 06:51:09
我按照原文方法操作,无法连接mongod服务,可能哪里出了问题。 以下是小页的教程: https://www.cnblogs.com/littlepage/p/10992336.html 视频参考: https://www.bilibili.com/video/av47425352/?p=3 原文: 安装mongodb 1.官网mongoDB下载: http://www.mongodb.org/downloads 选择windows平台。 一直next,建立安装目录。我安装在了D:\MongoDB\data 目录下。 2.建立工作目录: 在D:\MongoDB\data目录下建立文件夹\db (用来存放数据库文件) 在D:\MongoDB\data目录下建立文件夹\log (用来存放日志文件) 3.运行cmd.exe,进入到d:\MongoDB\data\bin目录下。 执行以下命令: d:\MongoDB\data\bin>mongod -dbpath "d:\MongoDB\data\db" 若启动成功,会显示mongoDB默认的监听端口:27017,mysql的是3306   在浏览器中输入 http://localhost:27017/ 会出现:   It looks like you are trying to access MongoDB over HTTP on

学生选课系统v1.0

孤人 提交于 2020-12-22 06:44:29
最近两天写了下老师课上留的作业:学生选课系统。感觉自己写的特别麻烦,思路特别不清晰,平常自己总会偷懒,一些太麻烦细节的功能就不去实现了,用简单的功能来替代,直到自己这回写完这个系统(但自己写的比较low,只有后台功能,前台几乎没有),发现一些功能虽然繁琐,但多写几次就不会感到麻烦,反而自己的思维会变得更清楚。 系统:三种用户:管理员,教师,学生。管理员来添加教师和学生,教师可以添加自己的课程,查看选课学生的信息,修改个人信息,学生可以实现选课,浏览课程信息,修改个人信息等。 主要思路:通过将用户的账号和密码同数据库相应的数据进行比对验证登陆,用户登陆时选择自己的身份。将学生,老师,课程,选课信息分别储存在数据库中。人数达到上限后改变课程的状态。重复选课后台给出提示(这个写的不太好,应在前台告知客户),不添加数据到数据库中。 这里只给出核心的代码(Dao层),其余可以自己比较简单。 package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util

1074. Reversing Linked List (25)

旧时模样 提交于 2020-12-22 04:47:33
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K = 3, then you must output 3→2→1→6→5→4; if K = 4, you must output 4→3→2→1→5→6. Input Specification: Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (<= 10 5 ) which is the total number of nodes, and a positive K (<=N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1. Then N lines

Reversing Linked List【我不配】

余生长醉 提交于 2020-12-21 14:25:02
02-线性结构3 Reversing Linked List (25分) Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6. Input Specification: Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤10e​5​​ ) which is the total number of nodes, and a positive K (≤N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is

hdparm 命令使用;关闭硬盘 HDD cache; 硬盘读写性能测试;

半世苍凉 提交于 2020-12-21 07:54:59
最新需要使用硬盘做一些测试,需要使用到hdparm工具,并进行了解,并进行简要记录; hdparm、dd、fio、都是很好的硬盘测试软件;通常使用其对硬盘信息做基本了解; 关闭硬盘写Cache用例: hdparm -W /dev/ sdh # 查看写缓存状态; hdparm -W 0 /dev/ sdh # 关闭Cache,保证数据强一致性;放置断电时数据未落盘; hdparm -W 1 /dev/sdh # 打开 测试磁盘和磁盘缓存读取速度: 查看磁盘信息: fdisk -l /dev/ sdh hdparm /dev/sdh 评估磁盘读取速度: hdparm -t /dev/sdh 评估磁盘缓存读取速度: hdparm -T /dev/sdh 直接测试硬盘的读性能(绕过内核页缓存): hdparm -tT --direct /dev/sdh 顺序写测试: time -p bash -c "dd if=/dev/urandom of=./dd.log bs=1M count=50000" 随机写测试(使用direct标识,绕过页缓存): fio -filename=randw-singlethread -fallocate=none -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=32k -size

eclipse导出可执行jar包步骤

天涯浪子 提交于 2020-12-21 07:25:12
按步骤图文说明 第一步:选择要导出的工程,右键【export】 第二步:双击Java文件夹下的【Runnable Jar File】 第三步:该步骤分4步走 3.1 从下拉框选择该jar的入口文件,即main方法所在的类   有可能找不到main方法所在类,是因为需要运行一下main方法才可以在此处找到。 3.2 设置导出jar包的路径和包名 3.3 设置第三方jar包的处置方法 Extract required libraries into generated JAR:把所有的import JAR都拆开来,包含在JAR的各个目录中,导出的实际效果如下: Package required libraries into generated JAR:把所有的import JAR都包在JAR的根目录下,导出的实际效果如下: Copy required libraries into a sub-folder next to the generated JAR:把所有import JAR放在JAR外面独立的一个文件夹,导出的实际效果如下: 3.4 点击【finish】 第四步:进入jar包所在目录:java -jar xxxxx.jar 回车即可 原文:https://www.cnblogs.com/wangzhisdu/p/7832666.html 来源: oschina 链接:

golang 实现广度优先算法(走迷宫)

懵懂的女人 提交于 2020-12-21 04:59:34
maze.go package main import ( "fmt" "os" ) /* * * 广度优先算法 */ /* * * 从文件中读取数据 */ func readMaze(filename string) [][] int { file, err : = os.Open(filename) if err != nil { panic(err) } var cols, rows int fmt.Fscanf(file, "%d %d", &rows, & cols) maze : = make([][] int , rows) for i := range maze { maze[i] = make([] int , cols) for j := range maze[i] { fmt.Fscanf(file, "%d", & maze[i][j]) } } return maze } /* * * 定义要走的节点下标 */ type point struct { i, j int } /* * * 定义,四个方向 ,上左下右 */ var dirs = [4]point{point{-1, 0}, point{0, -1}, point{1, 0}, point{0, 1 },} // 走的节点 // 走迷宫 /* * * maze 迷宫地址 * strt 开始位置