Ubuntu上轻松安装Nginx
在ubuntu下按照nginx,只需要使用简单的命令
1apt install nginx
nginx的配置目录都在/etc/nginx下。
主要的 Nginx 配置文件是/etc/nginx/nginx.conf。
SQLite:单线程数据库,适用于小型项目
SQLite是一个嵌入式数据库引擎,它被设计为单线程访问。这意味着在默认情况下,SQLite不支持多线程并发访问同一个数据库连接。当多个线程尝试同时访问同一个数据库连接时,可能会导致数据库文件损坏或产生不可预测的结果。但是其实作为嵌入式数据库,他本身已经可以支撑的起小型项目了。前期都可以用sqlite来维系数据库
协程异步并发及结构化
协程(3)默认顺序1234567891011121314151617181920212223import kotlinx.coroutines.*import kotlin.system.*fun main() = runBlocking<Unit> { //sampleStart val time = measureTimeMillis { val one = doSomethingUsefulOne() val two = doSomethingUsefulTwo() println("The answer is ${one + two}") } println("Completed in $time ms") //sampleEnd }suspend fun doSomethingUsefulOne(): Int { delay(1000L) // pretend we are ...
Dockerfile指令指南
FROM:指定基础镜像,例如 FROM Ubuntu:18.04RUN:执行命令,在dockerfile中,他每次执行RUN命令都会分层。镜像会分层。这会造成镜像臃肿,因此常用&&来一次执行多次命令。COPY:他会从宿主机复制文件到镜像中。例如COPY app.py /app/这个命令就会将app.py复制到镜像的app目录下,当然,这个目录你可以自己指定ADD:类似于COPY,但是他支持URL(包括其他位置和网络部分)和自动解压WORKDIR:指定工作目录,如:workdir:/app,如果没有指定的话,他就会默认在这个目录下执行。EXPOSE:暴露端口,比如EXPOSE 80他会映射端口到宿主机的某个端口CMD:设置默认命令,他启动时会启动的命令。注意:(如果写了多个CMD他也只会执行最后一条CMD命令)如[“python”,”app.py”]ENTERPOINT:容器启动时执行的命令,如[“python”,”app.py”].而且如果在容器中,同时又ENTERPOINT和CMD,那么他将会执行ENTERPOINT,CMD将会作为参数传给ENTERPOIN ...
JAR包中资源访问与Class访问
在java使用以及部署应用时,经常会打一个jar包并将他安置在服务器上运行,而当你将配置文件放在resources目录下时,他将会被一起打包成一个class的类。并保存在jar包中,此时你无法通过相对路径来获取你放在resources目录下的文件,而需要通过Class.getResource()或Class.getResourceAsStream()来获取resources下的文件的访问。
请注意,jar文件中包含的资源是只读的。您将无法保存对数据库的任何更改。
自给自足的 SQLite 轻量级数据库
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。SQLite 是自给自足的,这意味着不需要任何外部的依赖。
sqlite的使用第一步,你需要安装sqlite,他与mysql的安装并不一样,他只有sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件三个文件,所以他是极为轻量级的。(windows中)linux中的话,直接apt或者yum安装会更快一些他的下载地址为(下载)[http://www.sqlite.org/download.html]安装后,添加到PATH路径,他便可以基本使用了,在本笔记里,不细讲他的各种细节,只为快速使用而写。然后了解一些基本命令
基本命令12345C:\>sqlite3SQLite version 3.7.15.2 2013-01-09 11:53:05Enter ".help" for instructionsEnter SQL statement ...
协程取消与异常处理
协程(2)当我们需要取消协程时,我们可以通过对launch的返回值Job对象执行cancel()方法来取消协程。但是当协程中正在执行计算相关的事件时,协程将不会被取消,而是会执行下去。因此即便取消了协程,任然要添加一个join()方法,避免协程没有正确取消和结束,而直接执行后面的操作。有一个简单的方法即cancelAndjoin()可以直接结合两个方法,取消并阻塞。例如:
12345678910111213141516171819202122import kotlinx.coroutines.*fun main() = runBlocking { //sampleStart val startTime = System.currentTimeMillis() val job = launch(Dispatchers.Default) { var nextPrintTime = startTime var i = 0 while (i < 5) { // computation loop, j ...
repeat函数循环执行函数体
关键字kotlinrepeat(3){ println(“hello,world”)}
他会将repeat中的函数体执行3遍
Kotlin 协程与互操作
暂存问题协程,kotlin和java互操作,kotlin和js互操作。委托。泛型。(最后两个可以暂时不用考虑)互操网上再学习
协程使用指南:依赖、概念和用法
在使用协程前,必须引入相关的依赖包
1implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
协程(1)本质上,协程可以称为轻量级线程。而且协程只能在协程作用域内才能启动。有CoroutineScope,GlobalScope(全局)两种作用域。而且在全局作用域内启动的协程,只受整个应用的生命周期的限制。即只要整个应用程序还在运行中,只要协程的任务还未结束,该协程就可以一直运行
1234delay()//delay是一个挂起函数,他并不会阻塞线程,而是将协程挂起,在特定的时候再继续执行。thread.sleep()//而thread.sleep将会阻塞线程。
举例:当协程 A 调用 delay(1000L) 函数来指定延迟1秒后再运行时,协程 A 所在的线程只是会挂起,转而去执行协程 B,等到1秒后再把协程 A 加入到可调度队列里。
1234567891011121314//例程fun main() = runBlocking { repeat(100){ ...