C语言网络编程
C语言网络编程以前目光只盯着应用层的东西看, 对于c语言和linux等底层知识一直抱着抵触的态度, 现在因为考试不得不恶补这些知识, 才发现这些”原始”的知识所蕴含的设计思想是很有价值的, 它完善着我们的”计算机思维”. 而且本文所涉及到的知识点, 在后端开发岗的面试中也是很常见的考点, 我现在深有体会: “背八股文”和”具体学习过代码”在面试中的表现是完全不同的. 背八股文你只能记住作者所说的内容, 而理解了代码, 你就理解了这种技术的使用场景 socketsocket是一种进程间通信的方式, 和信号, 共享内存等方式不同的是, 这种方式允许两个不同主机上的进程相互通信. 可以理解为socket就是一个插口, 两个主机的插口通过一根管道连接起来, 向socket写入数据就是发送数据, 从socket读取数据就是接收数据. 在linux中, socket以文件的形式存在的, 通过文件描述符(通常用一个整数表示)可以操作socket. socket通信流程图: 字节序网络字节序是一种标准化的字节序,用于在不同主机之间进行数据传输和通信。它采用的是大端字节序(Big-Endian)...
新Java项目开发环境搭建常见问题
新Java项目开发环境搭建常见问题学习/接手新项目的第一件事就是把项目跑起来. 这里记录一下我实习时的一些经验. 以供大家和自己参考. 项目的jdk版本是否正确? (可以通过idea的文件->项目结构->项目设置->项目->SDK查看) maven的运行jre版本是否正确? maven是使用java开发的, 需要依赖于java运行环境 公司可能会给你一份hosts配置文件, 里面是公司自定义的dns规则. 所以当你发现找不到某台机器时, 检查以下hosts文件是否配置正确 公司maven私服的jar包不一定是最新的, 可以尝试把依赖模块的源码拉下来, 然后使用mvn install安装最新代码 如果还是报错, 可以尝试删除idea缓存并重启 到这里, 项目里应该没有飘红的地方了 尝试在本地运行项目(一般项目里都会带一份本地运行的配置文件) 如果运行出错, 并且看日志无法判断原因, 可以问一下同事该项目有没有特殊的jvm参数 如果半小时内自己还没有配置好, 就向同事讲述你的思考和实践, 并请求他帮你配置, 一般几分钟就搞定了...
大三寒假实习收获
大三寒假实习收获我12月份进入正大集团的供应链部门做 Java 实习生. 学到了很多学校里不教但十分必要的知识. 这里做一下总结, 以供各位朋友以及自己未来参考. Communication comes first上班以后才发现, 写代码只占程序员很少一部分的时间. 其余大部分时间被用来沟通. 互相准确地理解对方的意思是一件重要且困难的事情.(不要自卑或懊恼, 这是一个困扰全人类的长久存在的难题) 这对于木讷的工科生来说的确是一个挑战, 但是请尽快适应. 下面是一些常用沟通场景以及经验. 力求准确, 高效. 求助/需要他人做事简要描述自己的情况, 然后说明期望对方做的事. 我曾经犯的一个错误是, 在请教问题时, 把整个思考过程描述一遍. 对方还没听完就迷糊了. 实际上他根本不需要关注那些细节, 我只要把我的思考结论和自己遇到的困难告诉他, 然后表示我需要他帮助找出问题, 就可以了. 领任务mentor在描述任务时, 最好用纸或者电子设备对任务进行一个简单记录, 他说完以后当场用你自己的语言去复述一遍你对任务的理解, 避免因为理解偏差导致南辕北辙. 还要问ddl, 以...
一键内网穿透, 让别人也能访问你的本地服务
一键内网穿透, 让别人也能访问你的本地服务很多时候,我们本地已经把服务跑起来了,但别人就是访问不到。 比如下面这些场景: 前后端联调,需要把本地接口临时暴露给同事; 想把自己的 demo 发给别人体验; 在家里写了个小工具,想让外网设备也能访问; 临时展示项目,又不想专门买服务器部署一套。 这时候就会用到“内网穿透”。 什么是内网穿透?简单说,就是把你本地电脑上的服务,通过一个中间通道暴露到公网,让外部用户也能访问。 比如你本地启动了一个 Web 服务: 1http://localhost:3000 默认情况下,这个地址只有你自己的电脑能访问。内网穿透工具的作用,就是给它“映射”出一个公网地址,让别人也能打开。 这类方案特别适合: 临时演示 开发联调 轻量测试 短时间分享本地服务 如果你只是想临时把本地服务分享出去,其实不一定非要自己折腾 VPS、反向代理和域名。现在已经有一些现成工具可以把这件事做得很简单。 我常用的一个方案:Pinggy如果使用时间不长、流量要求不高,那么像 Pinggy 这样的工具已经足够方便。 它最大的优点就是:几乎不用配置,复制一条命令就能把本...
Docker方式安装常用软件(如MySQL, Redis等)
Docker 方式安装常用软件(如MySQL,Redis等)Why Docker?我决定用docker容器完全替代直接安装在本机上的 mysql, redis 等软件, 理由如下: 轻量级: 只会安装必要组件, 节省内存和硬盘. 例如 mysql, 我们一般只需要一个 mysql 服务器, 像 mysql 自带的命令行客户端, workbench 等组件其实都是多余的. 安装简单: 只要有docker环境, 只需要一个文件和一行命令即可安装。 隔离: 镜像内自带必要依赖. 再也不用担心缺少依赖或者依赖冲突了 统一: 启动/停止/重启都通过统一的 docker 命令来实现,会 docker 就可以,做到一通百通。降低学习成本。 易拆卸: 安装/卸载/修改版本对于容器来说是很简单的, 不会对主机环境有任何影响 跨平台:部分软件可能只有 linux 版本, 或者适用于你系统的版本安装起来很麻烦, 使用 docker 就可以避免这个问题, 因为容器都是运行在 linux 基础上的. 准备工作为了能够访问到容器,并实现容器间互联。我这...
ssh端口转发及其应用
ssh端口转发及其应用ssh端口转发可以用来灵活地实现对主机的访问, 主要有三种类型: 本地转发, 远程转发, 动态转发 以下例子中的命令都在A主机上执行, 可以认为A就是我们 需要保证你可以使用公钥免密登录跳板机1231 本地转发基本形式: ssh -L 本机上的端口X:目标主机:目标主机上的端口Y 跳板机用户名@跳板机 其中, -L是”本地转发”的意思. 本命令意为: 访问本机上的X端口就相当于访问目标主机上的Y端口, 中间经由跳板机的转发 模式很像我们常用的代理 以下是一个用于辨析概念的例子: 1ssh -L X:localhost:Y B_username@B_host 你肯定会想, “目标主机”参数填了localhost, 这不是闲的吗? 自己访问本地端口需要转发? 错, “目标主机”参数是相对于跳板机来说的, 对于跳板机来说, localhost是跳板机自己. 也就是说该案例中目标主机和跳板机是同一台机器 远程转发本地转发建立好了以后是我们自己用, 远程转发建立好了以后是给别人用的. 即, 我们充当了”跳板机”的角色 基本形式: ssh -R 使用者的端口X:目...
如何在数据库中安全地存储用户密码
如何在数据库中安全地存储用户密码账号密码登录是最常见的身份认证方式之一,但“能登录”并不代表“存得安全”。很多系统在功能上完成了登录,实际上却把用户密码暴露在了极高风险之下。 这篇文章想回答一个基础但非常重要的问题:如果要在数据库里存储用户密码,什么做法才算相对安全? 最糟糕的做法:直接存明文密码最早也最危险的实现方式,是直接把用户名和明文密码存进数据库。 登录时,后端执行类似这样的查询: 1234select count(*)from userwhere username = ${username} and password = ${input} 如果能查到记录,就认为密码正确。 这种做法的问题非常明显: 数据库一旦泄露,所有用户的密码都会被直接看到; 数据库管理员、运维人员或有读取权限的人也能轻易查看密码; 很多用户会在多个网站复用密码,一次泄露可能波及多个平台; 即使没有人恶意利用,要求用户全量修改密码本身也是巨大的成本。 所以,密码绝不能以明文形式存储。 这是最基本的安全常识。 第二阶段:只存密码的 MD5 值很多系统会进一...











