Entry

Spring整合MongoDB,封装MongoTemplate常用操作方法

此生再无相见时 提交于 2020-08-11 14:11:19
所需Jar包 mongo-java-driver-3.3.0.jar spring-data-mongodb-1.10.15.RELEASE.jar 配置mongodb.properties mongo.hostport=127.0.0.1:27017 mongo.connectionsPerHost=8 mongo.threadsAllowedToBlockForConnectionMultiplier=4 mongo.connectTimeout=3000 mongo.maxWaitTime=1500 mongo.socketKeepAlive=true mongo.socketTimeout=30000 mongo.authDB=admin # 认证的数据库 mongo.username=admin mongo.password=123456 mongo.connectDB=project # 需要操作的数据库 配置mongodb.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http

verilog写的LCD1602 显示

纵然是瞬间 提交于 2020-08-11 12:59:24
在读本文之前,请先阅读 LCD1602 的 datasheet(百度到处都是) ,熟悉有关的11条指令集。 LCD1602的11个指令集链接 http://www.cnblogs.com/aslmer/p/5801363.html (这是我总结的11条指令集,中英文结合) 1、LCD1602基础知识 (2)LCD1602操作流程 2、代码: module lcd_1602_driver( clk , rst_n , lcd_en , lcd_rw , //因为只执行写操作,所以永远为0. lcd_rs , lcd_data ); input clk ; input rst_n ; output lcd_en ; output lcd_rw ; output lcd_rs ; output [ 7 : 0 ] lcd_data; wire clk ; wire rst_n ; wire lcd_en ; wire lcd_rw; reg [ 7 : 0 ] lcd_data; reg lcd_rs ; reg [ 5 : 0 ] c_state ; reg [ 5 : 0 ] n_state ; wire [ 127 : 0 ] row_1; wire [ 127 : 0 ] row_2; assign row_1 = " i am liu xiao yi " ; /

跟着sleep看jvm线程变化

