- elasticsearch-8.7.1 部署手册
蓝萄
elasticsearch
1.创建用户useraddessu-es2.下载最新的包https://www.elastic.co/cn/downloads/elasticsearch3.解压tar-zxvfelasticsearch-8.7.1-linux-x86_64.tar.gzmvelasticsearch-8.7.1elasticsearch4.生成证书./bin/elasticsearch-certutilcaTh
- phpstudy用composer安装thinkphp5.1
dnpao
thinkphp5.1linuxphp
参考文章https://www.cnblogs.com/finalanddistance/p/8932042.html下载composer.phar下载地址:https://getcomposer.org/download/我是下载最新的路径phpstudy所使用是php7.2本地路径是D:\ProgramFiles\phpStudy\PHPTutorial\php\php-7.2.1-nts\p
- JVM 如何打破双亲委派模型?
冰糖心书房
JVMjvm
虽然双亲委派模型是Java类加载机制的推荐实现方式,但在某些情况下,为了实现特定的功能,可能需要打破双亲委派模型。以下是一些常见的打破双亲委派模型的方法和场景:1.重写loadClass方法(不推荐):原理:java.lang.ClassLoader的loadClass方法实现了双亲委派模型的逻辑。默认情况下,loadClass方法会先检查类是否已经被加载过,如果没有,则委托给父类加载器加载。如果
- python下载m3u8格式视频
fengchengwu2012
devopspython开发语言m3u8
一、安装m3u8库pipinstallrequestspipinstallrequestsm3u8二、编码实现importosimportreimportrequestsimportsubprocess#下载ts文件defdown_ts_file(base_url,m3u8_url,download_dir):#从m3u8文件中获取所有ts的分片名称信息response=requests.get(
- python安装方法
郭仙玲
笔记
python安装方法1.搜索“Python”进入官网,然后选中“Download”。2.进入“Download”页面,可以看到“DownloadPythonx.x.x”,单击就可以下载这个版本的Python安装包。3.双击我们下载的安装包。首先一定要勾选如图红色的地方,方便添加path路径。4.如图所示红色方框,是Python默认安装的选项。5.如果想要自定义安装,可以选择下面的选项。6.接着勾选
- Module-Redis
SuperScfan
#docs_Moduledocs
Module-Redistags:RedisCentos72019年12月环境说明:CentoS7.5Redis部署#Installyuminstalllrzsz-ypipinstallredis#wgethttp://download.redis.io/releases/redis-5.0.5.tar.gzwgethttp://download.redis.io/releases/redis-3
- Java SPI机制(Service Provider Interface)动态扩展机制
C4程序员
北京JAVA面试java开发语言
**JavaSPI(ServiceProviderInterface)是Java提供的一种动态扩展机制,用于解耦组件,在不修改代码的情况下动态加载不同的实现。在JDBC、Dubbo、Spring、Java业务插件等场景中,SPI都被广泛应用。1.SPI的核心原理JavaSPI主要依赖java.util.ServiceLoader,它的原理如下:定义接口(ServiceInterface)。创建实现
- Oracle到MySQL实时数据互通:透明网关跨库查询终极方案
从不删库的DBA
Oracleoraclemysql数据库
技术架构概述节点类型IP示例Oracle数据库172.18.0.11透明网关节点192.168.5.20MySQL数据库10.10.8.100提示:透明网关支持部署在Oracle服务器实现集中式管理一、MySQL环境准备1.ODBC驱动部署从MySQL官网获取对应版本的ODBC驱动:#企业版推荐使用8.0系列驱动wgethttps://dev.mysql.com/get/Downloads/Con
- 分类任务-
Kriol
深度学习初学分类数据挖掘人工智能
importrandomimporttorchimporttorch.nnasnnimportnumpyasnpimportosfromPILimportImage#读取图片数据fromtorch.utils.dataimportDataset,DataLoaderfromtqdmimporttqdmfromtorchvisionimporttransformsimporttimeimportma
- 越狱开发笔记(三)——非越狱App砸壳
群野
iOS安全攻防
文章目录砸壳概述Clutch静态砸壳dumpdecrypted动态砸壳Theos配置使用Theos窃取密码关于Theos的坑!!!!砸壳概述应用程序为了不让你逆向,AppStore或安卓的应用下载市场,会对应用可执行文件加壳——即简单加密加壳后应用是不能直接执行的,iOS是有解密的方法的正版应用的MachO文件,因为加密不能dumpida64可以看的LoadComands的LC_ENCRYPTTI
- android kernel-6.6编译ko驱动
逐梦云间
c语言android
https://download.csdn.net/download/weixin_47982517/90546147
- react如何引用(按需加载)百度地图,并结合and组件化封装
编程猪猪侠
react.js前端前端框架
1.技术选项:vite+react+antdesignload-script2.实现思路:1.按需加载如何实现?要实现按需加载就不能直接在项目的入口文件这种地方去通过script标签引入,这里使用load-script封装了一个加载百度地图的Bmap.js方法,实现动态的插入script脚本。根目录下创建Bmap.js文件import_loadScriptfrom'load-script';exp
- C# dataGridView 自动生成几行几列及手动输入整型字符
钢铁男儿
C#c#开发语言
C#dataGridView生成12号4列的表格privatevoidForm1_Load(objectsender,EventArgse){//清除默认列dataGridView1.Columns.Clear();//添加4列(首列为序号列)dataGridView1.Columns.Add("ColIndex","序号");dataGridView1.Columns.Add("Col2","列
- 蓝易云 - LoadRunner如何监控Linux系统资源
蓝易云
linux服务器大数据c++开发语言数据库
使用LoadRunner监控Linux系统资源可以通过以下步骤实现:安装LoadRunnerAgent:在要监控的Linux服务器上安装LoadRunnerAgent。确保与LoadRunner控制器连接的通信端口是开放的。创建监控场景:在LoadRunner控制器中,创建一个新的监控场景。选择要监控的Linux服务器和资源,如CPU、内存、磁盘等。配置监控参数:配置监控参数以捕获所需的系统资源数
- 顶级Web应用程序测试工具列表
旧游无处不堪寻
测试工具测试用例selenium网络协议功能测试jmeterpostman
今天主要列举Web应用程序的工具。今天的列表仅仅提供索引功能,具体要使用的同学,可以自行搜索哦。通过web应用程序测试,在web应用程序公开发布之前,会发现网站功能、安全性、可访问性、可用性、兼容性和性能等问题。Web应用程序测试工具:WebLOADDigivanteAcunetixInvicti(formerlyNetsparker)TestCompleteAvoAssureAstraWeb功能
- nginx502 Bad Gateway错误解决办法
Hanson,
nginx
一、问题现象nginx部署正常,运行正常。后端tomcat程序部署正常,运行正常。通过nginx反向代理后出现如下报错。nginx配置:server{listen80;listen[::]:80;server_nameweb;root/usr/share/nginx/html;#Loadconfigurationfilesforthedefaultserverblock.include/etc/n
- 【MySQL】验证账户权限
2302_79952574
mysql数据库
在用户进行验证之后,MySQL将提出以下问题验证账户权限:1.谁是当前用户?2.该用户有何权限?管理权限比如:shutdown、replicationslave、loaddatainfile。数据权限比如:select、insert、update、delete。3.这些权限适用于何处?global、database、table、column、storedroutine(存储例程包括存储过程和存储函
- 使用electron-vite创建桌面应用
库库的写代码
electronjavascript前端
使用electron-vite创建桌面应用一、框架搭建二、项目目录三、preload.js解读一、框架搭建官网地址https://cn.electron-vite.orgnpmcreate@quick-start/electron@latest按步骤操作即可二、项目目录1、main主进程窗口:存放窗口代码2、preload预加载模块:用于窗口与页面间沟通的桥梁,增加可靠性3、renderer渲染模
- 2006-2019年 女性高管特征数据
小王毕业啦
大数据人工智能数据分析数据挖掘大数据社科数据数据统计毕业论文
女性高管特征数据(2006-2019年).ziphttps://download.csdn.net/download/2401_84585615/90259714https://download.csdn.net/download/2401_84585615/90259714近年来,女性高管在企业管理层的比例逐渐上升,成为学术界和业界关注的焦点。研究表明,女性高管在决策风格、风险偏好和领导方式等方
- Effective C++ 学习笔记 条款23 宁以non-member、non-friend替换member函数
吃着火锅x唱着歌
EffectiveC++(第三版)c++学习笔记
想象有个class用来表示网页浏览器。这样的class可能提供的众多函数中,有一些用来清除下载元素高速缓存区(cacheofdownloadedelements)、清除访问过的URLs的历史记录(historyofvisitedURLs)、以及移除系统中的所有cookies:classWebBrowser{public://...voidclearCache();voidclearHistory(
- failed to start daemon: Error initializing network controller: error obtaining controller
Roc-xb
dockerUbuntu
INFO[2000-01-01T08:24:25.420202728+08:00][graphdriver]usingpriorstoragedriver:overlay2INFO[2000-01-01T08:24:25.420825581+08:00]Loadingcontainers:start.INFO[2000-01-01T08:24:25.628581180+08:00]stopping
- 手动搭建并配置react项目(webpack5)
程序员宝妈
webpack打包Reactreact.js前端前端框架
手动搭建并配置react项目(webpack5)介绍不使用脚手架,利用webpack,手动搭建react项目框架1、项目创建创建目录react_wepack2、webpack+react基础架构2.1配置webpack.dev.js基础配置说明可参考这篇文章配置loader、plugin、eslint【见webpack.dev.js】constpath=require("path");constM
- 【SpringBoot高效整合Redis深度解析】从配置到实战:解锁缓存与分布式锁的最佳实践
柚几哥哥
云原生与中间件redis缓存数据库
Redis学习笔记https://download.csdn.net/download/Zyw907155124/39492221https://download.csdn.net/download/Zyw907155124/394922212.2SpringBoot整合Redis(1)添加Redis依赖包在项目的pom.xml中添加如下:org.springframework.bootsprin
- 【Django】教程-4-一个增删改查的Demo
唐古乌梁海
Djangodjango
【Django】教程-1-安装+创建项目+目录结构介绍【Django】教程-2-前端-目录结构介绍【Django】教程-3-数据库相关介绍9.demo一个包含前后端的,增删查demo9.1前端代码layout.html定义父级,需要被其他前端页面继承的html模板,JQ跟bootstrap使用cdn的就可以!我的为本地的{%loadstatic%}{%blocktitle%}{%endblock%
- 【Django】教程-1-安装+创建项目+目录结构介绍
唐古乌梁海
pythondjango
欢迎关注我!后续会更新django教程。一周2-3更,欢迎跟进,本周会更新第一个Demo的单独一个模块的增删改查【Django】教程-4-一个增删改查的Demo【Django】教程-2-前端-目录结构介绍【Django】教程-3-数据库相关介绍1.项目创建1.1安装Djangopython环境下载地址:https://www.python.org/downloads/windows/pipinst
- 使用el-upload实现文件的自动上传,并根据业务需要进行改造。
apple_pingwan
vuewindows前端vue.js
根据业务需要,先将业务B所需文件上传至服务器,并将文件记录保存到业务数据库中;业务A要根据条件找到业务B中的文件,并展示,且可将该记录删除、将该文件上传至服务器。基于该情况,要将自动上传的el-upload进行改造。在改造过程中遇到了一些问题,也对el-upload有了更进一步的了解。文件上传(支持文件格式:.doc.docx.pdf.xls.xlsx.wps.ppt.pptx.jpg.jpeg.
- 跨线程操作无效:从创建该线程的线程以外的线程访问控件
p15097962069
c#multithreadingwinformsinvoke
我有一个场景。(Windows窗体,C#、.NET)有一个主窗体可以承载一些用户控件。用户控件执行一些繁重的数据操作,因此,如果我直接调用UserControl_Load方法,则UI在加载方法执行期间将无响应。为了克服这个问题,我将数据加载到不同的线程上(尝试尽我所能更改现有代码)我使用了一个后台工作线程来加载数据,完成后将通知应用程序它已经完成了工作。现在出现了一个真正的问题。所有UI(主窗体及
- C#函数的重载
原来你也写代码><
C#c#unity游戏程序开发语言
函数(方法)重载OverLoad1.函数的名称相同,但是参数列表不同。调用该函数的时候,会根据不用的参数,自动选择合适的函数重载形式。2.参数不同的情况①如果参数的个数相同,那么参数的类型就不能相同;②如果参数的类型相同,那么参数的个数就不能相同。注意:函数的返回值和重载没有关系。就是一个方法都叫Add,()里面的两个相加的数类型或者个数不同,调用方法的时候会自动选择用哪个类型
- s3c2440移植Linux内核,移植Linux-3.4.2内核到S3C2440
AI MIU
一、BootLoader引导内核过程1、Bootloader的工作1.1、将内核读入内存1.2、保存内核启动参数到指定位置,内核启动时去这个位置解析参数1.3、启动内核、传入机器ID二、内核的启动流程内核首要目的是挂载根文件系统,启动应用程序,内核启动的过程大致为以下几步:1.检查CPU和机器类型2.进行堆栈、MMU等其他程序运行关键的东西进行初始化3.打印内核信息4.执行各种模块的初始化5.挂接
- unity弹出新的类似独立场景窗口独立运行一般怎么实现?
Clank的游戏栈
unity游戏引擎
在Unity中实现弹出类似独立场景窗口并独立运行的功能,通常需要采用一些特定的方法或工具,因为Unity本身并没有直接提供这种功能的内置选项。以下是一些可能的实现方法:1.使用多个Scene(场景)加载新Scene:在Unity中,你可以通过SceneManager.LoadScene方法加载一个新的场景。这不会创建一个完全独立的窗口,但可以在同一个Unity实例中切换不同的场景。卸载旧Scene
- scala的option和some
矮蛋蛋
编程scala
原文地址:
http://blog.sina.com.cn/s/blog_68af3f090100qkt8.html
对于学习 Scala 的 Java™ 开发人员来说,对象是一个比较自然、简单的入口点。在 本系列 前几期文章中,我介绍了 Scala 中一些面向对象的编程方法,这些方法实际上与 Java 编程的区别不是很大。我还向您展示了 Scala 如何重新应用传统的面向对象概念,找到其缺点
- NullPointerException
Cb123456
androidBaseAdapter
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference
出现以上异常.然后就在baidu上
- PHP使用文件和目录
天子之骄
php文件和目录读取和写入php验证文件php锁定文件
PHP使用文件和目录
1.使用include()包含文件
(1):使用include()从一个被包含文档返回一个值
(2):在控制结构中使用include()
include_once()函数需要一个包含文件的路径,此外,第一次调用它的情况和include()一样,如果在脚本执行中再次对同一个文件调用,那么这个文件不会再次包含。
在php.ini文件中设置
- SQL SELECT DISTINCT 语句
何必如此
sql
SELECT DISTINCT 语句用于返回唯一不同的值。
SQL SELECT DISTINCT 语句
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
SQL SELECT DISTINCT 语法
SELECT DISTINCT column_name,column_name
F
- java冒泡排序
3213213333332132
java冒泡排序
package com.algorithm;
/**
* @Description 冒泡
* @author FuJianyong
* 2015-1-22上午09:58:39
*/
public class MaoPao {
public static void main(String[] args) {
int[] mao = {17,50,26,18,9,10
- struts2.18 +json,struts2-json-plugin-2.1.8.1.jar配置及问题!
7454103
DAOspringAjaxjsonqq
struts2.18 出来有段时间了! (貌似是 稳定版)
闲时研究下下! 貌似 sruts2 搭配 json 做 ajax 很吃香!
实践了下下! 不当之处请绕过! 呵呵
网上一大堆 struts2+json 不过大多的json 插件 都是 jsonplugin.34.jar
strut
- struts2 数据标签说明
darkranger
jspbeanstrutsservletScheme
数据标签主要用于提供各种数据访问相关的功能,包括显示一个Action里的属性,以及生成国际化输出等功能
数据标签主要包括:
action :该标签用于在JSP页面中直接调用一个Action,通过指定executeResult参数,还可将该Action的处理结果包含到本页面来。
bean :该标签用于创建一个javabean实例。如果指定了id属性,则可以将创建的javabean实例放入Sta
- 链表.简单的链表节点构建
aijuans
编程技巧
/*编程环境WIN-TC*/ #include "stdio.h" #include "conio.h"
#define NODE(name, key_word, help) \ Node name[1]={{NULL, NULL, NULL, key_word, help}}
typedef struct node { &nbs
- tomcat下jndi的三种配置方式
avords
tomcat
jndi(Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API。命名服务将名称和对象联系起来,使得我们可以用名称
访问对象。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。
tomcat配置
- 关于敏捷的一些想法
houxinyou
敏捷
从网上看到这样一句话:“敏捷开发的最重要目标就是:满足用户多变的需求,说白了就是最大程度的让客户满意。”
感觉表达的不太清楚。
感觉容易被人误解的地方主要在“用户多变的需求”上。
第一种多变,实际上就是没有从根本上了解了用户的需求。用户的需求实际是稳定的,只是比较多,也比较混乱,用户一般只能了解自己的那一小部分,所以没有用户能清楚的表达出整体需求。而由于各种条件的,用户表达自己那一部分时也有
- 富养还是穷养,决定孩子的一生
bijian1013
教育人生
是什么决定孩子未来物质能否丰盛?为什么说寒门很难出贵子,三代才能出贵族?真的是父母必须有钱,才能大概率保证孩子未来富有吗?-----作者:@李雪爱与自由
事实并非由物质决定,而是由心灵决定。一朋友富有而且修养气质很好,兄弟姐妹也都如此。她的童年时代,物质上大家都很贫乏,但妈妈总是保持生活中的美感,时不时给孩子们带回一些美好小玩意,从来不对孩子传递生活艰辛、金钱来之不易、要懂得珍惜
- oracle 日期时间格式转化
征客丶
oracle
oracle 系统时间有 SYSDATE 与 SYSTIMESTAMP;
SYSDATE:不支持毫秒,取的是系统时间;
SYSTIMESTAMP:支持毫秒,日期,时间是给时区转换的,秒和毫秒是取的系统的。
日期转字符窜:
一、不取毫秒:
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
简要说明,
YYYY 年
MM 月
- 【Scala六】分析Spark源代码总结的Scala语法四
bit1129
scala
1. apply语法
FileShuffleBlockManager中定义的类ShuffleFileGroup,定义:
private class ShuffleFileGroup(val shuffleId: Int, val fileId: Int, val files: Array[File]) {
...
def apply(bucketId
- Erlang中有意思的bug
bookjovi
erlang
代码中常有一些很搞笑的bug,如下面的一行代码被调用两次(Erlang beam)
commit f667e4a47b07b07ed035073b94d699ff5fe0ba9b
Author: Jovi Zhang <bookjovi@gmail.com>
Date: Fri Dec 2 16:19:22 2011 +0100
erts:
- 移位打印10进制数转16进制-2008-08-18
ljy325
java基础
/**
* Description 移位打印10进制的16进制形式
* Creation Date 15-08-2008 9:00
* @author 卢俊宇
* @version 1.0
*
*/
public class PrintHex {
// 备选字符
static final char di
- 读《研磨设计模式》-代码笔记-组合模式
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
abstract class Component {
public abstract void printStruct(Str
- 利用cmd命令将.class文件打包成jar
chenyu19891124
cmdjar
cmd命令打jar是如下实现:
在运行里输入cmd,利用cmd命令进入到本地的工作盘符。(如我的是D盘下的文件有此路径 D:\workspace\prpall\WEB-INF\classes)
现在是想把D:\workspace\prpall\WEB-INF\classes路径下所有的文件打包成prpall.jar。然后继续如下操作:
cd D: 回车
cd workspace/prpal
- [原创]JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明
comsci
eclipse设计模式算法工作swing
JWFD v0.96 工作流系统二次开发包 for Eclipse 简要说明
&nb
- SecureCRT右键粘贴的设置
daizj
secureCRT右键粘贴
一般都习惯鼠标右键自动粘贴的功能,对于SecureCRT6.7.5 ,这个功能也已经是默认配置了。
老版本的SecureCRT其实也有这个功能,只是不是默认设置,很多人不知道罢了。
菜单:
Options->Global Options ...->Terminal
右边有个Mouse的选项块。
Copy on Select
Paste on Right/Middle
- Linux 软链接和硬链接
dongwei_6688
linux
1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连
- DIV底部自适应
dcj3sjt126com
JavaScript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
- Centos6.5使用yum安装mysql——快速上手必备
dcj3sjt126com
mysql
第1步、yum安装mysql
[root@stonex ~]# yum -y install mysql-server
安装结果:
Installed:
mysql-server.x86_64 0:5.1.73-3.el6_5 &nb
- 如何调试JDK源码
frank1234
jdk
相信各位小伙伴们跟我一样,想通过JDK源码来学习Java,比如collections包,java.util.concurrent包。
可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。
下面是编译jdk的具体步骤:
1.把C:\java\jdk1.6.0_26\sr
- Maximal Rectangle
hcx2013
max
Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area.
public class Solution {
public int maximalRectangle(char[][] matrix)
- Spring MVC测试框架详解——服务端测试
jinnianshilongnian
spring mvc test
随着RESTful Web Service的流行,测试对外的Service是否满足期望也变的必要的。从Spring 3.2开始Spring了Spring Web测试框架,如果版本低于3.2,请使用spring-test-mvc项目(合并到spring3.2中了)。
Spring MVC测试框架提供了对服务器端和客户端(基于RestTemplate的客户端)提供了支持。
&nbs
- Linux64位操作系统(CentOS6.6)上如何编译hadoop2.4.0
liyong0802
hadoop
一、准备编译软件
1.在官网下载jdk1.7、maven3.2.1、ant1.9.4,解压设置好环境变量就可以用。
环境变量设置如下:
(1)执行vim /etc/profile
(2)在文件尾部加入:
export JAVA_HOME=/home/spark/jdk1.7
export MAVEN_HOME=/ho
- StatusBar 字体白色
pangyulei
status
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
/*you'll also need to set UIViewControllerBasedStatusBarAppearance to NO in the plist file if you use this method
- 如何分析Java虚拟机死锁
sesame
javathreadoracle虚拟机jdbc
英文资料:
Thread Dump and Concurrency Locks
Thread dumps are very useful for diagnosing synchronization related problems such as deadlocks on object monitors. Ctrl-\ on Solaris/Linux or Ctrl-B
- 位运算简介及实用技巧(一):基础篇
tw_wangzhengquan
位运算
http://www.matrix67.com/blog/archives/263
去年年底写的关于位运算的日志是这个Blog里少数大受欢迎的文章之一,很多人都希望我能不断完善那篇文章。后来我看到了不少其它的资料,学习到了更多关于位运算的知识,有了重新整理位运算技巧的想法。从今天起我就开始写这一系列位运算讲解文章,与其说是原来那篇文章的follow-up,不如说是一个r
- jsearch的索引文件结构
yangshangchuan
搜索引擎jsearch全文检索信息检索word分词
jsearch是一个高性能的全文检索工具包,基于倒排索引,基于java8,类似于lucene,但更轻量级。
jsearch的索引文件结构定义如下:
1、一个词的索引由=分割的三部分组成: 第一部分是词 第二部分是这个词在多少