python + selenium清除Chrome缓存
在网上搜索了很久,尝试了很多方法,最终得到了一个有用的 直接上代码 from selenium import webdriver driver = webdriver.Chrome() # 设置隐式等待 driver.implicitly_wait(10) # 清除缓存提示框 driver.get('chrome://settings/clearBrowserData') # 2S 等待时间 time.sleep(2) clearButton = driver.execute_script("return document.querySelector('settings-ui').shadowRoot.querySelector('settings-main').shadowRoot.querySelector('settings-basic-page').shadowRoot.querySelector('settings-section > settings-privacy-page').shadowRoot.querySelector('settings-clear-browsing-data-dialog').shadowRoot.querySelector('#clearBrowsingDataDialog').querySelector('#clearBrowsingDataConfirm')") clearButton.click() # driver.quit()
Hive中常见的与正则匹配相关的函数
函数返回值类型函数说明likeboolean(A)str like (B)pattern,能否用B去完全匹配A的内容rlikeboolean(A)str rlike (B)regexp,能否用B去正则匹配A的内容regexpboolean功能语法同rlike一样,只是名字不同regexp_replace(str, regexp, rep)string将字符串str中符合正则表达式regexp的部分替换成字符串repregexp_extract(str, regexp[, idx])string将字符串str按照正则表达式regexp的规则拆分,返回idx指定位置的字符 注:用 [ ] 括起来的表示是可选参数。
1、like
使用格式:A like B,其中A是字符串,B是表达式,表示能否用B去表示A的所有内容。
否定的用法是 A not like B,或not A like B,与like相反。
返回值为boolean类型,如果A或者B有一个为NULL,则返回值为NULL。
表达式B中的匹配字符只能是 _ 和 %,_ 表示任意单个字符,% 表示任意数量的字符。
select 'hellohive' like 'hello%'; --返回结果:true select 'hellohive' like 'hello_'; --返回结果:false select 'hellohive' like 'hello____'; --返回结果:true 2、rlike/regexp
使用格式:A rlike B,其中A是字符串,B是正则表达式,符合Java正则表达式,表示字符串A是否符合正则表达式B的正则规则,rlike里的r就是regular规则的意思。
否定的用法是 A not rlike B,或not A rlike B,与rlike相反。
返回值为boolean类型,如果A或者B有一个为NULL,则返回值为NULL。
select '\\'; --返回结果:\ select 'hellohive' regexp 'hello(hive)?'; --是否是hello或者hellohive --返回结果:true select 'abc123456' regexp '^\\d+&'; --是否由纯数字组成 --返回结果:false select 'abc123456' regexp '\\d+'; --是否含有数字 --返回结果:true select 'hellohive' rlike '^[a-zA-Z]+$'; --是否由纯字母组成 --返回结果:true select 'hello hive' rlike '^[a-zA-Z]+$'; --返回结果:false 中文匹配:
Q: 明明是post方式发出的,但是控制台查看发现变成get
A: 可能是服务端请求由http变为了https,可以看到请求经历了302重定向,将请求路径改为https即可
NTP(Network Time Protocol,网络时间协议)是基于RFC1305的协议,是一个跨越广域网或局域网的复杂的同步时间协议。一般情况下建议配置在路由器上,当然配置在其它设备上都是可以的。接下来我们根据下面的拓扑图来看一下在路由器上配置NTP服务器的方法以及交换机、windows服务器、Linux服务器如何设置NTP客户端。拓扑如下:
路由器NTPserver上配置如下:
R1>en
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#hostname NTPserver
NTPserver(config)#no ip do lo
NTPserver(config)#line con 0
NTPserver(config-line)#exec-t 0 0
NTPserver(config-line)#logg syn
NTPserver(config-line)#exit
NTPserver(config)#int e0/1
NTPserver(config-if)#int e0/0
NTPserver(config-if)#exi
NTPserver(config)#int e0/0
NTPserver(config-if)#ip ad 192.168.1.1 255.255.255.0
NTPserver(config-if)#no shut
NTPserver(config-if)#
*Mar 1 00:02:39.959: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
*Mar 1 00:02:40.959: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up
NTPserver(config-if)#clock time
文章目录 static关键字、类的加载、属性的初始化问题一、属性的初始化1.1 方法中属性的初始化1.2 类中属性的初始化1.3 属性初始化的顺序(非静态) 二、static关键字三、类的加载与静态数据的初始化3.1 类的加载与数据的初始化3.2 属性的初始化顺序3.3 继承与初始化 static关键字、类的加载、属性的初始化问题 一、属性的初始化 1.1 方法中属性的初始化 对于方法中定义的属性(准确说是局部变量),一定要对其进行初始化操作之后才能对其进行其他操作。
例:
void f() { int i; i++; // 会报错,得先对i进行初始化操作。 } 对于方法的局部变量,如果不对其进行初始化,会在编译时报错。
1.2 类中属性的初始化 对于类中的属性,情况就会不同,Java允许不对其进行初始化,对于那些未被程序员初始化的类中属性,Java会在为它们赋予该类型的默认值。
Java类型的默认值:
8大基本数据类型:byte:0;short:0;int:0;long:0L;float:0.0f;double:0.0d;boolean:false;char:" ";(空字符)引用类型(对象、数组):null 例:
public class InitialValues { int val; // 在类被加载时,会被初始化为0 void addOne() { System.out.println("before_addOne:"+val); val++; } void printInitialValues() { System.out.println("printInitialValues():"val); } public static void main(String[] args) { InitialValues a = new InitialValues(); a.addOne(); a.printInitialValues(); } } /* 程序执行结果: before_addOne:0 printInitialValues():1 */ 对于未手动初始化的类中属性,其自动初始化赋值是在构造方法之前的。例:
Linux图形界面多数使用的是 X Server, 我们有时需要关闭/重启它. 比如: 安装 NVIDIA 的驱动程序时,就需要先关闭 X server; 希望让系统以 server 方式运行,关闭桌面环境以降低不必要的性能损耗.
Ubuntu18.04
Ubuntu18.04 虽然默认使用了gnome桌面,但是经过测试 gdm 并不能很好得工作,通过设置系统启动方式,然后重启来达到关闭 x server 的目的
ps. gdm是GNOME Display Manager, GNOME的桌面环境管理器
# 关闭用户图形界面
sudo systemctl set-default multi-user.target
sudo reboot
# 开启用户图形界面
sudo systemctl set-default graphical.target
sudo reboot
Ubuntu16.04 管理 x server
用gdm管理
sudo /etc/init.d/gdm stop
sudo /etc/init.d/gdm status
sudo /etc/init.d/gdm restart
如果 /etc/init.d 下面没有 gdm 的话,可以尝试另一种方法
用lightdm管理
sudo /etc/init.d/lightdm stop
sudo /etc/init.d/lightdm status
sudo /etc/init.
整理了一些Linux面试题,很基础的。
1:zip的解压方式
2.Linux 内核引导时,从文件__ 中读取要加载的文件系统
答:/etc/fstab
3:Linux 文件系统中每个文件用__节点 来标识。
答:索引节点
4.vi编辑模式下,用__ 进行模式转换
答:ESC
5:检查已安装的文件系统/dev/had5 是否正常,若检查有错,则自动修复,其命令及参数是。
答:fsck -a /dev/had5
6:在Linux 系统下,第二个IDE 通道的硬盘(从盘)被标识为
答:hdb
7、为脚本程序 test.sh指定执行权限的命令以及 参数是
答:chmod a+x test.sh 或者 chmod 755 test.sh
8、如何让一check.sh脚本从每天凌晨2点30分执行
答:30 02 /bin/bash /home/fang/check.sh
9、用一条命令实现删除当前目录下3天前被修改的文件?
答:find ./ -type f -mtime +3 -exec rm -f {} \;
10、写出smtp,pop3,snmp,dns,ftp,http,https,pptp,telnet的端口
11.怎样才能查看当前系统是哪个版本
答:cat /etc/CentOS-release
12、如何修改一台Linux机器的默认编码。
答:sed -i 's/en_US/zh_CN/g' /etc/sysconfig/i18n (centos6) 以修改中文编码为例
sed -i 's/en_US/zh_CN/g' /etc/locale.conf (centos7)
13、写出OSI参考模型
14、.如何用sed删除文件中的空行(包括空格组成的空行)
sed '/^[[:space:]]$/d' file
1.client.c
#define _GNU_SOURCE #include <func.h> int recvCycle(int sfd,void *buf,int dateLen); int main(int argc,char *argv[]) { //申请套接字文件描述符 int sfd = socket(AF_INET,SOCK_STREAM,0); ERROR_CHECK(sfd,-1,"socket"); //链接套接字和IP端口 struct sockaddr_in saddr; saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = inet_addr(argv[1]); saddr.sin_port = htons(atoi(argv[2])); //建立连接 int ret = connect(sfd,(struct sockaddr *)&saddr,sizeof(struct sockaddr)); ERROR_CHECK(ret,-1,"connect"); client_Screen(sfd); char buf[1024]={0}; //接收文件名 int dateLen = 0; recv(sfd,&dateLen,4,0); recv(sfd,buf,dateLen,0); int fd = open(buf,O_RDWR|O_CREAT,0666); //接收文件总长度 off_t fileSize = 0; off_t recvLen = 0; recv(sfd,&dateLen,4,0); recv(sfd,&fileSize,dateLen,0); printf("dateLen = %d,fileSize = %ld\n"
1.main.c文件
要做的事有:
1.初始化客户登录信息表
2.检查启动参数和捕捉线程退出信号
3.定义和初始化线程池
4.初始化TCP
5.创建epoll和用epoll监听sfd
6.进入功能界面
6.(1)判断退出标志位是否改为1,是就进入退出程序
6.(2)若不退出程序,用while(1)监听epoll
6.(3)若现在没有新的sfd连接服务器,给新连接的sfd先来登录,主线程承接登录验证作用
#include "../include/queue.h" #include "../include/head.h" #include "../include/threadpool.h" #include "../include/mainthread.h" #include "../include/childthread.h" #include "../include/register_login.h" //设置全局变量退出,用来表示主线程的退出标志 int exitflag = 0; void sigFunc(int sigNum) { printf("signal%d is coming\n",sigNum); //主线程收到退出信号,修改退出标志位值,0代表正常运行,1代表退出 exitflag = 1; } int main(int argc,char *argv[]) { //1.初始化客户登录信息表,结构体login_Flag_List存储连接的sfd和连接状态 memset(login_Flag_List,0,sizeof(Login_Flag_t)*CLIENT_NUM); //2.检查启动参数和捕捉线程退出信号 // ./main ip port threadNum ARGS_CHECK(argc,4); //捕捉信号,SIGUSR1为线程退出发出的信号 signal(SIGUSR1,sigFunc); //接受开启的线程数 int threadNum = atoi(argv[3]); //3.定义和初始化线程池 ThreadPool_t threadPool; memset(&threadPool,0,sizeof(threadPool)); //初始化线程池 threadPoolInit(&threadPool,threadNum); //启动线程池 threadPoolStart(&threadPool); //4.
文章目录 环境前言步骤创建虚拟机安装系统 环境 Windows 10 专业版
版本号 2004
操作系统版本 19041.867
Hyper-V 管理器
版本 10.0.19041.1
Ubuntu 20.04
前言 在 Win10 的 Hyper-V 虚拟机上安装 Ubuntu 20.04.
步骤 创建虚拟机 打开 Hyper-V 管理器;
新建虚拟机
指定名称和位置(位置这里我使用默认)
指定代数
分配内存
配置网络
连接虚拟硬盘
安装选项,配置 ISO 安装文件
完成
安装系统 连接虚拟机
启动虚拟机
选择安装提示语言
安装系统
选择系统语言
键盘布局
最小安装
安装类型
写入确认
选择时区
创建账号
安装完毕
登录系统
1.childthread.h
#ifndef __CHILDTHREAD_H__ #define __CHILDTHREAD_H__ #include "head.h" int transFile(int clientfd); void *threadFunc(void *p); #endif 2.head.h
#ifndef __HEAD_H__ #define __HEAD_H__ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include <sys/types.h> #include <dirent.h> #include <pwd.h> #include <grp.h> #include <time.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/select.h> #include <sys/time.h> #include <sys/wait.h> #include <sys/ipc.h> #include <sys/shm.h> #include <syslog.h> #include <sys/sem.h> #include <sys/msg.h> #include <signal.h> #include <pthread.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.
Matlab作图后的各种调整方法——线条、坐标、标题、图例 文章目录 Matlab作图后的各种调整方法——线条、坐标、标题、图例一 , 写在前面1.整个图窗 Figure(gcf)2.我们使用命令做出的线条 Line,例如plot命令3.坐标轴 Axes (gca) 二 , 改变图中线条的粗细、颜色、标记等1. 线条颜色:'Color'2. 线型:'LineStyle'3. 线宽:'LineWidth'4. 标记符号:'Marker'5. 标记轮廓颜色:'MarkerEdgeColor' 和标记填充颜色:'MarkerFaceColor'6.标记大小:'MarkerSize'7. 标记所在数据点的索引:'MarkerIndices' 三 , 那么指定对象名有什么用呢四 , 改变坐标轴的名称以及特性1. 设置坐标轴名称2. 改变坐标轴特性2.1 改变字体大小:'FontSize'2.2 改变字符粗细:'FontWeight'2.3 改变字体名称:'FontName'2.4 改变文本颜色:'Color' 五 ,改变坐标轴的刻度以及范围1. 设置或查询x轴刻度值:'xtick'2. 设置或查询x轴标签:'xticklabel'3. 使坐标轴刻度更精细:'xminortick'4. 设置坐标轴范围:'xlim'5. 设置网格可见性:grid on/off6. 设置边框可见性:box on/off7. 设置坐标轴可见性:axis on/off8. 其他坐标形式的设置 六 , 给绘制的图像设置标题七 , 给图形增加图例1. 增加图例2. 改变字体大小:'FontSize'3. 改变字体名称:'FontName'4. 改变字符粗细:'FontWeight'5. 改变文本颜色:'TextColor'6. 改变图例框填充颜色:'Color'7.改变图例所在的位置:'Location'8.任意改变图例所在的位置和大小:'Position'9.改变图例的堆叠方向:'Orientation'10.改变图例框的可见性:'boxon'/'boxoff'11.改变图例的可见性:'hide'/'show' 一 , 写在前面 首先介绍一个概念,我们在Matlab中作的图分为三个部分,分别是:
1.整个图窗 Figure(gcf) 2.我们使用命令做出的线条 Line,例如plot命令 3.坐标轴 Axes (gca) 所以看似我们使用plot命令画出了一张图,实际上我们只是改变了这张图的一个部分。
在Matlab中,我们可以分别对这三个部分进行改变,其中整个图窗的默认对象名是 gcf,坐标轴的默认对象名是 gca,而线条通常是自己绘图时手动定义的,例如:
修改配置参数 采用 set GLOBAL 命令,如:set GLOBAL net_write_timeout=120;在Mysql的配置文件中对参数值进行修改,之后重启数据库服务即可 查看配置参数 命令:show global variables;如表所示 Variable_nameValueactivate_all_roles_on_loginOFFauto_generate_certsONauto_increment_increment1auto_increment_offset1autocommitONautomatic_sp_privilegesONavoid_temporal_upgradeOFFback_log80basedirC:\Program Files\MySQL\MySQL Server 8.0\big_tablesOFFbind_address*binlog_cache_size32768binlog_checksumCRC32binlog_direct_non_transactional_updatesOFFbinlog_error_actionABORT_SERVERbinlog_expire_logs_seconds2592000binlog_formatROWbinlog_group_commit_sync_delay0binlog_group_commit_sync_no_delay_count0binlog_gtid_simple_recoveryONbinlog_max_flush_queue_time0binlog_order_commitsONbinlog_row_imageFULLbinlog_row_metadataMINIMALbinlog_row_value_options binlog_rows_query_log_eventsOFFbinlog_stmt_cache_size32768binlog_transaction_dependency_history_size25000binlog_transaction_dependency_trackingCOMMIT_ORDERblock_encryption_modeaes-128-ecbbulk_insert_buffer_size8388608caching_sha2_password_auto_generate_rsa_keysONcaching_sha2_password_private_key_pathprivate_key.pemcaching_sha2_password_public_key_pathpublic_key.pemcharacter_set_clientutf8mb4character_set_connectionutf8mb4character_set_databaseutf8mb4character_set_filesystembinarycharacter_set_resultsutf8mb4character_set_serverutf8mb4character_set_systemutf8character_sets_dirC:\Program Files\MySQL\MySQL Server 8.0\share\charsets\check_proxy_usersOFFcollation_connectionutf8mb4_0900_ai_cicollation_databaseutf8mb4_0900_ai_cicollation_serverutf8mb4_0900_ai_cicompletion_typeNO_CHAINconcurrent_insertAUTOconnect_timeout10core_fileOFFcte_max_recursion_depth1000datadirD:\ProgramData\MySQL\MySQL Server 8.0\Data\default_authentication_plugincaching_sha2_passworddefault_collation_for_utf8mb4utf8mb4_0900_ai_cidefault_password_lifetime0default_storage_engineInnoDBdefault_tmp_storage_engineInnoDBdefault_week_format0delay_key_writeONdelayed_insert_limit100delayed_insert_timeout300delayed_queue_size1000disabled_storage_engines disconnect_on_expired_passwordONdiv_precision_increment4end_markers_in_jsonOFFenforce_gtid_consistencyOFFeq_range_index_dive_limit200event_schedulerONexpire_logs_days0explicit_defaults_for_timestampONflushOFFflush_time0foreign_key_checksONft_boolean_syntax+ -><()~*:""&|ft_max_word_len84ft_min_word_len4ft_query_expansion_limit20ft_stopword_file(built-in)general_logOFFgeneral_log_fileNBSP.loggroup_concat_max_len1024gtid_executed384632e4-e18f-11e8-a8b6-00163e2e5672:1-198655,
385a0fee-e18f-11e8-a276-00163e10a665:1-34714384gtid_executed_compression_period1000gtid_modeOFFgtid_owned gtid_purged384632e4-e18f-11e8-a8b6-00163e2e5672:1-198655,
385a0fee-e18f-11e8-a276-00163e10a665:1-34714384have_compressYEShave_dynamic_loadingYEShave_geometryYEShave_opensslYEShave_profilingYEShave_query_cacheNOhave_rtree_keysYEShave_sslYEShave_statement_timeoutYEShave_symlinkDISABLEDhistogram_generation_max_mem_size20000000host_cache_size279hostnamenbspinformation_schema_stats_expiry86400init_connect init_file init_slave innodb_adaptive_flushingONinnodb_adaptive_flushing_lwm10innodb_adaptive_hash_indexONinnodb_adaptive_hash_index_parts8innodb_adaptive_max_sleep_delay150000innodb_api_bk_commit_interval5innodb_api_disable_rowlockOFFinnodb_api_enable_binlogOFFinnodb_api_enable_mdlOFFinnodb_api_trx_level0innodb_autoextend_increment64innodb_autoinc_lock_mode2innodb_buffer_pool_chunk_size8388608innodb_buffer_pool_dump_at_shutdownONinnodb_buffer_pool_dump_nowOFFinnodb_buffer_pool_dump_pct25innodb_buffer_pool_filenameib_buffer_poolinnodb_buffer_pool_instances1innodb_buffer_pool_load_abortOFFinnodb_buffer_pool_load_at_startupONinnodb_buffer_pool_load_nowOFFinnodb_buffer_pool_size8388608innodb_change_buffer_max_size25innodb_change_bufferingallinnodb_checksum_algorithmcrc32innodb_cmp_per_index_enabledOFFinnodb_commit_concurrency0innodb_compression_failure_threshold_pct5innodb_compression_level6innodb_compression_pad_pct_max50innodb_concurrency_tickets5000innodb_data_file_pathibdata1:12M:autoextendinnodb_data_home_dir innodb_deadlock_detectONinnodb_dedicated_serverOFFinnodb_default_row_formatdynamicinnodb_directories innodb_disable_sort_file_cacheOFFinnodb_doublewriteONinnodb_fast_shutdown1innodb_file_per_tableONinnodb_fill_factor100innodb_flush_log_at_timeout1innodb_flush_log_at_trx_commit1innodb_flush_methodunbufferedinnodb_flush_neighbors0innodb_flush_syncONinnodb_flushing_avg_loops30innodb_force_load_corruptedOFFinnodb_force_recovery0innodb_ft_aux_table innodb_ft_cache_size8000000innodb_ft_enable_diag_printOFFinnodb_ft_enable_stopwordONinnodb_ft_max_token_size84innodb_ft_min_token_size3innodb_ft_num_word_optimize2000innodb_ft_result_cache_limit2000000000innodb_ft_server_stopword_table innodb_ft_sort_pll_degree2innodb_ft_total_cache_size640000000innodb_ft_user_stopword_table innodb_io_capacity200innodb_io_capacity_max2000innodb_lock_wait_timeout50innodb_log_buffer_size1048576innodb_log_checksumsONinnodb_log_compressed_pagesONinnodb_log_file_size50331648innodb_log_files_in_group2innodb_log_group_home_dir.\innodb_log_spin_cpu_abs_lwm80innodb_log_spin_cpu_pct_hwm50innodb_log_wait_for_flush_spin_hwm400innodb_log_write_ahead_size8192innodb_lru_scan_depth1024innodb_max_dirty_pages_pct90.000000innodb_max_dirty_pages_pct_lwm10.000000innodb_max_purge_lag0innodb_max_purge_lag_delay0innodb_max_undo_log_size1073741824innodb_monitor_disable innodb_monitor_enable innodb_monitor_reset innodb_monitor_reset_all innodb_old_blocks_pct37innodb_old_blocks_time1000innodb_online_alter_log_max_size134217728innodb_open_files300innodb_optimize_fulltext_onlyOFFinnodb_page_cleaners1innodb_page_size16384innodb_print_all_deadlocksOFFinnodb_print_ddl_logsOFFinnodb_purge_batch_size300innodb_purge_rseg_truncate_frequency128innodb_purge_threads4innodb_random_read_aheadOFFinnodb_read_ahead_threshold56innodb_read_io_threads4innodb_read_onlyOFFinnodb_redo_log_encryptOFFinnodb_replication_delay0innodb_rollback_on_timeoutOFFinnodb_rollback_segments128innodb_sort_buffer_size1048576innodb_spin_wait_delay6innodb_stats_auto_recalcONinnodb_stats_include_delete_markedOFFinnodb_stats_methodnulls_equalinnodb_stats_on_metadataOFFinnodb_stats_persistentONinnodb_stats_persistent_sample_pages20innodb_stats_transient_sample_pages8innodb_status_outputOFFinnodb_status_output_locksOFFinnodb_strict_modeONinnodb_sync_array_size1innodb_sync_spin_loops30innodb_table_locksONinnodb_temp_data_file_pathibtmp1:12M:autoextendinnodb_thread_concurrency25innodb_thread_sleep_delay0innodb_tmpdir innodb_undo_directory.\innodb_undo_log_encryptOFFinnodb_undo_log_truncateONinnodb_undo_tablespaces2innodb_use_native_aioONinnodb_version8.0.12innodb_write_io_threads4interactive_timeout28800internal_tmp_disk_storage_engineInnoDBinternal_tmp_mem_storage_engineTempTablejoin_buffer_size262144keep_files_on_createOFFkey_buffer_size8388608key_cache_age_threshold300key_cache_block_size1024key_cache_division_limit100keyring_operationsONlarge_files_supportONlarge_page_size0large_pagesOFFlc_messagesen_USlc_messages_dirC:\Program Files\MySQL\MySQL Server 8.0\share\lc_time_namesen_USlicenseGPLlocal_infileOFFlock_wait_timeout31536000log_binONlog_bin_basenameD:\ProgramData\MySQL\MySQL Server 8.0\Data\binloglog_bin_indexD:\ProgramData\MySQL\MySQL Server 8.0\Data\binlog.indexlog_bin_trust_function_creatorsOFFlog_bin_use_v1_row_eventsOFFlog_error.\NBSP.errlog_error_serviceslog_filter_internal; log_sink_internallog_error_verbosity2log_outputFILElog_queries_not_using_indexesOFFlog_slave_updatesONlog_slow_admin_statementsOFFlog_slow_slave_statementsOFFlog_statements_unsafe_for_binlogONlog_syslogONlog_syslog_tag log_throttle_queries_not_using_indexes0log_timestampsUTClong_query_time10.000000low_priority_updatesOFFlower_case_file_systemONlower_case_table_names1mandatory_roles master_info_repositoryTABLEmaster_verify_checksumOFFmax_allowed_packet4194304max_binlog_cache_size18446744073709547520max_binlog_size1073741824max_binlog_stmt_cache_size18446744073709547520max_connect_errors100max_connections151max_delayed_threads20max_digest_length1024max_error_count1024max_execution_time0max_heap_table_size16777216max_insert_delayed_threads20max_join_size18446744073709551615max_length_for_sort_data4096max_points_in_geometry65536max_prepared_stmt_count16382max_relay_log_size0max_seeks_for_key4294967295max_sort_length1024max_sp_recursion_depth0max_user_connections0max_write_lock_count4294967295metadata_locks_cache_size1024metadata_locks_hash_instances8min_examined_row_limit0myisam_data_pointer_size6myisam_max_sort_file_size107374182400myisam_mmap_size18446744073709551615myisam_recover_optionsOFFmyisam_repair_threads1myisam_sort_buffer_size8388608myisam_stats_methodnulls_unequalmyisam_use_mmapOFFmysql_native_password_proxy_usersOFFmysqlx_bind_address*mysqlx_connect_timeout30mysqlx_document_id_unique_prefix0mysqlx_idle_worker_thread_timeout60mysqlx_interactive_timeout28800mysqlx_max_allowed_packet67108864mysqlx_max_connections100mysqlx_min_worker_threads2mysqlx_port33060mysqlx_port_open_timeout0mysqlx_read_timeout30mysqlx_socket/tmp/mysqlx.sockmysqlx_ssl_ca mysqlx_ssl_capath mysqlx_ssl_cert mysqlx_ssl_cipher mysqlx_ssl_crl mysqlx_ssl_crlpath mysqlx_ssl_key mysqlx_wait_timeout28800mysqlx_write_timeout60named_pipeOFFnet_buffer_length16384net_read_timeout30net_retry_count10net_write_timeout60newOFFngram_token_size2offline_modeOFFoldOFFold_alter_tableOFFopen_files_limit6209optimizer_prune_level1optimizer_search_depth62optimizer_switchindex_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_indexes=offoptimizer_traceenabled=off,one_line=offoptimizer_trace_featuresgreedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subselect=onoptimizer_trace_limit1optimizer_trace_max_mem_size1048576optimizer_trace_offset-1parser_max_mem_size18446744073709551615password_history0password_reuse_interval0performance_schemaONperformance_schema_accounts_size-1performance_schema_digests_size10000performance_schema_error_size4392performance_schema_events_stages_history_long_size10000performance_schema_events_stages_history_size10performance_schema_events_statements_history_long_size10000performance_schema_events_statements_history_size10performance_schema_events_transactions_history_long_size10000performance_schema_events_transactions_history_size10performance_schema_events_waits_history_long_size10000performance_schema_events_waits_history_size10performance_schema_hosts_size-1performance_schema_max_cond_classes80performance_schema_max_cond_instances-1performance_schema_max_digest_length1024performance_schema_max_digest_sample_age60performance_schema_max_file_classes80performance_schema_max_file_handles32768performance_schema_max_file_instances-1performance_schema_max_index_stat-1performance_schema_max_memory_classes450performance_schema_max_metadata_locks-1performance_schema_max_mutex_classes300performance_schema_max_mutex_instances-1performance_schema_max_prepared_statements_instances-1performance_schema_max_program_instances-1performance_schema_max_rwlock_classes60performance_schema_max_rwlock_instances-1performance_schema_max_socket_classes10performance_schema_max_socket_instances-1performance_schema_max_sql_text_length1024performance_schema_max_stage_classes150performance_schema_max_statement_classes212performance_schema_max_statement_stack10performance_schema_max_table_handles-1performance_schema_max_table_instances-1performance_schema_max_table_lock_stat-1performance_schema_max_thread_classes100performance_schema_max_thread_instances-1performance_schema_session_connect_attrs_size512performance_schema_setup_actors_size-1performance_schema_setup_objects_size-1performance_schema_users_size-1persisted_globals_loadONpid_fileD:\ProgramData\MySQL\MySQL Server 8.0\Data\nbsp.pidplugin_dirC:\Program Files\MySQL\MySQL Server 8.0\lib\plugin\port3306preload_buffer_size32768profilingOFFprofiling_history_size15protocol_version10query_alloc_block_size8192query_prealloc_size8192range_alloc_block_size4096range_optimizer_max_mem_size8388608rbr_exec_modeSTRICTread_buffer_size8192read_onlyOFFread_rnd_buffer_size1regexp_stack_limit8000000regexp_time_limit32relay_lognbsp-relay-binrelay_log_basenameD:\ProgramData\MySQL\MySQL Server 8.0\Data\nbsp-relay-binrelay_log_indexD:\ProgramData\MySQL\MySQL Server 8.0\Data\nbsp-relay-bin.indexrelay_log_info_filerelay-log.inforelay_log_info_repositoryTABLErelay_log_purgeONrelay_log_recoveryOFFrelay_log_space_limit0report_host report_password report_port3306report_user require_secure_transportOFFrpl_read_size8192rpl_stop_slave_timeout31536000schema_definition_cache256secure_file_privC:\ProgramData\MySQL\MySQL Server 8.
昨天BOSS直聘上有个47岁的软件开发人员投简历,应聘android应用开发工程师,还是有点诧异的。
于是问他,这是个技术岗位,他是否偏重管理岗,项目经理什么的。
他说他偏技术,是技术经理偏重技术的。
我以为遇到个全才,毕竟95年毕业的本科生,211学校。
当年大学没有扩招,应该是天之骄子了。
工作25年了,经验应该很丰富从简历看,99年开始在一家日企工作到今年1月,已经21年了。
90年代日企应该是非常吃香的。
我估计他在里面工作21年,是想干到退休的,没想到被裁员,还是在47岁这个尴尬年龄,然后长达半年没有工作。
今天面试,结果技术稀松,管理能力也没感觉到有什么突出能力。
如果这是一个职场新人,那么还是勉强认为是可以培养的。但是47岁的职场老将了。
一般公司是不会考虑培养的问题了,只会进来就给任务让其承担起来,而能力如果不够,是不给成长机会的。
而为什么给他面试机会,一者公司非常缺人,二者看他简历,跟我们公司做的契合度比较高。工作经验可以帮助其迅速上手,如果他多年一直没有放下技术,保持技术敏感和积累,来了就能独当一面的。可惜并没有达到预期。
如果随时间的变化,如果只增长了年龄,没有能力的提升。竞争力是会变差的,但是如果年龄增加,随之能力不断提升。年龄增大,也还是会有公司给你机会,毕竟经验也是一种财富。怕就怕在能力没有提升,多年停滞。
做好技术储备才是当下最重要的事 职业现状我想大家心里也清楚,没办法变改职业,就只能想办法改变自己。自我审视,持续学习,做好规划,以10~20年的职业生涯为基础,未雨绸缪。不要等到40岁还在到处投简历面试,家里等着米下锅,那就太被动了。
做为一名Android开发者,我想分享一下这些年来,我对于技术一些归纳和总结,和自己对作为一名Android高级开发者需要掌握那些技能的笔记分享,希望能帮助到有心在技术这条道路上一路走到黑的朋友!
1.2020大厂面试高频知识点 一、图片
二、网络和安全机制
三、数据库
四、插件化、模块化、组件化、热修复、增量更新、Gradle
五、架构设计和设计模式
六、性能优化
七、Android Framework
八、Android优秀三方库源码
2.Jetpack架构组件从入门到精通 Android Jetpack - NavigationAndroid Jetpack - Data BindingAndroid Jetpack - ViewModel & LiveDataAndroid Jetpack - RoomAndroid Jetpack - PagingAndroid Jetpack - WorkMangerAndroid Jetpack架构组件之LifecycleAndroid Jetpack Compose 最全上手指南 3.Framework精编内核解析 主要内容包含:
深入解析Binder深入解析HandlerDalvik VM 进程系统深入解析 WMSPackagerManagerService 4.Kotlin强化实战(附Demo) 第一章 Kotlin入门教程
第二章 Kotlin 实战避坑指南
第三章 项目实战《Kotlin Jetpack 实战》
选择项目 右键 属性 调试选项 命令参数 >log.txt即可
同样的操作也适用于 输入参数的时候,可以使用 < input.txt 即可
Nacos的使用 前言: 本次主要介绍nacos的使用,包括服务发现和注册中心。如有错误,请指正 微服务架构 springboot、springcloud、nacos、dubbo、mybatis-plus 一:nacos定义 Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。 官方介绍是这样的:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务 发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构的服务基础设施。 官网地址:https://nacos.io.
二:nacos特性 Nacos主要提供以下四大功能:目前只了解前俩种 1. 服务发现与服务健康检查 Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防 止向不健康的主机或服务实例发送请求。 2. 动态配置管理 动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新 部署应用程序,这使配置的更改更加高效和灵活。 3. 动态DNS服务 4. 服务和元数据管理 三:开始 安装nacos server 1.官网下载 windows版本
访问地址: http://127.0.0.1:8848/nacos 初始账户密码都是:nacos
2.mysql安装。省略
3.创建数据库:nacos_config,下面是sql
/******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info */ /******************************************/ CREATE TABLE `config_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(255) DEFAULT NULL, `content` longtext NOT NULL COMMENT 'content', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip', `app_name` varchar(128) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', `c_desc` varchar(256) DEFAULT NULL, `c_use` varchar(64) DEFAULT NULL, `effect` varchar(64) DEFAULT NULL, `type` varchar(64) DEFAULT NULL, `c_schema` text, PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info_aggr */ /******************************************/ CREATE TABLE `config_info_aggr` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(255) NOT NULL COMMENT 'group_id', `datum_id` varchar(255) NOT NULL COMMENT 'datum_id', `content` longtext NOT NULL COMMENT '内容', `gmt_modified` datetime NOT NULL COMMENT '修改时间', `app_name` varchar(128) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info_beta */ /******************************************/ CREATE TABLE `config_info_beta` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(128) NOT NULL COMMENT 'group_id', `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtext NOT NULL COMMENT 'content', `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip', `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_info_tag */ /******************************************/ CREATE TABLE `config_info_tag` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(128) NOT NULL COMMENT 'group_id', `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', `tag_id` varchar(128) NOT NULL COMMENT 'tag_id', `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtext NOT NULL COMMENT 'content', `md5` varchar(32) DEFAULT NULL COMMENT 'md5', `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', `src_user` text COMMENT 'source user', `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip', PRIMARY KEY (`id`), UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = config_tags_relation */ /******************************************/ CREATE TABLE `config_tags_relation` ( `id` bigint(20) NOT NULL COMMENT 'id', `tag_name` varchar(128) NOT NULL COMMENT 'tag_name', `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type', `data_id` varchar(255) NOT NULL COMMENT 'data_id', `group_id` varchar(128) NOT NULL COMMENT 'group_id', `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', `nid` bigint(20) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`nid`), UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`), KEY `idx_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = group_capacity */ /******************************************/ CREATE TABLE `group_capacity` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_group_id` (`group_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = his_config_info */ /******************************************/ CREATE TABLE `his_config_info` ( `id` bigint(64) unsigned NOT NULL, `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `data_id` varchar(255) NOT NULL, `group_id` varchar(128) NOT NULL, `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', `content` longtext NOT NULL, `md5` varchar(32) DEFAULT NULL, `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00', `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00', `src_user` text, `src_ip` varchar(20) DEFAULT NULL, `op_type` char(10) DEFAULT NULL, `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', PRIMARY KEY (`nid`), KEY `idx_gmt_create` (`gmt_create`), KEY `idx_gmt_modified` (`gmt_modified`), KEY `idx_did` (`data_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造'; /******************************************/ /* 数据库全名 = nacos_config */ /* 表名称 = tenant_capacity */ /******************************************/ CREATE TABLE `tenant_capacity` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID', `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数', `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', `gmt_create` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', `gmt_modified` datetime NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表'; CREATE TABLE `tenant_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', `kp` varchar(128) NOT NULL COMMENT 'kp', `tenant_id` varchar(128) default '' COMMENT 'tenant_id', `tenant_name` varchar(128) default '' COMMENT 'tenant_name', `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc', `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source', `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`), KEY `idx_tenant_id` (`tenant_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info'; CREATE TABLE users ( username varchar(50) NOT NULL PRIMARY KEY, password varchar(500) NOT NULL, enabled boolean NOT NULL ); CREATE TABLE roles ( username varchar(50) NOT NULL, role varchar(50) NOT NULL ); INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN'); 4.
方法大致分为图解法、单纯形法两种,这里主要讨论单纯形法。
1.概念:基本解、基本可行解 上面的基本解若满足XB>=0,则称x为基本可行解。
几个重要结论:
1.可行解x是标准型线性规划(LP)的基本可行解的充要条件是可行解x 的正分量所对应的矩阵A的列向量线性无关。
2.x是标准型线性规划(LP)的一个基本可行解的充要条件是x为可行域的顶点。
3.一个标准的LP问题如果有可行解,则至少有一个基本可行解。
4.一个标准的LP问题如果有有限的最优解,则一定存在一个基本可行解是最优解。
5.若LP问题的可行域有界,则线性规划问题必有最优解。
例题1:
2.单纯形法 例题2:
若系数矩阵中不含单位矩阵,没有明显的基可行解时,常采用引入非负人工变量的方法来求初始基可行解。下面分别介绍常用的“大M法”和“两阶段法”。
大M法:M是相当大的正数(可以理解为正无穷),对人工变量起到惩罚的作用,逼迫辅助线性规划的最优解中人工变量均为0.要注意的是,人工变量一旦出基,则在迭代时不再参与计算.
例题3:
两阶段法:引入人工变量xn+1,···,xn+m,构造辅助线性规划问题
例题4:
3.对偶单纯形法 弱对偶定理:极小化线性规划问题的目标函数值不小于其对偶规划的目标函数值。
推论1:若原始线性规划问题与对偶线性规划问题之一具有无界的目标函数值,则另一个无可行解。
推论2:原问题 任何一个 可行解 的目标函数值 , 都是其对偶问题 目标函数值的下界 ; 反之 , 对偶问题 任何一个 可行解 的目标函数值 , 都是其原问题 目标函数的上界 ;
强对偶定理:若原始线性规划问题与对偶规划问题之一有最优解,则另一个也有最优解,且他们的目标函数最优值相等。
例题5:
4.灵敏度分析 待更新
linux 大家一般把web目录放在哪个分区下面呢?
放在/data目录下面安全吗?
我之前都是用的lnmp集成环境的默认配置web目录放在了/home/wwwroot/里面
这次想换到/data 不知道是否OK呢?
回答
安全是由目录权限所决定的,而不是放在/home还是/data的问题。比如你的nginx是由www用户启动的,html目录名为htdocs,可以按如下设置:
drwxr----- 2 www www 6 02-17 15:20 htdocs
其中www用户尽量用-s /sbin/nologin禁止登录,而具体是否要给写(w)和执行(x)权限,得看你需求。
注意:赋予权限尽量是最小化原则。
BTW: 如果你/home目录下的html过大,你完全可以mv到/data目录,然后用ln -s链接到/home目录。
/data一般是用来存放数据的,比如mongodb的数据库就存放在这里。
apache的web目录是在/var/www,你可以考虑一下。
一般放在/var/www目录下面
可以添加一个Web用户.Web目录放在用户目录下。一般系统文件目录最好不要更改
支持 @WangShuo 的回答,不过在补充一下。
很多时候,我们将不同类型的文件放入到不同的目录的目的是为了做好规划和规范。
如果只是自己一个人,那随便你怎么来放置你的文件,只要自己能够找到就可以了。
但是,如果涉及到团队合作,最好有一个规范,比如/data这个目录,就应该放一些数据的文件。web项目可以放在/webroot,这样大家都知道这个目录下面放置的文件是做什么用的了。
分享一例位置约束实例
如下图所示,出现这个警告的意思是在一个bank中时钟管理器不够用需要到其他bank中找一个,但这不是最优的解决方案,如果要这么处理就需要在约束文件中进行约束
先分配一下IO对应的时钟管理器。A1分配mmcm1,A2分配PLL,A3分配mmcm2,如下图:
可以在属性中获取时钟管理器的坐标:
mmcm1的坐标是MMCME2_ADV_X1Y3
pll的坐标是PLLE2_ADV_X1Y2
mmcm2的坐标是MMCME2_ADV_X1Y2
可以在Schematic中找到时钟管理器的网络路径:
鼠标选中目标器件,在tcl中输入get_selected_objects命令就会打印出目标路径
约束:
消除警告
set_property CLOCK_DEDICATED_ROUTE BACKBONE [get_nets clk_9516]
位置约束
set_property LOC MMCME2_ADV_X1Y3 [get_cells u_clk/U_CLK_CM1/u_CM1/inst/mmcm_adv_inst]
位置约束
set_property LOC PLLE2_ADV_X1Y2
[get_cells u_dataProcess/u_dataProcess_1dfft_2/u_ad_interface_1_5/u_mmcm_ad_I/inst/plle2_adv_inst]
位置约束
set_property LOC MMCME2_ADV_X1Y2
[get_cells u_dataProcess/u_dataProcess_1dfft_2/u_ad_interface_1_5/u_mmcm_ad_Q/inst/mmcm_adv_inst]
功能描述
根据名称可以看出,unzip命令解压缩由zip生成的压缩文件,是与zip互逆的一对工具。
命令语 法
unzip [-cflptuvz][-agCjLMnoqsVX][-P < 密码 >][.zip 文件 ][ 文件 ][-d < 目录 >][-x < 文件 >] 或 unzip [-Z]
选项含义
选项
含义
-c
将解压缩的结果显示到屏幕上,并对字符做适当的转换。
-f
更新现有的文件。
-l
显示压缩文件内所包含的文件。
-p
会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-t
检查压缩文件是否正确。
-u
但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v
执行是时显示详细的信息。
-z
仅显示压缩文件的备注文字。
-a
对文本文件进行必要的字符转换。
-b
不要对文本文件进行字符转换。
-C
压缩文件中的文件名称区分大小写。
-j
不处理压缩文件中原有的目录路径。
-L
将压缩文件中的全部文件名改为小写。
-M
将输出结果送到 more 程序处理。
-n
解压缩时不要覆盖原有的文件。
-o
不必先询问用户, unzip执行后覆盖原有文件。
-P
使用zip的密码选项。
-q
执行时不显示任何信息。
-s
将文件名中的空白字符转换为底线字符。
-V
保留VMS的文件版本信息。
-X
Docker Swarm管理 本章资源请访问:
https://download.csdn.net/download/weixin_54373617/18740064
技能目标: 了解 Docker Swarm 基本特性
理解 Docker Swarm 基本架构
掌握 Docker Swarm 集群部署
掌握 Docker Swarm 节点管理
掌握 Docker Swarm 服务管理
容器编排部署工具除 Google 推出的 Kubernetes 之外,还有 Docker 发布的 Swarm 与Mesos 推出的 Marathon。本章将从基本概念、工作原理与安装部署及管理等方面介绍Docker 官方推出的 Docker Swarm。
案例一 Docker Swarm 群集部署 Docker 自诞生以来,其容器特性以及镜像特性给 Dev(b编程)Ops(运维) 爱好者带来诸多方便。然而在很长一段时间内,Docker 只能在单机上运行,其跨主机部署、运行与管理能力颇受外界诟病。跨主机能力薄弱,导致 Docker 容器与主机的形成高度耦合,降低了 Docker 容器的灵活性,难以实现容器的迁移、分组等功能。
案例概述 案例前置知识点 Docker Swarm 概述 Docker Swarm 是 Docker 社区提供的基于 Docker 的集群管理调度工具,能够将多台主机构建成一个 Docker 集群,用户通过 API 来管理多个主机上的 Docker,并结合 Overlay 网络实现容器的调度与相互访问。
1、使用grep -rnw查找指定文本grep -rnw '/path/to/somewhere/' -e 'pattern'
-r或-R 递归遍历目录及子目录
-n 是行号
-w 代表匹配整个单词。
-l 列出文件内容符合的文件名称。“显示文件名,而不是结果本身”。
--exclude,--include,--exclude-dir标志可用于高效搜索:
搜索扩展名为.c或.h的文件:grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
搜索以.o扩展名结尾的所有文件:grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
对于目录,可以通过--exclude-dir参数排除特定目录。例如,这将排除dirs dir1/,dir2/及其全部与*.dst/匹配的目录:grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
有关更多选项,请查阅man grep。
2、使用grep -Ril查找指定文本
grep -Ril "text-to-find-here" /
i 代表忽略大小写(在您的情况下为可选)。
R 代表递归。
l 代表“显示文件名,而不是结果本身”。
/ 代表从计算机的根目录开始。
3、使用silversearcher查找文本
内容极速搜索,递归搜索路径中的模式。像grep或ack,但更快,安装命令及相关说明参考下面文档。ag [FILE-TYPE] [OPTIONS] PATTERN [PATH]
FILE-TYPE 如果忽略,ag会搜索它支持的所有文件类型(按后缀名) PATH可以是dir,也可以是filename, 如果忽略,就会搜索当前路径下的所有支持的文件
查看支持的文件类型ag --list-file-types
常用参数
-i 忽略大小写
-l 只列出文件名
-g 文件名匹配
用putty、xshell等软件远程linux的命令行模式大家应该都会了,假如需要远程linux的桌面要怎么办呢?下面本人就讲下在Windows系统平台下使用TigerVNC远程登录带桌面的Linux系统。
软件名称:VNC Password Recovery(VNC密码恢复) v2.0 官方安装版软件大小:1.62MB更新时间:2014-11-21立即下载
1、我们先在windows主机上下载TigerVNC软件包。TigerVNC是一款开源免费的VNC连接软件,我们可以通过它对带桌面的linux主机进行远程。这里,我们从SourceForge网站下载TigerVNC软件包。
2、安装TigerVN,打开下载的tigervnc-2.30.exe可执行文件。双击进行安装,点击“运行”;
3、点击“Next”;勾选“I accept the agreement"复选框,点击”Next“;
4、选择TigerVNC的安装路径,我们这里选择”D:\Program Files\TigerVNC“,点击”Next“;点击”Next“;
5、保持默认的配置,点击”Next“;点击”Install“;
6、点击”Finish“至此,TigerVNC安装完毕。
7、下来我们来对linux主机进行配置,linux被远程端需要安装TigerVNC服务。
命令:
yum install -y tigervnc tigervnc-server //安装tigervnc
vncserver //设置vnc登陆密码
vim /etc/sysconfig/vncserver //对该文件最后两行的注释,并修改VNCSERVER=“2:myusername"为VNCSERVERS="1:root"。
service vncserver restart //重启vncserver服务
8、使用TigerVNC远程连接服务器,
在TigerVNC安装目录下(D:\Program Files\TigerVNC),打开vncviewer.exe,然后在VNC server框中填写”服务器IP:1“,输入服务器密码信息,点击”OK“
注意事项:注意linux端服务器要把selinux防火墙关闭掉,系统防火墙开的话要把 5900添加到允许里。
看这个
https://blog.csdn.net/qq_41452937/article/details/107526448
https://blog.csdn.net/symuamua/article/details/104407177
Hyper-V 安装 Ubuntu20.04 前言正文1. 准备工作2. 分区方案3. 问题及解决方案 参考 前言 想要学习linux,查阅相关资料后决定采用Hyper-V + Ubuntu20.04搭建linuxu环境,顺便学习一下Markdown语法。
正文 1. 准备工作 启用Hyper-V:
参考: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v
安装Ubuntu:
参考: https://blog.csdn.net/ZChen1996/article/details/106042635
Tips: 安装完成后需要禁用虚拟机的安全启动,否则无法启动。
2. 分区方案 可以选择自动分区,也可以选择手动分区。
个人分区方案 ( 总大小50G ) :
目录大小描述EFI100M系统启动引导存放目录swap8G交换空间/boot300M存放系统内核和类和升级文件/20G系统根目录/home剩余所有空间用户数据存放的目录 3. 问题及解决方案 无法使用增强会话: 解决方法:
虚拟机需要安装linux-vm-tools才能使用增强会话,执行以下命令: git clone https://github.com/microsoft/linux-vm-tools.git cd ./linux-vm-tools/ubuntu/18.04 sudo chmod +x install.sh sudo ./install.sh 宿主机以管理员权限打开powershell,执行以下指令: Set-VM -VMName <your_vm_name> -EnhancedSessionTransportType HvSocket (Get-VM -VMName <your_vm_name>).EnhancedSessionTransportType \\ 查看是否配置成功 修改xrdp配置文件: sudo gedit /etc/xrdp/xrdp.ini //修改以下两个参数值 port=vsock://-1:3389 use_vsock=false 重启虚拟机 Tips: 如果最后一步中找不到文件就把第一步中install.sh多执行几遍
多边形绘制
OpenCV中支持常见的点、线、圆、椭圆与矩形的绘制与填充都是通过设置thickness这个参数来实现绘制与填充,当thickness是正数的时就会绘制;当thickness为非正数时就会填充。但是对多边形来说,polylines函数把thickness设置为非正数就会直接报错,无法通过修改thickness完成填充,该函数只能实现绘制。
void cv::polylines( InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar & color, int thickness = 1, int lineType = LINE_8, int shift = 0 ) 参数解释
img表示绘制画布,图像
pts表示多边形的点
isClosed表示是否闭合,默认闭合
color表示颜色
thickness表示线宽,必须是正数
lineType表示线渲染类型
shift表示相对位移
绘制一个多边形的代码演示如下:
1Mat canvas = Mat::zeros(Size(512, 512), CV_8UC3); 2int w = canvas.cols; 3int h = canvas.rows; 4Point p1(100, 100); 5Point p2(300, 150); 6Point p3(300, 350); 7Point p4(250, 450); 8Point p5(50, 450); 9std::vector<Point> pts; 10pts.push_back(p1); 11pts.push_back(p2); 12pts.
git常用操作 查看git基本配置 $ git config --global --list 新建分支并切换 $ git checkout -b dev 查看远程仓库分支 $ git branch -r 新建一个realse分支 $ git branch 'realse' 查看分支 $ git branch 将本地文件添加到暂存区 $ git add . 移除本地暂存区的文件 $ git rm --cache 'README.md' 提交代码到本地仓库 $ git commit -m 'readme.md被修改了' 提交到master分支 $ git push origin master 提交到dev分支 $ git push origin dev 撤销commit git reset --soft HEAD^ git(Auto-merging错误)解决冲突 1.git pull 更新代码,发现 error: Your local changes to the following files would be overwritten by merge:pom.
python 4月26日总结 1, review python是动态解释性语言
基础语法
1)注释
2)标识符
3)关键字:True ,None ,False (有特殊意义注意区别大小写)
4) 语句
5) 常用数据和对应的类型
数字数据, int ,float
文本数据, str 单引号或者双引号注释
布尔数据, True, False -bool
空值, None -NoneType
type(数据)
输入和输出 print()and input() "abc" '类容' print(type(None)) age = input('年龄') age = int(age) print(type(age)) 变量
1)变量名 = 值 注意变量名的规范
2) 使用变量就是使用变量中保存的数据
3)重新给变量赋值
a, b, c, = 10, 20, 30 一一对应 2.-数字运算符 数字运算符: +(加), -(减), *(乘), /(除), %(取余), //(整除), **(幂运算)
1). +, -, *, /, 和数学中的加减乘除功能一样
1、计算页数: List<User> list = new ArrayList<>(); //add... //pageNo表示当前页[1-n],pageSize表示每页大小 //方法一 int total = list.size(); int pageSum = (total -1) / pageSize +1; //方法二 int total = list.size(); int pageSum = total%pageSize==0?total/pageSize:total/pageSize+1; //方法三 int total = list.size(); int pageSum=(total+pageSize-1)/pageSize; 2、java8 使用stream api进行分页: List<User> list = new ArrayList<>(); //add //split page List<User> subList = list.stream().skip((pageNo-1)*pageSize).limit(pageSize). collect(Collectors.toList()); 3、普通方法分页:
//subList手动分页,page为第几页,rows为每页个数 public static List<T> subList(List<T> list, int page, int rows) throws Exception{ List<T> listSort = new ArrayList<>(); int size=list.
使用 np 的 fillna(np.nan)
import numpy as np data = mdb.query_pd(sql) print(data) # 对应下图1 print(data.fillna(np.nan)) # 对应下图2 图1:
图2:
1.问题描述 使用UltraISO刻录Win10到U盘,发现刻录完系统后,U盘已用空间只有1.04G,而原Win10盘有5.04G。
2.问题原因 检查文件,发现U盘里面sources文件夹中系统安装文件“install.wim”只有200多M,原盘“install.wim”文件有4.21GB。
由于UltraISO刻录后,将U盘文件系统改为“FAT32”,导致大于4GB文件无法拷入。
3.解决方法 使用管理员权限打开CMD窗口,将U盘转成NTFS文件系统格式。
命令(disk代表U盘的盘符):
convert disk:/FS:NTFS 改完之后,将原盘中的“install.wim”拷贝到U盘sources文件夹中。
本人研究生在读,在2月26日找了师兄内推阿里钉钉团队,28号接到了约1面的电话。幸好我提前准备了一个多月的样子,刷面试题、刷LeetCode(面了之后才觉得自己刷少了),对于我这样一个实习生来说题目还是有些偏难,不过在4月20号终于拿到意向书了,听内推人说阿里实习面试没有rank,可能单纯就是流程比较慢,漫长的等待和面试还是值得的呀。
钉钉1面,3月1日(电话面试,1个小时) 本科、研究生学过什么跟计算机相关的课?
tcp、http协议相关;http1.1和2.0区别
堆排序的过程
Java单例有几种方式
静态方法同步和普通方法同步的区别
线程池7大参数、工作原理
点击手机桌面应用图标后发生了什么
View三大流程说了一下,流式布局FlowLayout怎么实现的
retrofit原理,看过okhttp源码,讲了一下okhttp的工作原理(分发器、拦截器,讲了细节)
聊了项目(讲了好久),几个方面如下:
(1)项目中用了kotlin协程,于是问了协程的相关理念,面试官可能觉得说的不太全,就给补充了一下。 然后说协程这样的新技术国外有人用,国内用的很少(因为使用协程会改变老项目原有网络架构,对于新项目可以使用,想要取代老项目比较困难)。
(2)如果用户反应app有问题,该怎么解决?回答网络抓包,面试官说大型项目不可能通过抓包来找问题,后来经过暗示,正确做法应该是生成日志文件并提交到服务器。
(3)聊了项目中登录相关的业务怎么实现的(将服务器响应的token持久化并添加到请求头)。
提问环节。问了面试官kotlin在企业应用中是否有用到,面试官说由于Java和kotlin并不冲突,因此在项目中是共存的。 第二天下午接到了约2面的电话,就约在当天晚上
钉钉2面,3月2日(电话面试,1个小时) 聊了研究生、本科阶段得过哪些奖,做过哪些项目或者参加过哪些比赛。具体问了本科参加过的一个水中机器人的比赛(stm32单片机做的),怎么识别水中的路线之类的一些细节;又问了简历中的一个医疗机器人的项目(遇到了哪些问题、只是实验室做着玩还是准备用在现实生活中);又问了参加过的数学竞赛,这个竞赛考察了什么能力等等。
问设计模式,Android源码或者第三方开源框架应用设计模式举例?(说了okhttp拦截器责任链模式)
自己的项目有没有用设计模式?(retrofit单例,用的kotlin的object关键字实现)
Android源码中你认为有哪些方面设计的很优秀的地方?(说了Android view体系)
聊kotlin,kotlin相比于Java有哪些优势、具体有哪些特性、语法糖之类的
谈谈对mvvm、mvc架构的理解,为什么你要在项目中使用mvvm?(当然是Google推荐使用mvvm)
聊对工作、学习方面的态度,应该具备什么能力等等
三道算法题(说思路):
(1)二叉树的最近公共祖先(只想出来一种比较笨的方法)
(2)遍历二叉树的第k层节点(递归迭代都讲了)
(3)给一个中文字符串“一万两千八百一十一”(只是个例子),输出这个字符串对应的数值(没想出来)
提问环节,问了部门的氛围如何之类的
二面之后参加了阿里的第一次笔试,两道力扣hard题,血难,加上我之前没练过ACM输入输出,最后一道也没过0分
(1)力扣1411:网格图涂色的方案数
(2)力扣815:公交路线
笔试之后心态崩了,觉得0分应该进不了阿里了,没想到过了两周二面的面试官给打了个电话,说前两面的面试成绩挺好,可以再给一个机会,用阿里伯乐平台出了4道题(其实是前两道有点难,第一道贪心算法,第二道工厂模式+策略模式+多线程都不会),才又出了后面两道简单的算法题,一个反转字符串中的单词,一个求链表倒数第k个节点,这俩写出来了。一周之后接到了3面的电话。
钉钉3面,3月24日(电话面试,40分钟) 自我介绍
聊项目,mvc、mvp和mvvm架构各自的特点;在项目中最具有挑战的是什么?项目收获到了什么?
算法题:给两个字符数组,举例:{h,e,l,l,o, ,w,o,r,l,d}和{e,o},如果第一个数组中存在第二个数组中的元素则去掉,后面的元素往前顺移,结果为:{h,l,l, ,w, r,l,d}。要求时间复杂度为O(n),空间复杂度为O(1)。
你认为什么样的人可以称之为技术大佬?如果只有30分钟,你会依据什么来判断一个人是不是大佬?你认为自己身边最厉害的技术大佬是谁?他为什么会成为大佬?你愿不愿意推荐他到我们顶顶团队(我说他投了蚂蚁,面试官说他做了错误的选择…)?如果让你在半年之内达到他的水平,你的学习规划是什么?你会不会向他请教学习方法?
反问:
(1)大厂对新技术的态度是怎样的?
(2)鸿蒙会不会取代Android?Android的前景怎样?面试官先问了我的观点,后来说了自己的观点:不会。
为什么不会?这个要自己查找最近几年出现的智能手机系统,它们为什么没有Android和iOS成功,从中找答案。
钉钉HR面,3月30日(钉钉视频面试,20分钟) 自我介绍,开了共享屏幕现场给HR展示了之前的一个项目
你的项目UI界面是自己设计的吗?
你对未来的规划是什么?
有没有投别的大厂?
大厂有很多,为什么要投阿里?为什么要投钉钉部门?
你对互联网行业加班现状怎么看?你对加班的态度怎样?
提问环节:
(1)实习生待遇怎样?
(2)转正率高不高?(阿里实习期间如果表现正常基本都能转正,除非自己不想转正)
(3)加班情况怎样?(除了大版本更新,平时不会像拼多多那么肝,一般晚上九点就清场了,周末基本也不用加班)
面试经验总结 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你 的简历来问的;
注重计算机基础。对自己投递岗位需要的技能足够熟练,对其他岗位需要的知识也要有所了解。
注重算法。很多人都没有意识到算法的重要性,国外的企业都在问算法题,国内大厂算法现在也是必不可少的,算是行业风口,掌握算法的人将拿到更多的机会。
关注技术视野。技术视野是大家容易忽略的一个点,包括深度和广度,包括阿里在内的很多大厂面试都很看重这个。有些人面试答得很好,却给面试官留下一个视野狭窄的印象。
能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试 之前好好回顾一下自己所做的项目;
和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是 如何使用的;
先上程序(爬取百度热榜)
'百度热榜爬虫' import requests from lxml import etree import os if __name__ =='__main__': header = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4442.4 Safari/537.36' } url = 'https://tophub.today/' page_text = requests.get(url=url,headers=header).text etree = etree.HTML(page_text) list_page = etree.xpath('//*[@id="node-2"]/div/div[2]/div[1]/a') i=1 fp = open('百度热榜.txt', 'w', encoding='utf8') print("****百度热榜****") for li in list_page: title = li.xpath('./div/span[2]/text()')[0] hot_degree = li.xpath('./div/span[3]/text()')[0] print(i,title,"点击量:"+hot_degree) fp.write(str(i)+','+str(title)+' 点击量:'+str(hot_degree) + ' 04-27'+'\n') i = i + 1 再来上程序(爬取微博热榜)
复杂度3/5
机密度3/5
这些名词都用于数据(文件)访问的模式,既应用程序用什么方案实现对文件的读写。
AIO
AIO 的全称为 Asynchronous I/O,既异步 I/O。在 AIO 的工作模式下,应用程序发起(call)I/O请求(读 / 写)系统调用以后,内核不必等 I/O 完成,即可返回(此时数据区不能释放或修改,需要等访问确认完成),应用程序可以发起新的 I/O 请求。通过这种方法,可以提示提升 I/O 吞吐量和性能。从 AIX5L 起,AIX 支持两种 AIO:legacy AIO 和 POSIX AIO。AIO 既支持文件系统也支持裸设备。
DIO
AIO 的全称为 Direct I/O,即直接 I/O。在 DIO 的工作模式下,数据直接从磁盘传送到应用的数据区,而不经过文件的 VMM映射。DIO 是 JFS/JFS2文件系统的一个选项,对于一些应用,如 Oracle 数据库,它本身有自己的缓存管理机制,如果再使用文件系统缓存,不但多占用了一倍的物理内存,而且多了一次数据移动。在这种情况下,使用 DIO 会提升一些性能。但是,当应用有大量的顺序读 I/O 的时候,可能由于AIX的lv预读机制也由于DIO而被关闭,导致性能稍稍下降。
CIO
CIO 的全称为 Concurrent I/O 既并发 I/O。CIO 的工作模式是建立在 DIO 模式基础之上的。在 JFS2 的环境下,如果应用需要绕过文件系统缓存,经常会使用 CIO 模式来替代 DIO 模式。在 CIO 的工作模式下,首先,数据会从磁盘直接传递到应用的缓存,这一点和DIO相同。除此之外,由于在文件系统中,为了保证并行访问时,多线程、进程之间数据更新的一致性,需要使用 inode lock。Inode lock 保证一个文件在某一时刻,只有一个写 I/O,并且为了避免读到 stale 的数据,写的时候也是不允许并发读。而在 CIO 的工作模式下,JFS2 会绕过 inode lock,从而实现多个线程可以同时读写一个共享文件。而在这种情况下,数据的一致性就需要应用或数据库自己来保证。
是否有这样的烦恼,每次启动Docker时会跟着启动很多容器?更有甚者,有多个相同功能的容器都不知道启动的是哪个?冲动时真心想把所有的容器干掉重新来过,后来查了命令,这个问题是可以这样解决的。
命令说明 docker update <容器id,可多个,空格分隔如:111 2222 222> --restart=no 或always 自动启动容器 docker update cf877cb5ea48 9120211fed93 --restart=always 关闭启动容器 docker update cf877cb5ea48 9120211fed93 --restart=no
效果图:
第一页默认10条数据,滚动条到末尾实现第二条数据(效果图:获取到的数据)
初始时:(验证方法效果)
懒加载:不是一次性加载完,是滚动条加载到当前才显示到图片。
(数据分析:后端全部给到前端数据,会造成页面阻塞,一般后端给到前端是分页的数据,前端通过调用chunk++往上加载,实现分页)
如下图:加载的数据
代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>图片懒加载功能实现</title> <style> *{ margin:0; padding: 0; box-sizing:border-box; } body,html{ background-color: #6098cc; } ul li{ list-style: none; } .ljz_item_arow ul{ display: flex; flex: 1; flex-wrap: wrap; padding: 10%; } .ljz_item_arow ul li{ width: 50%; border:1px solid olivedrab; } .ljz_item_arow ul li img{ display: inline-block; width: 100%; height: 70%; } .
在Python中读取文件的方法有很多,以前笔者主要用Pandas方法读取execl,csv数据。主要是因为喜欢把数据存成以上两种格式。最近在做模型时,发现用pandas读取数据很麻烦。因为读取到的数据还需要转成array,虽然只需要加.values但其中需要具体操作也是占时间的。不如一步到位读取出来就是array,所以现在喜欢读取txt文件,当然pandas也能读取。
np.loadtxt函数np.loadtxt(“path”,delimiter=None),主要的两个参数是路径跟分隔符。path是路径,delimiter是分隔符。就是读取的文件中字符是用什么符号分割的。
参考文献 [1]numpy中文件读取操作np.loadtxt(),np.savetxt()的使用
[2]np.loadtxt()的参数设置
都叫做环境变量
$PATH:可执行文件的路径$LIBRARY_PATH:程序编译时查找的路径$LD_LIBRARY_PATH:程序链接时的路径 可以在~/.bashrc或者/etc/profile中修改,修改完,source ~/.bashrc(/etc/profile) 有效
另外程序链接目录,也可以在/etc/ld.so.conf文件中添加
安装依赖,sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev下载对应版本的Qt,给一个清华源:https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/sudo chmod u+x 安装包运行,进行安装需要账号验证,可以去官网注册一个插件尽量都选上吧,安卓和源码看情况安装完成后,suco vim /etc/profile 添加环境变量,qt creator和qt,修改后,source /etc/profile之后就可以启动了
一、vue初始化做了什么?
1、创建Vue实例对象
2、init过程会初始化生命周期,初始化事件中心,初始化渲染、执行beforeCreate周期函数、初始化 data、props、computed、watcher、执行created周期函数等。
3、初始化后,调用 m o u n t 方 法 对 V u e 实 例 进 行 挂 载 ( 挂 载 的 核 心 过 程 包 括 模 板 编 译 、 渲 染 以 及 更 新 三 个 过 程 ) 。 4 、 如 果 没 有 在 V u e 实 例 上 定 义 r e n d e r 方 法 而 是 定 义 了 t e m p l a t e , 那 么 需 要 经 历 ∗ ∗ 编 译 阶 段 ∗ ∗ 。 需 要 先 将 t e m p l a t e 字 符 串 编 译 成 r e n d e r f u n c t i o n , t e m p l a t e 字 符 串 编 译 步 骤 如 下 : ( 1 ) p a r s e 正 则 解 析 t e m p l a t e 字 符 串 形 成 A S T ( 抽 象 语 法 树 , 是 源 代 码 的 抽 象 语 法 结 构 的 树 状 表 现 形 式 ) ( 2 ) o p t i m i z e 标 记 静 态 节 点 跳 过 d i f f 算 法 ( 3 ) g e n e r a t e 过 程 将 A S T 转 化 成 r e n d e r f u n c t i o n 字 符 串 5 、 编 译 成 r e n d e r f u n c t i o n 后 , 调 用 mount方法对Vue实例进行挂载(挂载的核心过程包括模板编译、渲染以及更新三个过程)。 4、如果没有在Vue实例上定义render方法而是定义了template,那么需要经历**编译阶段**。需要先将template 字符串编译成 render function,template 字符串编译步骤如下 : (1)parse正则解析template字符串形成AST(抽象语法树,是源代码的抽象语法结构的树状表现形式) (2)optimize标记静态节点跳过diff算法 (3)generate过程将AST转化成render function字符串 5、编译成render function 后,调用 mount方法对Vue实例进行挂载(挂载的核心过程包括模板编译、渲染以及更新三个过程)。4、如果没有在Vue实例上定义render方法而是定义了template,那么需要经历∗∗编译阶段∗∗。需要先将template字符串编译成renderfunction,template字符串编译步骤如下:(1)parse正则解析template字符串形成AST(抽象语法树,是源代码的抽象语法结构的树状表现形式)(2)optimize标记静态节点跳过diff算法(3)generate过程将AST转化成renderfunction字符串5、编译成renderfunction后,调用mount的mountComponent方法,先执行beforeMount钩子函数,然后核心是实例化一个渲染Watcher,在它的回调函数(初始化的时候执行,以及组件实例中监测到数据发生变化时执行)中调用updateComponent方法(此方法调用render方法生成虚拟Node,最终调用update方法更新DOM)。
问题描述 应用程序在用户计算机中操作本地word文件时报错,错误消息为:“RPC服务器不可用,HRESULT:0x800706BA”。报错后,用户无法正常打开处理后的word文件。
解决方案 从错误消息中无法看出更多内容,于是在控制面板->管理工具->事件查看器中的windows日志->应用程序中查看应用程序报错的那个时间点是否有错误信息。
在应用程序报错的同时,在事件查看器中记录了两条错误:
第一条错误来源为Application Error,错误应用程序名称为WINWORD.EXE,错误模块为NEWORD~2.DLL。但是没有集体的错误信息,从这些信息中无法看出出错的原因。
第二条错误来源为MSOIDSVC.EXE,错误信息为:“无法找到来自源MSOIDSVC.EXE的事件ID 0 的描述。本地计算机上未安装引发此事件的组件,或者安装已损坏。可以安装或修复本地计算机上的组件。”
从第二条错误信息来看,有可能是office安装的有问题,因此尝试在控制面板->应用和功能中修复office,但是没有修复成功。于是卸载已有的office,然后重新安装offic,再运行应用程序即可正常操作并打开本地word文件。
package com.xiaoliang.test;
import java.util.Scanner;
/**
* 做一个控制台简易版具有 加减乘除功能的计算器,并使用异常处理程序
* @author admin
*首先创建一个死循环,如果输入无误测跳出循环;
*/
public class NumTest {
public static void main(String[] args) {
double n ;
boolean x = true;
try {
while (x) {
Scanner sc = new Scanner(System.in);
System.out.println("输入第一个数字");
double i = sc.nextDouble();
System.out.println("输入运算符号= - * /");
String str = sc.next();
System.out.println("输入第二个数字");
double j = sc.nextDouble();
if (str.equals("+")) {
n = i + j;
System.out.println(n);
break;
} else if (str.
在移动端项目中,用户通过向上滑动,加载列表数据,实现分页的功能。当总页数为1页或者是最后一页时候,底部显示“没有更多数据”字样,否则显示“滑动加载更多”的字样。
一、组件的封装
1、html
2、js
export default {
props: {
parentPullUpState: {
default: 0
},
onInfiniteLoad: {
type: Function,
require: false
}
},
components: {
// “van-loading”: Loading
},
data() {
return {
top: 0,
pullUpState: 0, // 1:向上加載更多, 2:加載中, 3:沒有更多數據了
isLoading: false, // 是否正在加载
pullUpInfo: {
moreText: “向上拖动加载下一页”,
noMoreText: “沒有更多数据了”
},
startX: 0,
startY: 0,
endX: 0,
endY: 0
};
},
methods: {
/**
* 触摸开始,手指点击屏幕时
* @param {object} e Touch 对象包含的属性
这一章内容是关于Linux嵌入式开发的,针对里面的petalinux进行讲解。 Petalinux介绍及其使用 前言一、Petalinux是什么?二、下载及其安装1.下载2.安装 三、Petalinux的使用总结 前言 本文章主要介绍的是Petainux的介绍、安装和配置。 一、Petalinux是什么? PetaLinux工具提供在Xilinx处理系统上定制、构建和调配嵌入式Linux 解决方案所需的所有组件。该解决方案旨在提升设计生产力,可与Xilinx 硬件设计工具配合使用,以简化针对Versal、ZynqUltraScale MPSoC、Zynq7000SoC和MicroBlaze的Linux系统开发。
二、下载及其安装 1.下载 可以到Xilinx的官方网站https://china.xilinx.com/进行下载安装包
2.安装 (1)先新建一个文件夹:mkdir。
(2)执行安装命令:输入命令行
./petalinux-v2018.3-final-installer.run /opt/pkg/petalinux/2018.3
(3)修改bash:sudo dpkg-reconfigure dash
(4)设置环境变量:sourcesettings.sh
三、Petalinux的使用 (1)搭建vivado工程,导出hdf文件。
(2)创建一个petalinux工程
使用petalinux-create-t project命令。
(3)将vivado文件导入到petalinux工程
使用petalinux-config --get-hw-description命令。
(4)配置petalinux工程
使用petalinux-config -c命令,分别配置U-boot、内核、rootfs。
(5)编译petalinux工程
使用petalinux-build命令。
总结 petalinux的使用中还是有很多操作需要去牢记的,熟能生巧,多加练习才能更加熟练。
Unity 绕物体旋转两种方式 前言第一种方式第二种方式随机环绕 前言 项目上遇到一个要绕物体旋转的问题,还要可以动态修改旋转中心和旋转半径。
第一种方式 使用Unity自带的API RotateAround
有两个问题
物体移动的时候无法准确跟随无法修改圆的半径 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemScript : MonoBehaviour { //中心点 public Transform center; //转动速度 public float rotationSpeed=10; void Update() { //跟随center转圈圈 this.transform.RotateAround(center.position, Vector3.forward, Time.deltaTime * rotationSpeed); } } 第二种方式 可以动态修改中心点的位置和旋转半径
已知圆心坐标:(x0,y0)
半径:r
角度:a
则圆上任一点为:(x1,y1)
则
x1 = x0 + r * cos( a )
y1 = y0 + r * sin( a )
作者:初同学
链接: https://www.jianshu.com/p/ba69d991f1af
ESP8266+AT指令连接步骤 1.AT+RST esp8266复位
2.AT 检测是否连接成功
3.ATE0 关闭命令字符回显
4.AT+CWMODE=3 把模块设置为AP+Station模式
5.AT+CWJAP=“","” 配置AP参数第一对引号内填写接入点名称,第二对引号内填写密码。
注意:完整指令如下:
AT+ CWSAP= ,,, ssid:接入点名称
pwd:密码
chl:通道号
ecn:加密方式
6.AT+CIFSR 查看该模块的IP地址,在AP模式下不能用。
7.AT+CIPSTART=“TCP”,“183.230.40.33”,80 连接服务器,TCP连接,183.230.40.33是OneNET的地址,80是OneNET的端口号。
收到connect后表示与服务器的连接成功。
8.AT+CIPSEND 进入透传模式,之后就可以向服务器发送数据
HTTP协议post POST格式如图蓝色部分所示,服务器返回的信息是绿色部分
红色掩盖处是设备ID,黑色掩盖处是设备密钥,这个只要在Onenet上申请了自己的产品就能查找到;
{“tem”:42}表示客户端向服务器中ID为tem的数据流发送42这个数据。
然后来看服务器返回的信息:
首先Date部分,可以获取发送数据时的具体年月日时分秒,但是这是格林威治时间,换成北京时间要往后推8小时;
Content-Type:指发送数据的格式;
Connection:保持心跳;
Content-Length:发送数据的长度;
{“errno”:0,“error”:“succ”}表示本次发送数据的过程成功,没有错误。
HTTP协议get 同上,红色掩盖处是设备ID,黑色掩盖处是设备密钥。
但是datastream_id要注意,是要get的目标数据流ID,这里我是在Onenet上创建了一个开关,数据是一个布尔值,开为1,关为0。get指令就是获取这个数据流的当前的值。
来看绿色的部分:
Date等部分同上,这里就不说了。
主要看最后两行,其中的信息说明了本次连接成功与否,get的数据流ID是什么,数据流其中的数据,以及这个数据是在什么时候产生的。如下图,就是说本次GET指令执行成功,获得了数据流ID为switch的值为1,并且这个值是在2021年3月16日的15时13分22秒产生的。
结语 以上就是ESP8266使用AT指令连接上Onenet,然后通过HTTP协议的POST和GET来将数据上传至云端或者获得云端的某个数据流的数据的全部步骤。后续可以将这些指令写入单片机中,便可以实现单片机和云端进行数据交换了。这一步也算是从单机向物联网迈出的第一个脚步了,后面还有更多的花里胡哨操作等着各位,例如从云端获取时间啊,到知心天气上获得天气数据然后把单片机做成一个天气站啊。http协议之后还有mqtt协议,相对来说mqtt协议更好用,稳定一些。
与诸君共勉。
前言 现有的大部分 GNN 方法集中于对图数据中的低频信息进行处理,这也产生了一个问题:真实世界中我们需要的仅仅是图中的低频信息吗?
作者在本文中进行了实验说明了在不同的条件下仅使用低频信息是有局限性的。基于此,作者提出了一种基于自我门控机制的 Frequency Adaptation Graph Convolutional Networks (FAGCN) 。核心在于实现自适应的频率信息图卷积。同时作者还分析了在学习节点特征表示过程中低频信息和高频信息扮演什么样的角色。
论文链接:https://arxiv.org/pdf/2101.00797v1.pdf
github:https://github.com/bdy9527/FAGCN
1. Important GNN 中的低通滤波器主要保留了节点特征的共性,不可避免地忽略了差异,使得学习到的连通节点表示变得相似。由于低频信息的平滑性,该机制可以很好地应用于协调性(assortative)网络,即相似节点倾向于相互连接。然而,现实世界的网络并不总是协调性的,有时是非协调性(disassortative)的,也就是说,来自不同类别的节点往往会相互连接。例如,蛋白质中的化学相互作用经常发生在不同类型的氨基酸之间。如果我们使用低通滤波器来强制连接蛋白的表示相似,显然会很大程度上阻碍性能。这里的低频信息不足以支持这种网络的推理。在这种情况下,高频信息捕捉节点之间的差异。
2. Low-frequency And High-frequency Information 总结一下:在 GNN 中如果图数据集是同配性网络(assortative)那么低通滤波有很好的表现,因为低频信息反映了节点之间的相关性。相反图数据集是异配型网络(disassortative)那么高通滤波更有优势,因为高频信息反映了节点之间的差异性。
作者提出了为了综合考虑低频信息和高频信息所需要注意的问题:
(1)低频和高频信号都是原始特征的组成部分。传统的滤波器是针对某一特定信号而设计的,不能很好地同时提取不同频率的信号。
(2)即使我们可以提取不同的信息,但是现实世界网络的协调性通常是不可知的,变化很大,而且任务与不同信息之间的相关性非常复杂,所以很难决定应该使用哪种信号:原始特征,低频信号,高频信号或它们的组合。
FAGCN 的设计策略如下:
利用图信号处理的理论,定义了一个增强的低通和高通滤波器,从原始特征中分离低频和高频信号。设计一种自我门控机制,在不知道网络类型的情况下,自适应地整合低频信号、高频信号和原始特征。 3. An Experimental Investigation 作者在本节设计了一个实验详细探讨了低频信息和高频信息在学习节点的表示的时候所扮演的角色。
以低频和高频信号为例,分析它们在学习节点表示中的作用。主要思想是逐步增加合成网络的异配性,并观察这两种信号的性能如何变化。
网络的生成过程如下:生成一个有 200 个节点的网络,并将其随机分为 2 类。对于第一类节点从高斯分布 N ( 0.5 , 1 ) \mathcal{N}(0.5,1) N(0.5,1) 中抽取 20 维特征向量,而对于第二类节点从高斯分布 N ( − 0.5 , 1 ) \mathcal{N}(−0.5,1) N(−0.5,1) 中抽取 20 维特征向量。此外,同一类的连接是由概率 p = 0.05 p = 0.
你遇到的错误,可能是如下所示,提示里面多次提示spring-context-5.2.14.RELEASE.jar:5.2.14.RELEASE与spring-boot-2.3.10.RELEASE.jar:2.3.10.RELEASE,我们很可能会以为是版本冲突问题,我换了很多版本,结果都不是。
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-04-24 12:41:12.026 ERROR 9464 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [ProductApplication]; nested exception is java.lang.IllegalArgumentException: Could not find class [org.springframework.hateoas.client.LinkDiscoverers] at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189) ~[spring-context-5.2.14.RELEASE.jar:5.2.14.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:320) ~[spring-context-5.2.14.RELEASE.jar:5.2.14.RELEASE] at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:237) ~[spring-context-5.2.14.RELEASE.jar:5.2.14.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:280) ~[spring-context-5.2.14.RELEASE.jar:5.2.14.RELEASE] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:96) ~[spring-context-5.2.14.RELEASE.jar:5.2.14.RELEASE] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:707) ~[spring-context-5.2.14.RELEASE.jar:5.2.14.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:533) ~[spring-context-5.2.14.RELEASE.jar:5.2.14.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.10.RELEASE.jar:2.3.10.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:755) ~[spring-boot-2.
登录界面,差不对和QQ登录相似。
1:用户名,密码,输入框,登录,取消,注册这些是基本的格式,如果想在丰富一下可以插入一些图片。制作表单,点击登录会跳转到这个文件中。
2:跳转到do_login.jsp页面,这个页面是连接数据库,和数据库数据进行比对,如果有这个数据,则跳转到其他页面,如果没有则跳转到注册页面。
连接数据库的步骤:
①:Class.forName()进行数据库驱动。②:URL,username,password,分别代表数据库路径,用户名,密码,进而可以连接数据库。③:连接完成,要创建一个‘盒子’来装数据,④:之后Result方法来获取‘盒子’中的数据,rs.next()会依次寻找符合的数据,找到成功之后,用了一个方法会自动跳转,
response.setHeader("refresh","2;url=user_list1.jsp"); refresh:刷新 2:2秒 url:跳转路径
, 3:跳转成功后,我要显示数据库中所有的数据,并且在这个界面,实现是否修和删除。步骤如下:连接数据库,获得‘盒子’中的数据,用while语句输出
4:跳转失败后,进入注册表单,里面有用户名,密码,性别,爱好,email,注册按钮,重填按钮。和上面的QQ登录界面差不多,一个表单,点击注册按钮后,进入数据库插入界面。
5: 注册完毕后,进入插入界面,user_insert.jsp,还是要连接数据库,获取你刚才注册的数据,在插入代码中进行连接。这个获取结果集和其他的不一样,是在‘盒子’里面加载的,当i==1时,注册成功,插入成功,还是要刷新,跳转。
int i=stmt.executeUpdate(sql);//获得结果集 query 查询
String s="('"+name+"','"+passwd+"','"+sex+"','"+message+"','"+email+"')";
String sql="insert into bookshop(username,password,gender,hobby,email) values "+s;
6:插入完成,之后再进行修改和删除,这个是在登录成功之后就可以在那个界面就可以运行。
7: