全栈工程师工作干货总结(三)

全栈工程师工作干货总结(三)生成工具如果让我们手工的来编辑这些字符画 显然是一件非常困难的差事

1. 字符画生成工具

如果让我们手工的来编辑这些字符画,显然是一件非常困难的差事。所以,我们可以借助下面这些工具,轻松地根据文字或图片来生成用于Banner输出的字符画。 

  • ASCII Generator

ps:

2. K8S部署pod尽量分散在不同节点node上

由于nlp分词服务属于CPU密集型,所以需要在部署的时候尽量使得pod分散在不同node上,已缓解cpu负载,目前发现线上部署每次发布都会到同一节点上,故如下改造

apiVersion: apps/v1 kind: Deployment metadata:   name: shenjian-nlp   namespace: shenjian-local spec:   replicas: 2   selector:     matchLabels:       project: shenjian-nlp       app: shenjian-local   template:     metadata:       labels:         project: shenjian-nlp         app: fangjia-local         buildId: latest     spec:       // 主要以下起作用       affinity:         podAntiAffinity:           preferredDuringSchedulingIgnoredDuringExecution:             - weight: 100               podAffinityTerm:                 labelSelector:                   matchExpressions:                     - key: project // 改为自己标签key                       operator: In                       values:                         - shenjian-nlp // 改为自己的名称值                 topologyKey: kubernetes.io/hostname

3. Object转JSON日期格式化并保持数据顺序及Value为空Key仍返回

3.1 业务背景

3.2 原因分析

fastjson在Object转JSON的时候,底层采用HashMap, 若有序,则需为LinkedHashMap, 查看源码发现

public JSONObject(int initialCapacity, boolean ordered){         if (ordered) {             map = new LinkedHashMap<String, Object>(initialCapacity);         } else {             map = new HashMap<String, Object>(initialCapacity);         }     }

可是Object如何转为JSON字符串,查看源码并没有发现转的方法,但是过程中返回的是标准的Map类型,故贴上以下代码

3.3 解决代码

SerializeConfig serializeConfig = new SerializeConfig(); ObjectSerializer serializer = new SimpleDateFormatSerializer(DateUtils.format()); serializeConfig.put(Timestamp.class, serializer); serializeConfig.put(java.sql.Date.class, serializer); serializeConfig.put(Date.class, serializer); if (obj instanceof Map){     JSONObject jsonObject = new JSONObject(16, true);     jsonObject.putAll((Map) obj);     // 输出key时是否使用双引号,默认为true     // 是否输出值为null的字段,默认为false     result = JSON.toJSONStringZ(jsonObject, serializeConfig, SerializerFeature.QuoteFieldNames, SerializerFeature.WriteMapNullValue); }


4. Oracle单字段字符串分割由一行改为多行

4.1 项目需求

虚拟核销中,若起草人离职,则已办视图项目客户专员无法查看,故需新增虚拟核销项目对应客户专员查看权限。

SELECT ID,PROJECTNO, CREATOR FROM FORM_MADJ_ACCOUNT WHERE ID IN('8cfa11ee-6ef4-448a-b75b-d7c99c96a76b', 'bf7ca28c-6d97-48b7-ad6e-a7398b5a11e4')

可见,项目中存在多项目编号,|分割,故首先分离项目

4.2 开始分离

SELECT DISTINCT         ID,         REGEXP_SUBSTR( PROJECTNO, '[^|]+', 1, LEVEL ) AS PROJECTNO -- 搜索正则匹配的串     FROM         YDAMS.FORM_MADJ_ACCOUNT      WHERE ID='8cfa11ee-6ef4-448a-b75b-d7c99c96a76b'         CONNECT BY LEVEL <= REGEXP_COUNT ( PROJECTNO, '|' ) + 1  -- level关键字,代表树形结构中的层级编号         AND ID = PRIOR ID  -- 主键ID 表示从下往上查找数据,可以理解为从叶子节点往上查找父级节点点         AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL --该句不变

分离为多行结果:

4.3 注意事项

SELECT DISTINCT id FROM table_name ORDER BY number DESC; --- 运行时往往会报错。因为在order by中出现的number没有在select distinct中出现,所以正确的写法应该是  SELECT DISTINCT id, number FROM table_name ORDER BY number DESC;

4.4 最终SQL语句

SELECT         DISTINCT FMA.ID,          FMA.PROJECTNO,         to_char(fma.create_date,'yyyy-mm-dd hh24:mi:ss') as create_date,         FMA.CREATE_DATE CREATE_DATE2 -- 注意这个在ORDER BY中存在,必须写否则会报错     FROM         FORM_MADJ_ACCOUNT FMA         LEFT JOIN sys_user SU ON FMA.CREATOR = SU.ID         LEFT JOIN (             SELECT DISTINCT                 ID,                 REGEXP_SUBSTR( PROJECTNO, '[^|]+', 1, LEVEL ) AS PROJECTNO              FROM                 YDAMS.FORM_MADJ_ACCOUNT CONNECT BY LEVEL <= REGEXP_COUNT ( PROJECTNO, '|' ) + 1                  AND ID = PRIOR ID                  AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL              ) PSI ON FMA.ID = PSI.ID         LEFT JOIN PROJ_INFO pi ON pi.PROJECTNO = PSI.PROJECTNO      WHERE         FMA.STATUS = 1          AND (SU.LOGINNAME = 'XXX' OR PI.PROJECT_MANAGER_ID = '08BA5F8B2CC4FC29E05010ACBD' )      ORDER BY         FMA.CREATE_DATE DESC

5. linux图形化界面安装与卸载

1.yum安装图形界面:

yum groupinstall "X Window System"

2.安装GNOME桌面环境

yum groupinstall "GNOME Desktop Environment"

3.安装KDE桌面环境 

yum groupinstall "KDE (K Desktop Environment)"

    (如果其中一环境不能安装,尝试用另一环境,亲测)

4.图形界面启动

键入命令 startx

5.图形界面想要卸载:

ps:作为服务器强烈不建议安转图形化界面

 6. Linux下Java中文字体不显示(解决图像中文乱码问题)

在Java中可以使用如下判断支持的字体

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); String[] fontFamilies = ge.getAvailableFontFamilyNames(); for (String s : fontFamilies) {     System.out.println(s); }
以下方法在fc6下测试通过,假设用户的jre路径为 /usr/java/jdk1.6.0_03/jre/ #cd /usr/java/jdk1.6.0_03/jre/lib/fonts #sudo mkdir fallback 将C:\WINDOWS\Fonts\simsun.ttc拷贝到 /usr/java/jdk1.6.0_03/jre/lib/fonts/fallback文件夹内 ok!

win7中没有,win2003 有simsun.ttc

测试程序

import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.font.FontRenderContext; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class Test { public static void main(String[] args) throws Exception { int width = 100; int height = 100; System.err.println(System.getProperty("sun.jnu.encoding")); String s1 = "时段"; // String s2 = new String("你好".getBytes(System.getProperty("sun.jnu.encoding")), "UTF-8"); // String s3 = new String("你好".getBytes("GBK"), System.getProperty("sun.jnu.encoding")); // String s4 = new String("你好".getBytes(), System.getProperty("sun.jnu.encoding")); File file = new File("/home/image.jpg"); Font font = new Font("Serif", Font.BOLD, 10); BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2 = (Graphics2D) bi.getGraphics(); g2.setBackground(Color.WHITE); g2.clearRect(0, 0, width, height); g2.setPaint(Color.RED); FontRenderContext context = g2.getFontRenderContext(); Rectangle2D bounds = font.getStringBounds(s1 , context); double x = (width - bounds.getWidth()) / 2; double y = (height - bounds.getHeight()) / 2; double ascent = -bounds.getY(); double baseY = y + ascent; g2.drawString(s1, (int) x, (int) baseY); ImageIO.write(bi, "jpg", file); } } 

7. 浅谈linux系统内存优化

​ 最近发现系统卡顿,排查内存的原因,发现 虚拟内存竟然使用2.5G!!! 系统不卡顿才怪 果断 # 将swap数据转储到内存中,并清空swap里数据(前提,可用内存大于swap已用内存) swapoff -a && swapon -a 2个G清理该命令竟然执行了10分钟。。要耐心等待,结果 防止内存充足仍然使用swap: # 注意不使用交换分区,注意不是禁用 echo "vm.swappiness=0" >> /etc/sysctl.conf # 使其立即生效 sysctl -p 

8. 浏览器间接性崩溃服务器400错误排查分析

3.1 问题现象描述

最近谷歌浏览器间接性的崩溃,服务器400错误,所用livebos-tomcat为6.5

3.2 排查过程

多次记录出现错误的日期,搜索上下文,未发现任何服务器报错的信息;
恰好计划tomcat升级为livebos-tomcat8.5,故优先升级tomcat为8.5;
后仍然出现该错误,只不过有了错误提示: java.lang.IllegalArgumentException: Request header is too large
想到最近开发的新功能rest方式调用oa接口,流程传递json串,可能因为json串的过长原因导致;

3.3 解决方案

普通tomcat 

在server.xml中 

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" maxPostSize="0" maxHttpHeaderSize =""/> 

SpringBoot

在application.properties文件中添加 `server.max-http-header-size=`

今天的文章 全栈工程师工作干货总结(三)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-17 13:17
下一篇 2024-12-17 13:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/88902.html