软件开发设计模式
根据参考书《Design Patterns - Elements of Reusable Object-Oriented Software》中所提到的,总共有23种设计模式。这些模式可以分为三大类:1. 创建型模式(Creational Patterns):用来描述如何创建对象,它的主要特点是“将对象的创建与使用分离”。包括以下5种:* 工厂方法模式(Factory Method Pattern)* 抽象工厂模式(Abstract Factory Pattern)* 单例模式(Singleton Pattern)* 建造者模式(Builder Pattern)* 原型模式(Prototype Pattern)2. 结构型模式(Structural Patterns):用来描述如何将类或对象按某种布局组成更大的结构。包括以下7种:* 适配器模式(Adapter Pattern)* 桥接模式(Bridge Pattern)* 组合模式(Composite Pattern)* 装饰器模式(Decorator Pattern)* 外观模式(Facade Pattern)* 享元模式(Flyweight Pattern)* 代理模式(Proxy Pattern)3. 行为型模式(Behavioral Patterns):用来描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。包括以下11种:* 职责链模式(Chain of Responsibility Pattern)* 命令模式(Command Pattern)* 解释器模式(Interpreter Pattern)* 迭代器模式(Iterator Pattern)* 中介者模式(Mediator Pattern)* 备忘录模式(Memento Pattern)* 观察者模式(Observer Pattern)* 状态模式(State Pattern)* 策略模式(Strategy Pattern)* 模板方法模式(Template Method Pattern)* 访问者模式(Visitor Pattern)有以下中文记忆口诀可以帮助记忆这些设计模式:* SOLID原则:SOLID CD(稳固的CD)。* 创建型模式五种:创工原单建抽(创公园,但见愁)。* 结构型模式七种:结享外组适代装桥(姐想外租,世代装桥)。* 行为型模式十一种:行状责中模访解备观策命迭(形状折中模仿,戒备观测鸣笛)。可以用以下编程语言来示例设计模式的代码:* Java* C#* C++* Go* PHP* Python* Ruby* Swift
查看详情点赞评论收藏浏览592023-03-02 11:39:07Nginx config配置文件基本配置示例
nginx的基本配置,需要注意的有以下几点:1、1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址; 2.$remote_user :用来记录客户端用户名称; 3.$time_local : 用来记录访问时间与时区;4.$request : 用来记录请求的url与http协议;5.$status : 用来记录请求状态;成功是200, 6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;7.$http_referer :用来记录从那个页面链接访问过来的; 8.$http_user_agent :记录客户端浏览器的相关信息;2、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。3、每个指令必须有分号结束。示例:upstream xxx.com { server 192.168.136.130:3000 weight=5 fail_timeout=30s; } server { listen 80; server_name xxx.com; rewrite ^(.*)$ https://$host$1 permanent; location / { proxy_pass http://xxx.com; proxy_buffering off; proxy_http_version 1.1; proxy_request_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 180; proxy_read_timeout 180; proxy_send_timeout 180; } location /api { proxy_pass http://192.168.136.130:31900/; proxy_buffering off; proxy_http_version 1.1; proxy_request_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 180; proxy_read_timeout 180; proxy_send_timeout 180; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } server { listen 443 ssl; server_name xxx.com; client_max_body_size 200m; ssl_certificate /www/wdlinux/nginx/cert/xxx.com.pem; ssl_certificate_key /www/wdlinux/nginx/cert/xxx.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { proxy_pass http://xxx.com; proxy_buffering off; proxy_http_version 1.1; proxy_request_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 180; proxy_read_timeout 180; proxy_send_timeout 180; # add_header 'Access-Control-Allow-Origin' '*'; # add_header 'Access-Control-Allow-Methods' '*'; # add_header 'Access-Control-Allow-Credentials' 'true'; # add_header 'Access-Control-Allow-Headers' 'X-Requested-With'; } location /api { proxy_pass http://192.168.136.130:31900/; proxy_buffering off; proxy_http_version 1.1; proxy_request_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 180; proxy_read_timeout 180; proxy_send_timeout 180; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } user nginx nginx ;Nginx用户及组:用户 组。window下不指定worker_processes 8;工作进程:数目。根据硬件调整,通常等于CPU数量或者2倍于CPU。error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; 错误日志:存放路径。pid logs/nginx.pid; pid(进程标识符):存放路径。 worker_rlimit_nofile 204800;指定进程可以打开的最大描述符:数目。这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。现在在Linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。events{use epoll;使用epoll的I/O 模型。linux建议epoll,FreeBSD建议采用kqueue,window下不指定。补充说明:与apache相类,nginx针对不同的操作系统,有不同的事件模型A)标准事件模型Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或pollB)高效事件模型Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。Epoll:使用于Linux内核2.6版本及以后的系统。/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。Eventport:使用于Solaris 10。 为了防止出现内核崩溃的问题, 有必要安装安全补丁。worker_connections 204800;没个工作进程的最大连接数量。根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行。每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为。worker_processes*worker_connectionskeepalive_timeout 60;keepalive超时时间。client_header_buffer_size 4k;客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE 取得。[root@web001 ~]# getconf PAGESIZE4096但也有client_header_buffer_size超过4k的情况,但是client_header_buffer_size该值必须设置为“系统分页大小”的整倍数。 open_file_cache max=65535 inactive=60s;这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。open_file_cache_valid 80s;这个是指多长时间检查一次缓存的有效信息。open_file_cache_min_uses 1;open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。}##设定http服务器,利用它的反向代理功能提供负载均衡支持http{include mime.types;设定mime类型,类型由mime.type文件定义 default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';log_format log404 '$status [$time_local] $remote_addr $host$request_uri $sent_http_location';日志格式设置。$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址; $remote_user:用来记录客户端用户名称; $time_local: 用来记录访问时间与时区; $request: 用来记录请求的url与http协议; $status: 用来记录请求状态;成功是200, $body_bytes_sent :记录发送给客户端文件主体内容大小; $http_referer:用来记录从那个页面链接访问过来的; $http_user_agent:记录客户浏览器的相关信息;通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。access_log logs/host.access.log main; access_log logs/host.access.404.log log404;用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径;server_names_hash_bucket_size 128;#保存服务器名字的hash表是由指令server_names_hash_max_size 和server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键 值。因此,如果Nginx给出需要增大hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小.client_header_buffer_size 4k;客户端请求头部的缓冲区大小。这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。large_client_header_buffers 8 128k;客户请求头缓冲大小。nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取。open_file_cache max=102400 inactive=20s;这个指令指定缓存是否启用。例: open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; open_file_cache_errors语法:open_file_cache_errors on | off 默认值:open_file_cache_errors off 使用字段:http, server, location 这个指令指定是否在搜索一个文件是记录cache错误.open_file_cache_min_uses语法:open_file_cache_min_uses number 默认值:open_file_cache_min_uses 1 使用字段:http, server, location 这个指令指定了在open_file_cache指令无效的参数中一定的时间范围内可以使用的最小文件数,如果使用更大的值,文件描述符在cache中总是打开状态.open_file_cache_valid语法:open_file_cache_valid time 默认值:open_file_cache_valid 60 使用字段:http, server, location 这个指令指定了何时需要检查open_file_cache中缓存项目的有效信息. client_max_body_size 300m;设定通过nginx上传文件的大小sendfile on;sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络IO处理速度,降低系统uptime。tcp_nopush on;此选项允许或禁止使用socke的TCP_CORK的选项,此选项仅在使用sendfile的时候使用proxy_connect_timeout 90; 后端服务器连接的超时时间_发起握手等候响应超时时间proxy_read_timeout 180;连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)proxy_send_timeout 180;后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据proxy_buffer_size 256k;设置从被代理服务器读取的第一部分应答的缓冲区大小,通常情况下这部分应答中包含一个小的应答头,默认情况下这个值的大小为指令proxy_buffers中指定的一个缓冲区的大小,不过可以将其设置为更小proxy_buffers 4 256k;设置用于读取应答(来自被代理服务器)的缓冲区数目和大小,默认情况也为分页大小,根据操作系统的不同可能是4k或者8kproxy_busy_buffers_size 256k;proxy_temp_file_write_size 256k;设置在写入proxy_temp_path时数据的大小,预防一个工作进程在传递文件时阻塞太长proxy_temp_path /data0/proxy_temp_dir; proxy_temp_path和proxy_cache_path指定的路径必须在同一分区 proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;#设置内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。keepalive_timeout 120;keepalive超时时间。tcp_nodelay on;client_body_buffer_size 512k;如果把它设置为比较大的数值,例如256k,那么,无论使用firefox还是IE浏览器,来提交任意小于256k的图片,都很正常。如果注释该指令,使用默认的client_body_buffer_size设置,也就是操作系统页面大小的两倍,8k或者16k,问题就出现了。无论使用firefox4.0还是IE8.0,提交一个比较大,200k左右的图片,都返回500 Internal Server Error错误proxy_intercept_errors on;表示使nginx阻止HTTP应答代码为400或者更高的应答。upstream bakend {server 127.0.0.1:8027;server 127.0.0.1:8028;server 127.0.0.1:8029;hash $request_uri;}nginx的upstream目前支持4种方式的分配1、轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。2、weight指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如:upstream bakend {server 192.168.0.14 weight=10;server 192.168.0.15 weight=10;}2、ip_hash每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:upstream bakend {ip_hash;server 192.168.0.14:88;server 192.168.0.15:80;}3、fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。upstream backend {server server1;server server2;fair;}4、url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法upstream backend {server squid1:3128;server squid2:3128;hash $request_uri;hash_method crc32;}tips:upstream bakend{#定义负载均衡设备的Ip及设备状态}{ip_hash;server 127.0.0.1:9090 down;server 127.0.0.1:8080 weight=2;server 127.0.0.1:6060;server 127.0.0.1:7070 backup;}在需要使用负载均衡的server中增加proxy_pass http://bakend/;每个设备的状态设置为:1.down表示单前的server暂时不参与负载2.weight为weight越大,负载的权重就越大。3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误4.fail_timeout:max_fails次失败后,暂停的时间。5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。nginx支持同时设置多组的负载均衡,用来给不用的server来使用。client_body_in_file_only设置为On 可以讲client post过来的数据记录到文件中用来做debugclient_body_temp_path设置记录文件的目录 可以设置最多3层目录location对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡##配置虚拟机server { listen 80; #配置监听端口 server_name image.***.com; #配置访问域名 location ~* \.(mp3|exe)$ { #对以“mp3或exe”结尾的地址进行负载均衡 proxy_pass http://img_relay$request_uri; #设置被代理服务器的端口或套接字,以及URL proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #以上三行,目的是将代理服务器收到的用户的信息传到真实服务器上 }##其他举例server { listen 80; server_name *.***.com *.***.cn; location ~* \.(mp3|exe)$ { proxy_pass http://img_relay$request_uri; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { if ($http_user_agent ~* "xnp") { rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect; } proxy_pass http://img_relay$request_uri; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #error_page 404 http://i1.***img.com/help/noimg.gif; error_page 404 502 = @fetch; } location @fetch { access_log /data/logs/baijiaqi.log log404; rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect; } } server { listen 80; server_name *.***img.com; location ~* \.(mp3|exe)$ { proxy_pass http://img_relay$request_uri; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { if ($http_user_agent ~* "xnp") { rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif; } proxy_pass http://img_relay$request_uri; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #error_page 404 http://i1.***img.com/help/noimg.gif; error_page 404 = @fetch; } #access_log off; location @fetch { access_log /data/logs/baijiaqi.log log404; rewrite ^(.*)$ http://i1.***img.com/help/noimg.gif redirect; } } server { listen 8080; server_name ngx-ha.***img.com; location / { stub_status on; access_log off; } } server { listen 80; server_name imgsrc1.***.net; root html; } server { listen 80; server_name ***.com w.***.com; # access_log /usr/local/nginx/logs/access_log main; location / { rewrite ^(.*)$ http://www.***.com/ ; } } server { listen 80; server_name *******.com w.*******.com; # access_log /usr/local/nginx/logs/access_log main; location / { rewrite ^(.*)$ http://www.*******.com/; } } server { listen 80; server_name ******.com; # access_log /usr/local/nginx/logs/access_log main; location / { rewrite ^(.*)$ http://www.******.com/; } } location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; }#设定查看Nginx状态的地址location ~ /\.ht { deny all; } #禁止访问.htxxx文件 }注释:变量Ngx_http_core_module模块支持内置变量,他们的名字和apache的内置变量是一致的。首先是说明客户请求title中的行,例如$http_user_agent,$http_cookie等等。此外还有其它的一些变量$args此变量与请求行中的参数相等 $content_length等于请求行的“Content_Length”的值。 $content_type等同与请求头部的”Content_Type”的值 $document_root等同于当前请求的root指令指定的值 $document_uri与$uri一样 $host与请求头部中“Host”行指定的值或是request到达的server的名字(没有Host行)一样 $limit_rate允许限制的连接速率 $request_method等同于request的method,通常是“GET”或“POST” $remote_addr客户端ip $remote_port客户端port $remote_user等同于用户名,由ngx_http_auth_basic_module认证 $request_filename当前请求的文件的路径名,由root或alias和URI request组合而成 $request_body_file $request_uri含有参数的完整的初始URI $query_string与$args一样 $sheeme http模式(http,https)尽在要求是评估例如 Rewrite ^(.+)$ $sheme://example.com$; Redirect; $server_protocol等同于request的协议,使用“HTTP/或“HTTP/ $server_addr request到达的server的ip,一般获得此变量的值的目的是进行系统调用。为了避免系统调用,有必要在listen指令中指明ip,并使用bind参数。 $server_name请求到达的服务器名 $server_port请求到达的服务器的端口号 $uri等同于当前request中的URI,可不同于初始值,例如内部重定向时或使用index
查看详情点赞评论收藏浏览652023-03-02 11:25:39导弹制造流程
导弹制造流程主要分为研制和生产两个阶段,每个阶段都包含了多个步骤,如下所示:研制阶段: 设计阶段:根据任务需求和技术要求,进行导弹的总体设计和方案确定。* 技术研究阶段:包括弹体外形设计、材料选型、动力系统研制、制导系统研制、试验测试等。 试验验证阶段:对导弹进行多项试验验证,包括静态试验、动态试验、环境适应性试验、系统一体性试验等。生产阶段: 毛坯制造:将所需材料加工成相应的毛坯。 零件加工:对毛坯进行加工,制造出各个零部件。 部件组装:将各个零部件组装成部件。 全弹总装:将所有部件组装成完整的导弹。 试验测试:对导弹进行各项试验测试,如静态试验、动态试验、全弹试验等。 导弹制造厂主要负责弹体的制造和全弹的总装,弹上安装的发动机、控制仪器及各种装置均由专业厂所提供。不同类型的导弹可能有不同的制导方式,常见的制导方式包括: 激光制导:需要激光指示器照射目标。* 雷达制导:通过雷达头持续照射目标。 红外制导:通过红外引导头照射辐射源。* 电视制导:通过摄像头观察目标校准。 GPS制导:将目标坐标预先输入导弹电脑中规划路线有发射后不管的能力。 有线制导:多用于反坦克导弹后面拖着一根线。 惯性制导:多用于弹道弹道速度较快。弹道导弹的制造主要分为三步:造弹头、造弹身、造弹尾。其中,造弹头和造弹身相对简单,而造弹尾则是重点。弹尾需要喷,因此需要先做一个药柱箱,然后将药装进去。弹头、弹身、弹尾装在一起,就可以制造出一枚地道的弹道导弹了。
查看详情点赞1评论1收藏1浏览1102023-03-02 11:13:55python xlwings实战
本文简单记录python xlwings 模块的一些用法 xlwings模块是python中对excel进行操作的一个模块。相对于其他支持excel操作的模块来讲,xlwings是目前最为全能,且运行效率较高,即综合评分较高的一个模块,且支持win和mac os系统。 import xlwings as xw app=xw.App(visible=True,add_book=False) # 新建Excel文档并保存 wb=app.books.add() wb.save(r'D:\svn_new\python\ceshi\3.xls') # 打开Excel,新建一张表,并给单元格赋值 wb=app.books.open(r'D:\svn_new\python\ceshi\1.xls') # 新增工作表 wb.sheets.add(name='第5季度',before=None,after=None) # 单元格赋值 wb.sheets['sheet1'].range('A1').value='人生苦短4' # 编辑单元格并加链接 rng=wb.sheets['sheet1'].range('A1') rng.add_hyperlink(r'www.baidu.com','百度','提示:点击即链接到百度') wb=app.books.open(r'D:\svn_new\python\ceshi\1.xls') sht = wb.sheets[0] rows = sht.range('a1').expand('table').rows.count columns = sht.range('a1').expand('table').columns.count all_value = sht[:rows,:columns].value wb2=app.books.open(r'D:\svn_new\python\ceshi\2.xls') sht2 = wb2.sheets[0] rows2 = sht2.range('a1').expand('table').rows.count+1 sht2.range(f'a{rows2}').value = all_value wb.save() wb.close() app.quit()
查看详情点赞评论收藏浏览712023-03-01 20:01:1060 句珍藏版唯美古诗词,送给温柔的你!(二)
1、春雨季,梧桐树上结丝绸;夏日凉,两人阵中称英雄;秋风起,鸿雁传音数千里;冬雪飘,美女为何露半腰。2、竹里风生月上门。理秦筝,对云屏。轻拨朱弦,恐乱马嘶声。含恨含娇独自语:今夜约,太迟生!3、借问吹箫向紫烟,曾经学舞度芳年。4、洞房记得初相遇。便只合、长相聚。何期小会幽欢,变作离情别绪。况值阑珊春色暮。对满目、乱花狂絮。直恐好风光,尽随伊归去。一场寂寞凭谁诉。算前言,总轻负。早知恁地难拼,悔不当时留住。其奈风流端正外,更别有、系人心处。一日不思量,也攒眉千度。5、涉江采芙蓉,兰泽多芳草。采之欲遗谁,所思在远道。6、春风十里扬州路,卷上珠帘总不如。7、汉兵已略地,四方楚歌声。大王意气尽,贱妾何聊生。8、今年花胜去年红,可惜明年花更好,知于谁同。9、无端嫁得金龟婿,辜负香衾事早朝。10、都道是金玉良缘,俺只念木石前盟。空对著,山中高士晶莹雪;终不忘,世外仙姝寂寞林。11、暮霞如烟,浮云千幻,石竹清音枫铃杳;闲人庄生诗酒仙,借酒一杯任逍遥。郢都布衣,孤风诗月,去留无意梅梅鸟;栀子花开土花翠,秋塘寒玉雨荷老。12、岂忘离忧者?向隅独心伤。聊因一书札,以代回九肠。13、良人去淄右,镜破金簪折。空藏兰蕙心,不忍琴中说。14、秋草生庭白露时,故园诸弟益相思。15、朝与佳人期,日夕殊不来。嘉肴不尝,旨酒停杯。寄言飞鸟,告余不能。俯折兰英,仰结桂枝。佳人不在,结之何为?从尔何所之?乃在大诲隅。灵若道言,贻尔明珠。企予望之,步立踟蹰。佳人不来,何得斯须。16、一川烟草,满城风絮,梅子黄时雨。17、残睡觉来人又晚,难忘,便是无情也断肠。18、没有人值得你流泪,值得让你这么做的人不会让你哭泣。19、老禅雅爱客,婆娑今尚可,我行浣花村,爱尔安居乐,你上平戎策。20、思悠悠,恨悠悠,恨到归时方始休,月明人倚楼。21、身无彩凤双飞翼,心有灵犀一点通。22、自春来惨绿愁红,芳心是事可可。23、两鬓可怜青,只为相思老。24、多情自古伤离,今宵酒醒何处,杨柳岸、晓风残月。25、花落花开自有时,总赖东君主。26、都缘自有离恨,故画作远山长。27、情多情转薄,而今真个不多情。28、花开堪折直须折,莫待无花空折枝。29、肠已断,泪难收。相思重上小红楼。30、天涯地角有穷时,只有相思无尽处。31、愿我如星君如月,夜夜流光相皎洁。32、一埠沧海变桑田,一埠留君作思念。33、问世间,情是何物,直教生死相许。34、心似双丝网,中有千千结。35、一寸相思千万绪,人间没箇安排处。36、闲坐悲君亦自悲,百年多是几多时。37、玲珑骰子安红豆,入骨相思知不知。38、执子之手,与子偕老。39、盈盈一水间,脉脉不得语。40、生当复来归,死当长相思。41、蓦然回首,那人却在,灯火阑珊处。42、酒入愁肠,化作相思泪。43、落花人独立,微雨燕双飞。44、舞徐裙带绿双垂,酒入香腮红一抹。45、思君如流水,何有穷已时。46、随你走在天际,看繁花满地。47、断无蜂蝶慕幽香,红衣脱尽芳心苦。48、怕相思,已相思,轮到相思没处辞,眉间露一丝。49、清风明月苦相思,荡子从戎十载馀。50、相思相见知何日,此时此夜难为情。51、壕村里夫妻别,泪比长生殿上多。52、鸳鸯俱是白头时,江南渭北三千里。53、相恨不如潮有信,相思始觉海非深。54、山穷水尽疑无路,柳暗花明又一村。55、当君怀归日,是妾断肠时。56、情人怨遥夜,竟夕起相思。57、褪尽风华,我依然在彼岸守护你。58、柔情似水,佳期如梦。59、结发为夫妻,恩爱两不疑。60、死生契阔,与子成说。执子之手,与子偕老。
查看详情点赞评论收藏浏览462023-03-01 19:36:4260 句唯美古诗词,温柔了时光,惊艳了岁月!(一)
1、烟蓑散响惊诗思,还被乱鸥飞去,秀句难续。——史达祖《八归·秋江带雨》2、不写情词不献诗,一方素帕寄心知。——冯梦龙《山歌》3、在天愿作比翼鸟,在地愿为连理枝。天长地久有时尽,此恨绵绵无绝期。——白居易《长恨歌》4、曾经沧海难为水,除却巫山不是云。——《离思五首》5、相思无因见,怅望凉风前。——李白《折荷有赠》6、众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。——辛弃疾《青玉案·元夕》7、邂逅相遇,与子偕臧。——《诗经·野有蔓草》8、红豆生南国,春来发几枝。——王维《相思》9、西城杨柳弄春柔。动离忧,泪难收。犹记多情,曾为系归舟。——秦观《江城子》10、小轩窗,正梳妆,相顾无言,惟有泪千行。——苏轼《江城子》11、月出皎兮,佼人僚兮,舒窈纠兮,劳心悄兮!月出皓兮,佼人懰兮,舒忧受兮,劳心慅兮!月出照兮,佼人燎兮,舒夭绍兮,劳心惨兮!——《诗经·陈风·月出》12、二十四桥明月夜,玉人何处教吹箫?——杜牧《寄扬州韩绰判官》13、问世间,情为何物,直教生死相许。——元好问《摸鱼儿二首·其一》14、十二阑干水半溪,千红万紫六桥西。两峰黛黯三春梦,一院花飞五夜鸡。鹤到九霄双翮健,书分四体八行齐。道人殷七归何处,百尺高枝莺又啼。——杨继端《闺怨》15、何处合成愁,离人心上秋。——吴文英《唐多令》16、落花风雨更伤春,不如怜取眼前人。——晏殊《浣溪沙》17、无意苦争春,一任群芳妒。——陆游《卜算子》18、十年生死两茫茫,不思量,自难忘。——苏轼《江城子·乙卯正月二十日夜记梦》19、落红不是无情物,化作春泥更护花。——龚自珍《己亥杂诗》20、梅花雪,梨花月,总相思。——张惠言《相见欢·年年负却花期》21、琵琶弦上说相思,当时明月在,曾照彩云归。——晏几道《临江仙》22、鸿雁在云鱼在水,惆怅此情难寄。——晏殊《清平乐》23、问世间,情为何物,直教生死相许?——元好问《摸鱼儿·雁丘词》24、色不迷人人自迷,情人眼里出西施。——黄増《集杭州俗语诗》25、红烛自怜无好计,夜寒空替人垂泪。——晏几道《蝶恋花》26、兽炉沈水烟,翠沼残花片,一行行写入相思传。——张可久《塞鸿秋》27、千里水天一色,看孤鸿明灭。——朱敦儒《好事近》28、望夫处,江悠悠。化为石,不回头。——王建《望夫石》29、盈盈一水间,脉脉不得语。——《迢迢牵牛星》30、直缘感君恩爱一回顾,使我双泪长珊珊。——卢仝《楼上女儿曲》31、世界微尘里,吾宁爱与憎。——李商隐《北青萝》32、锦瑟无端五十弦,一弦一柱思华年。——李商隐《锦瑟》33、四月十七,正是去年今日,别君时。——韦庄《女冠子·四月十七》34、人如风后入江云,情似雨馀黏地絮。——周邦彦《玉楼春》35、休言半纸无多重,万斛离愁尽耐担。——陈蓬姐《寄外二首其二》36、晓看天色暮看云,行也思君坐也思君。——《一剪梅》37、关关雎鸠,在河之洲。窈宨淑女,君子好逑。——佚名《诗经周南关雎》38、只缘感君一回顾,使我思君朝与暮。——《古相思曲》39、此去经年,应是良辰好景虚设。便纵有千种风情,更与何人说。——柳永《雨霖铃》40、教人无处寄相思,落花芳草过前期,没人知。——孙光宪《虞美人·好风微揭帘旌起》41、我欲与君相知,山无陵,江水为竭,冬雷震震夏雨雪,天地合,乃敢与君绝。42、日边消息空沈沈。画眉楼上愁登临。43、商人重利轻别离,前月浮梁买茶去。去来江口守空船,绕船月明江水寒。44、恨君不似江楼月,南北东西,南北东西,只有相随无别离。45、有情皓月怜孤影,无赖闲花照独眠。46、有女同行,颜如舜英。将翱将翔,佩玉将将。彼美孟姜,德音不忘。47、相逢不语,一朵芙蓉著秋雨。小晕红潮,斜溜鬟心只凤翘。待将低唤,直为凝情恐人见。欲诉幽怀,转过回阑叩玉钗。48、北方有佳人,绝世而独立。一顾倾人城,再顾倾人国。49、一见钟情到老,互诉百感衷肠。林中曲径共徜徉。意如河水淌,情似百花香。50、有美人兮,见之不忘,一日不见兮,思之如狂。51、妾似胥山长在眼,郎如石佛本无心。52、看朱成碧思纷纷,憔悴支离为忆君。53、有美人兮,见之不忘;一日不见兮,思之如狂。54、槿花朝开暮还坠,妾身与花宁独异。忆昔相逢俱少年,两情未许谁最先。感君绸缪逐君去,成君家计良辛苦。人事反覆那能知?谗言人耳须臾离。嫁时罗衣羞更著,如今始悟君难托叶。君难托,妾亦不忘旧时约。55、前生缘定今如约,沐浴东风踏雪来。56、曾经沧海难为水,除却巫山不是云。57、杨花榆荚无才思,惟解漫天作雪飞。58、唤起窗前尚宿酲,啼鹃催去又声声。丹青旧誓相如札,禅榻经时杜牧情。别后相思空一水,重来回首已三生。云阶月地依然在,细逐空香百遍行。59、春朝秋夜思君甚,愁见绣屏孤枕。60、蒹葭苍苍,白露为霜,所谓伊人,在水一方。
查看详情点赞评论收藏浏览632023-03-01 19:09:48Vite3+Vue3+TypeScript+Pinia+Element-plus 后台管理系统前端模板分享
前端技术栈:Vite3+Vue3+TypeScript+Pinia+Element-plus后台管理系统模板-阿里云盘地址:https://www.aliyundrive.com/s/B7VuYPpR1yT提取码: h42hGit地址:https://gitee.com/lingfeng9527/web_admin.git页面截图:(登录,用户管理,权限管理,菜单管理,文章分类,文章列表)等vite3Vite(法语意为 "快速的",发音 /vit/,发音同 "veet")是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:一个开发服务器,它基于 原生 ES 模块 提供了 丰富的内建功能,如速度快到惊人的 模块热更新(HMR)。一套构建指令,它使用 Rollup 打包你的代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资源。Vite 意在提供开箱即用的配置,同时它的 插件 API 和 JavaScript API 带来了高度的可扩展性,并有完整的类型支持。你可以在 为什么选 Vite 中了解更多关于项目的设计初衷。vue3vue3.0 向下兼容 vue2.x 版本,优化了主要核心双向绑定原理和体积大小,并且更加友好的兼容 ts 语法。打包大小减少初次渲染快 , 更新渲染快内存减少TypeScriptTypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统。PiniaPinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。 如果您熟悉 Composition API,您可能会认为您已经可以通过一个简单的 export const state = reactive({}). 这对于单页应用程序来说是正确的,但如果它是服务器端呈现的,会使您的应用程序暴露于安全漏洞。 但即使在小型单页应用程序中,您也可以从使用 Pinia 中获得很多好处:dev-tools 支持热模块更换插件:使用插件扩展 Pinia 功能为 JS 用户提供适当的 TypeScript 支持或 autocompletion服务器端渲染支持
查看详情点赞18评论2收藏1浏览9902023-03-01 11:21:28震惊,加上这css动画,产品经理直呼溜溜溜
波浪扩展动画 /* css动画 */ @-webkit-keyframes ball-scale-multiple { 0% { -webkit-transform: scale(0); transform: scale(0); opacity: 0; } 5% { opacity: 1; } 100% { -webkit-transform: scale(1); transform: scale(1); opacity: 0; } } @keyframes ball-scale-multiple { 0% { -webkit-transform: scale(0); transform: scale(0); opacity: 0; } 5% { opacity: 1; } 100% { -webkit-transform: scale(1); transform: scale(1); opacity: 0; } } .ball-scale-multiple { position: relative; -webkit-transform: translate(0.2rem,0.14rem); -ms-transform: translate(0.2rem,0.14rem); transform: translate(0.2rem,0.14rem); z-index: 1; } .ball-scale-multiple>div:nth-child(2) { -webkit-animation-delay: 0.2s; animation-delay: 0.2s; } .ball-scale-multiple>div:nth-child(3) { -webkit-animation-delay: 0.4s; animation-delay: 0.4s; } .ball-scale-multiple>div { background-color: rgb(191, 235, 205); width: .15rem; height: .15rem; border-radius: 100%; -webkit-animation-fill-mode: both; animation-fill-mode: both; position: absolute; right: 0rem; top: -0.54rem; opacity: 0; margin: 0; width: .8rem; height: .8rem; -webkit-animation: ball-scale-multiple 1s 0s linear infinite; animation: ball-scale-multiple 1s 0s linear infinite; }光标移动动画@keyframes colorRight { 0% { background-position: -100% 0; } 100% { background-position: 130% 0; } } li:hover { p:first-child { animation: colorRight 1.2s; color: #222; background: @fontColor linear-gradient( -135deg, transparent 25%, transparent 40%, rgba(255, 255, 255, 1) 40%, rgba(255, 255, 255, 1) 60%, transparent 60%, transparent ); background-size: 20px 20px; background-repeat: no-repeat; -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-position: -100% 0; } }边框闪动@keyframes borderRotate { 50% { height: 100%; width: 0; } 100% { height: 100%; width: 100%; } } li:hover { &::before { content: ""; position: absolute; width: 0; height: 0; border-left: 1px solid #98acff; border-bottom: 1px solid #98acff; z-index: 6; left: 0; bottom: 0; animation: borderRotate 0.5s forwards; } &::after { content: ""; position: absolute; width: 0; height: 0; border-top: 1px solid #98acff; border-right: 1px solid #98acff; z-index: 6; right: 0; top: 0; animation: borderRotate 0.5s forwards; } }
查看详情点赞评论收藏浏览582023-03-01 10:27:212023年还有人不知道TypeScript变量声明?
declare声明的变量和模块后,其他地方不需要引入,就可以直接使用了注意我们需要在配置文件下,引入声明文件{ "compilerOptions": { ... "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] ... }声明一个类型declare type Asd { name: string; }在include包含的文件范围内可以直接使用Asd这个typedeclare声明一个模块declare module '*.css';declare module '*.less';declare module '*.png';这样,我们可以在ts中引入相关的文件而不报错了declare声明一个变量declare var jQuery: (selector: string) => any;// 声明变量直接使用jQuery("#box")声明一个作用域declare namespace API{ interface ResponseObj { ... } ... }注意declare 与export 不要同级使用,不然的话,声明文件就需要导入了在声明文件中 type 与 interface 也可以不用加declare ,效果相同type myType = string | number;// 两者效果相同declare type myType = string | number;readonly用于标记一个属性是只读的,也就是不可修改的。什么时候要用命名空间?如果你发现自己写的功能(函数/类/接口等...)越来越多, 你想对他们进行分组管理就可以用命名空间, 下面先用"类"举例:什么是声明文件?声明文件就是给js代码补充类型标注. 这样在ts编译环境下就不会提示js文件”缺少类型”.Mock模拟接口数据模拟接口数据vue-meta主要用于管理HMTL头部标签,同时也支持SSR。vue-meta有以下特点:在组件内设置 metaInfo,便可轻松实现头部标签的管理metaInfo 的数据都是响应的,如果数据变化,头部信息会自动更新支持 SSR// 这里的?表示这个name属性有可能不存在class A { name?: string } interface B { name?: string }ts 中的type关键字type作用就是给类型起一个新名字,支持基本类型、联合类型、元祖及其它任何你需要的手写类型,常用于\color{red}{联合类型}type test = number; //基本类型 let num: test = 10; type userOjb = {name:string} // 对象 type getName = ()=>string // 函数 type data = [number,string] // 元组 type numOrFun = Second | getName // 联合类型type和interface的区别1、和接口一样,用来描述对象或函数的类型type User = { name: string age: number }; type SetUser = (name: string, age: number)=>void;vue3 中的 hooks 函数相当于 vue2 里面的 mixin 混入,不同在于 hooks 是函数。
查看详情点赞评论收藏浏览572023-03-01 10:16:11laravel 连续where查询
laravel 连续查询:$data = $request->all('page_type','page_port','page_domian','is_promote'); $pagelist = PageList::where(function ($query) use ($data) { foreach ($data as $k => $v) { if ($k == 'page_type') { if (!empty($v)) { $query->where('page_type','=',$v); } }elseif ($k == 'page_port'){ if (!empty($v)) { $query->where('page_port','like','%'.$v.'%'); } }elseif ($k == 'page_domian'){ if (!empty($v)) { $query->where('page_domian','like','%'.$v.'%'); } }elseif ($k == 'is_promote'){ if (!empty($v)) { $query->where('is_promote', $v); } } } })->get()->toArray();
查看详情点赞评论收藏浏览532023-02-28 19:30:24