项目级别的mcp配置:~/.claude.json
可参考claudecode mcp.mcp.json
项目级别的skills配置:~/.claude/skills
可参考探索 .claude 目录project/.claude/skills
项目级别的mcp配置:~/.codex/config.toml
可参考mcpproject/.codex/config.toml
项目级别的skills配置:~/.agents/skills
可参考where-to-save-skills]]>project/.agents/skills
let i = 0;
async function handler() {
i++;
console.log(new Date().getTime()/1000, '处理程序开始', i);
await new Promise(resolve => setTimeout(resolve, 2000)); // 模拟异步操作
console.log(new Date().getTime()/1000, '处理程序完成', i);
};
function call1() {
handler();
handler();
}
call1();
可以看出,两次handler都同时先后进入(由于js单线程,i会变化),并同时卡在await等待2s。1732934781.962 处理程序开始 1
1732934781.966 处理程序开始 2
1732934783.969 处理程序完成 2
1732934783.97 处理程序完成 2
async function call2() {
await handler();
await handler();
}
call2();
1732934929.563 处理程序开始 1
1732934931.569 处理程序完成 1
1732934931.57 处理程序开始 2
1732934933.571 处理程序完成 2
let lastlock = Promise.resolve();
async function getlock() {
let unlock = () => {};
let lock = lastlock;
let nlock = new Promise<void>((resolve) => {unlock = resolve;});
lastlock = nlock;
await lock;
return unlock;
}
async function handler() {
const unlock = await getlock();
try {
i++;
console.log(new Date().getTime()/1000, '处理程序开始', i);
await new Promise(resolve => setTimeout(resolve, 2000)); // 模拟异步操作
console.log(new Date().getTime()/1000, '处理程序完成', i);
} finally {
unlock();
}
};
1732935948.492 处理程序开始 1
1732935950.497 处理程序完成 1
1732935950.497 处理程序开始 2
1732935952.499 处理程序完成 2
]]>1732936175.165 处理程序开始 1
1732936177.171 处理程序完成 1
1732936177.171 处理程序开始 2
1732936179.173 处理程序完成 2
]]>Type 类型
Value 值
类型 零值
string ""
int 0
float 0
bool false
数组(固定长度) 所有成员的零值
struct 所有成员的零值
slice nil
map nil
指针 nil
函数 nil
通道 nil
接口interface Type Value均为nil
]]>package main
import "fmt"
func main() {
type Man struct {
name int
}
type Human interface {
GetName() string
}
var (
a string
b int
c float32
d bool
e [3]int
f Man
g []int
h map[string]string
i *int
j func() int
k chan int
l Human
)
fmt.Printf("a=%#v b=%#v c=%#v d=%#v e=%#v f=%#v g=%#v h=%#v i=%#v j=%#v k=%#v l=%#v\n", a, b, c, d, e, f, g, h, i, j, k, l)
}
// a="" b=0 c=0 d=false e=[3]int{0, 0, 0} f=main.Man{name:0} g=[]int(nil) h=map[string]string(nil) i=(*int)(nil) j=(func() int)(nil) k=(chan int)(nil) l=<nil>
最后一列就是use xx_database;
show table status;
+-----------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+-----------------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| game | InnoDB | 10 | Compact | 0 | 0 | 16384 | 0 | 0 | 7340032 | 1 | 2014年11月13日 15:18:13 | NULL | NULL | utf8_general_ci | NULL | | |
| goods | InnoDB | 10 | Compact | 0 | 0 | 16384 | 0 | 0 | 7340032 | 1 | 2014年11月13日 15:20:18 | NULL | NULL | utf8_general_ci | NULL | | |
最后一列就是show full fields from xxx_table;
]]>+------------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+------------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
| id | int(10) unsigned | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| name | varchar(200) | utf8_general_ci | NO | | NULL | | select,insert,update,references | |
| url | varchar(1000) | utf8_general_ci | NO | | NULL | | select,insert,update,references | |
| created_at | int(10) unsigned | NULL | NO | | NULL | | select,insert,update,references | |
| updated_at | int(10) unsigned | NULL | NO | | NULL | | select,insert,update,references | |
+------------+------------------+-----------------+------+-----+---------+----------------+---------------------------------+---------+
apt-get install php5-sybase
"Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier."
也可以在php.ini或者mssql独立module的ini(譬如ubuntu上php各个子module都有自己的独立配置文件)中指定charset[global]
;tds version = 4.2
tds version = 8.0
client charset = UTF-8
; Specify client character set..
; If empty or not set the client charset from freetds.comf is used
; This is only used when compiled with FreeTDS
mssql.charset = "UTF-8"
mssql.datetimeconvert = Off
vim /etc/network/interfaces
/**
* PNG ALPHA CHANNEL SUPPORT for imagecopymerge();
* This is a function like imagecopymerge but it handle alpha channel well!!!
**/
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct){
$opacity=$pct;
// getting the watermark width
$w = imagesx($src_im);
// getting the watermark height
$h = imagesy($src_im);
// creating a cut resource
$cut = imagecreatetruecolor($src_w, $src_h);
// copying that section of the background to the cut
imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h);
// inverting the opacity
$opacity = $opacity;
// placing the watermark now
imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h);
imagecopymerge($dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity);
]]>package cn.asarea.app.testandroid;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
public class MainActivity extends Activity {
private static final String TAG = "test andriod";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e(TAG, Thread.currentThread().getStackTrace()[2].getMethodName());
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
// StackTraceElement stackTraceElements[] = Thread.currentThread().getStackTrace();
// for (StackTraceElement stackTraceElement : stackTraceElements) {
// Log.e(TAG, stackTraceElement.getClassName() + ":" + stackTraceElement.getMethodName());
// }
Log.e(TAG, Thread.currentThread().getStackTrace()[2].getMethodName());
}
@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.e(TAG, Thread.currentThread().getStackTrace()[2].getMethodName());
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.e(TAG, Thread.currentThread().getStackTrace()[2].getMethodName());
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.e(TAG, Thread.currentThread().getStackTrace()[2].getMethodName());
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.e(TAG, Thread.currentThread().getStackTrace()[2].getMethodName());
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.e(TAG, Thread.currentThread().getStackTrace()[2].getMethodName());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
mac,mac os预安装了gitapt-get install git
#cd到你准备存放库的目录
git init --bare myproject.git
#这就会新建一个目录叫myproject.git,并且初始化了一个git库
#bare的意思就是不需要workspace,只要.git中的git信息内容
adduser git
#将创建的中心库改为git用户所有
chown -R git:git myproject.git
#禁止用putty等用git账号登陆
vim /etc/passwd
#将git:x:1001:1001:,,,:/home/git:/bin/bash改为
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
对于命令行ssh://git@xxx.net:222/mygitposition/myproject.git
#cd到你的workspace目录
git clone ssh://git@xxx.net:222/mygitposition/myproject.git
#工程会clone到myproject目录中
这样一个本地的git库就初始化好了,详细的svn转git的资料,请参考svn转git#author.txt是将svn的账号转化为git账号
#内容如:ather = Ather Shu <shushenghong@gmail.com>
git svn clone http://localhost/svn/repository/myproject --authors-file=author.txt --no-metadata
cd myproject
#将svn ignore转化为git ignore
#可以导出到exclude
git svn show-ignore > .git/info/exclude
#或者生成.gitignore文件
git svn create-ignore
git remote add origin ssh://git@xxx.net:222/mygitposition/myproject.git
git push origin master --tags