空扰寡人 提交于 2020-08-11 12:47:51
jvm线程是维护了线程的状态。new,running,waiting,timed waiting,blocked,terminated。我们通过jstack等工具查看的时候,线程状态就是上面的一种。jvm本身是做了一种抽象,我们现在从一个典型的方法,来跟踪查看一下jvm内部又是怎么做状态变化的。 sleep方法入手 public static native void sleep(long millis) throws InterruptedException; sleep是一个native 方法,我们通过jvm原来来进行跟着(源码来自openjdk11)。 根据jni的规范,我们通过包名或者是jni的注册方式找到了对应的声明。 static JNINativeMethod methods[] = { {"start0", "()V", (void *)&JVM_StartThread}, {"stop0", "(" OBJ ")V", (void *)&JVM_StopThread}, {"isAlive", "()Z", (void *)&JVM_IsThreadAlive}, {"suspend0", "()V", (void *)&JVM_SuspendThread}, {"resume0", "()V", (void *)&JVM_ResumeThread}, {

Java的四种引用:强引用、软应用、弱引用、虚引用

你。 提交于 2020-08-11 12:11:23
前戏 在JDK远古时期的版本中,java对象的似乎就只有两种状态,即被引用和不被引用。也就是说程序中,如果一个对象不被任何其他对象或变量引用,那么JVM就判定这个对象无法被使用,JVM直接对对象内存进行回收。 但是,这两种极端状态并不能覆盖所有的对象,随着程序的运行,程序对某个对象的引用强度可能在不断地变化,比如一个对象可能会出现以下情况,一个对象表面表面上看起来处于不被引用的状态,它占据一定的内存空间,但是JVM马上对它进行回收又不太划算,或许在后面的场景下还可以用得上。 对于这样的可有可无的对象,JDK1.2版本实施了一种折衷的处理:如果内存足够,可以选择保留表面上处于不被引用状态的对象,但是如果内存空间不够,我就把这些可有可无的对象的内存回收(软引用),但是如果通过一些对象实在是对我没用,就在每次GC的时候直接把它回收掉(弱引用)。另外,JDK还设定,在回收的时候程序需要知道某个对象是否真正地回收掉(GC时的一个回调),一旦这个对象被回收,相应的用户线程会收到通知并对直接内存进行清理工作。 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。 这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用 。 说了半天,这四种引用到底是啥 强引用:最传统的「引用」的定义,是指在程序代码之中普遍存在的引用赋值,我们创建的对象一般都是这种引用关系

Linux 操作系统原理 — 内存 — 页式管理、段式管理与段页式管理

こ雲淡風輕ζ 提交于 2020-08-11 10:46:33
目录 文章目录 目录 前文列表 页式管理 快表 多级页表 基于页表的虚实地址转换原理 应用 TLB 快表提升虚实地址转换速度 页式虚拟存储器工作的全过程 缺页中断 段式管理 段页式管理 前文列表 页式管理 页式存储管理是一种把主存按页分配的存储管理方式,主存-辅存间信息传送单位是定长的页。对比块式管理而言,因为管理的粒度更细致,所以造成内存页碎片的浪费也会小很多。而缺点也正好相反,由于页不是程序独立模块对应的逻辑实体,所以处理、保护和共享都不及段来得方便。同时也因为页要比段小得多,在 Linux 下通常默认设置为 4KB,所以页在进行交换时,不会出现段交换那般卡顿。所以,页式存储管理方式会更加的受到欢迎,Linux 操作系统采用的就是页式存储管理方式。 更进一步的,页式存储管理方式使得加载程序的时候,不再需要一次性都把程序加载到内存中,而是在程序运行中需要用到的对应虚拟内存页里面的指令和数据时,再将其加载到内存中,这些操作由操作系统来完成。当 CPU 要读取特定的页,但却发现页的内容却没有加载时,就会触发一个来自 CPU 的缺页错误(Page Fault)。此时操作系统会捕获这个错误,然后找到对应的页并加载到内存中。通过这种方式,使得我们可以运行哪些远大于实例物理内存的程序,但相对的执行效率也会有所下降。 通过虚拟存储器、内存交换、内存分页三个技术的结合

vue项目中使用bpmn-流程图json属性转xml(七篇更新完成)

萝らか妹 提交于 2020-08-11 10:31:11
内容概述 本系列“vue项目中使用bpmn-xxxx”分为七篇,均为自己使用过程中用到的实例,手工原创,目前陆续更新中。主要包括vue项目中bpmn使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。如果转载或通过爬虫直接爬的,格式特别丑,请来原创看: 我是作者原文 前情提要 上一节我们讨论了将xml中的节点属性,转成前端常用的json格式。这一篇,我们来讨论更改了json后,如何写入到xml中去。首先,我们通过一张图看看流程图xml和json结构的对应关系。一定要仔细看,这张图理解了,这篇文章就理解一半了。 思路分析 xlm中,属性包裹在<bpmn:extensionElements>中,下一层分别是<camunda:inputOutput>和<camunda:inputParameter>,inputParameter的下一层,会有三种格式。上一节我们读取属性也是按照这个顺序,层层遍历拿到的属性值。 所以,我们本次的出发点,是根据json各字段的属性类型,从里向外为<bpmn:extensionElements>添加内容。步骤如下: 1.elementRegistry.get 和节点id找到节点实例element,因为写入xml的时候需要知道为哪个节点写属性 2.bpmnFactory.create ,顾名思义,作用为创建标签

Redis 的过期策略都有哪些?

我怕爱的太早我们不能终老 提交于 2020-08-11 10:28:39
面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 redis 的数据就一定会存在,后面导致系统各种 bug,谁来负责? 常见的有两个问题: 往 redis 写入的数据怎么没了? 可能有同学会遇到,在生产环境的 redis 经常会丢掉一些数据,写进去了,过一会儿可能就没了。我的天,同学,你问这个问题就说明 redis 你就没用对啊。redis 是缓存,你给当存储了是吧? 啥叫缓存?用内存当缓存。内存是无限的吗,内存是很宝贵而且是有限的,磁盘是廉价而且是大量的。可能一台机器就几十个 G 的内存,但是可以有几个 T 的硬盘空间。redis 主要是基于内存来进行高性能、高并发的读写操作的。 那既然内存是有限的,比如 redis 就只能用 10G,你要是往里面写了 20G 的数据,会咋办?当然会干掉 10G 的数据,然后就保留 10G 的数据了。那干掉哪些数据?保留哪些数据?当然是干掉不常用的数据,保留常用的数据了。 数据明明过期了,怎么还占用着内存? 这是由 redis 的过期策略来决定。 面试题剖析 redis 过期策略 redis 过期策略是: 定期删除+惰性删除 。 所谓 定期删除 ,指的是 redis 默认是每隔 100ms

【STM32F4】【银杏科技ARM+FPGA】iCore3移植RT-Thread--内核之互斥量

邮差的信 提交于 2020-08-11 09:01:53
一、 互斥量的引入   互斥量类似于ATM取款机:当有客户进入的时候,将取款机门锁住,其他客户在外面等候。当里面的客户出来时,将门打开,下一个客户才可以进入。   由此,互斥量与信号量的工作机制就比较相似,其实,互斥量是特殊的二进制信号量。信号量用于线程的同步,好比交通灯,线程只有在获得许可的时候才可以运行,强调的是步骤;互斥量用于线程的互斥,就像一把锁,只有获取钥匙的线程才可以运行,强调的是许可和权限。   互斥量只有两种状态,开锁或闭锁。当有线程持有它时,互斥量处于闭锁状态,由这个线程获得它的所有权。相反,当这个线程释放它时,将对互斥量进行开锁,失去它的持有权。当一个线程持有互斥量时,其他线程将不能够对它进行开锁或持有它。 二、 互斥量和信号量的相同之处 1,创建时,线程阻塞排序均可以选择优先级或先进先出方式。 2,线程阻塞时间均可以选择直接返回、挂起一段时间、永久等待。 三、 互斥量和信号量的区别 1.互斥量用于线程的互斥,信号量用于线程的同步。 2.互斥量值只能为0或1,信号量值为非负整数。 一个互斥量只能允许一个资源访问。信号量可以实现多个同类资源的多线程互斥和同步。 3.信号量可以由任何线程释放,但互斥锁只有获得了其控制权的线程才可以释放,即:只有“锁上”它的那个线程才有“钥匙”打开它。 4.信号量可能导致线程优先级反转,而互斥锁可通过优先级继承的方法解决优先级反转问题

Python笔记:制作九宫格图片

泪湿孤枕 提交于 2020-08-11 07:43:39
import os import cv2 import numpy as np from tkinter import * from tkinter.messagebox import showerror, showinfo class JiuGongGe(object): def __init__(self): self.root = Tk() # 创建Tk对象 self.root.title("九宫格转换器") # 设置窗口标题 self.h, self.w = 480, 640 self.root.geometry("{}x{}".format(self.w, self.h)) # 设置窗口尺寸 self.title = Label(self.root, text="九宫格转换器") # 标签 self.title.place(x = int(self.w/2),y = 10,anchor = CENTER) self.label1 = Label(self.root, text="请输入转换图片地址") # 标签 self.label1.place(x=0, y=30, anchor=NW) self.picttext = Entry(highlightcolor='red', highlightthickness=1, width=50) # 创建文本框 self

《隐秘的角落》弹幕分析,制作词云,看看观众们对该剧的评价如何

不打扰是莪最后的温柔 提交于 2020-08-11 06:27:30
最近有部很火的悬疑推理剧:《隐秘的角落》,豆瓣评分9.0,周末闲来无事,在追剧的同时爬取了下该剧第一集的弹幕,我们通过对弹幕进行分析,制作词云,来看看观众们对该剧的评价如何。 整篇文章分为两部分:1.爬取爱奇艺中该剧第一集的弹幕 2.对爬取出来的弹幕做处理,并制作词云。 爬取爱奇艺弹幕 相比于其他视频网站来说,爱奇艺的弹幕难爬一些,为啥呢,因为你爬取出来的文件是乱码的(下边会贴图),需要自己再把该文件二进制编码之后才能用。具体步骤如下: 首先,打开浏览器,进入爱奇艺页面,点开该剧,弹幕打开,然后F12,浏览器下方或者右侧会弹出一些界面,选择Network,在我图上标注的框中输入“bullet”搜索弹幕相关的文件。 为啥输入这个搜索呢,因为这个单词的意思就是弹幕,程序员命名东西一般也是有规律的,还有大多视频网站的弹幕相关文件都是这个名字哈哈。如果你F12搜索之后无内容,那直接点击下浏览器刷新按钮即可。下图中箭头指的分别是Network、搜索框、弹幕文件名和弹幕内容(你可以看到,弹幕内容是乱七八糟的乱码)。还有说明一点,弹幕文件一集不止一个,爱奇艺5分钟加载一个弹幕文件(为啥5分钟,下边会解释)。 接下来,观察弹幕文件出现的规律以及弹幕文件地址中的规律,总结为以下: 弹幕文件链接规律为 https://cmts.iqiyi.com/bullet/tvid倒数4位的前两位