暑假第一天
今天是放假第一天,刷刷短视频、看看综艺,一天就过去了。
这可能是比较放松的一个暑假,也是为数不多的一个暑假。考研er暑假得准备考研,甚至很多同学都没有回家,自然是没有暑假了。也有一些认识的、不打算就业的人正在大厂实习,自然也是没有暑假了。而我,这个时候再找份实习有点晚了,也快该秋招了,就呆家里刷刷算法、学学技术,过个舒服点的暑假吧。
昨天和两个高中同学一起回来的。一个是药学专业,打算考研,暑假在家备考;一个护理专业,过几天就去医院实习了,一实习就是8个月。和他们相比,似乎我是最轻松的。可眼看就要秋招了,什么都没准备好;就业压力这么大,失业人数那么多;互联网不景气,没有发展了……一大堆的问题接踵而至,我有啥可轻松的,我应该焦虑才对。
焦虑有用吗?因为焦虑,我能在秋招找到一份好工作吗?因为焦虑,互联网寒冬就能过去,就业岗位就能增加吗?显然不能,焦虑过度只能过度的焦虑。身边的人越来越焦虑,身边的人弦时刻紧绷着,我不要和他们一样。这个暑假,我要放轻松。轻松不是无所事事,虚度光阴,而是不焦虑,不强求。每天进步一点,哪怕只有一点,就很好。
九月份应该就要秋招了,可能会神仙打架,结果不尽人意,但秋招 ...
我的大三下学期
又到毕业季,看着校园里学生们穿着毕业服到处拍着照片,各个学院举办着毕业典礼,随处都是离别的声音。时间很快,来年6月,就到我了。
2月27号,开学。这月底,大三下学期就结束了。这一学期,过得不太一样。
不一样的是,疫情走了,花开了,人多了。不再封校,不再做核酸,不再戴口罩……校园内外充满了朝气,图书馆不再隔位就坐,网课大学成为过去,商业街热闹了起来。劳动节和同学在学校附近玩了一天,很开心,三年了第一次去学校外面逛。好的大学,没有围墙。我们就这样被困了两年多。
不一样的是,这学期一半多时间都去实习了,体验了一把打工人的苦与乐。
通过实习,认识了一些同龄的实习生,每到周末可以一起出去玩。几个月内,去了天安门、故宫、八达岭长城等景点,度过了一个个难忘的周末。赶上了组里的团建,玩得也很开心。还恰逢公司周年庆,领了个周年文化衫,留作纪念……这些都很快乐,都是很难得的经历。
实习学业难平衡。一边要忙着实习的事,完成导师给的需求,一边要忙着学校的事,生怕考试挂科。每次学校有考试,都要早上五点起床,坐最早的高铁赶到学校,哪怕这样,还有一次晚点了。下班时间晚,没有个人生活。哪怕只是实习生,大部分时间也晚上 ...
浑浑噩噩,一个月又过去了……
浑浑噩噩,一个月又过去了……算上放假,已经实习50多天了。
工作日时间过的很快,8点多起床,刷牙洗脸挤公交,接近10点到公司,晚上早的话7点多下班,晚的话9点多下班,到家后刷刷手机,十二点、一点多入睡。一天就这样过去了。
周六日时间过得很慢,一天无所事事,刷刷手机,听听音乐,一遍又一遍地打开聊天软件,总在盼望,总在失望。一天就这样过去了。
实习就像一个分水岭。在实习前我虽然会放纵,但总的来说是处于学习的状态,并且有动力来学习充实自己。在实习后,我就彻底放飞自我,停止了学习。我会一遍一遍又一遍地自我安慰说上班时间少,工作很累了没时间学习,但我知道这是借口罢了。我知道这样下去很危险,但又懒惰地不想做出改变,我知道这样下去很危险……
下周一就要开学了,因为没有考研的准备,我选择继续实习。就在我整天浑浑噩噩的同时,醒着的人正在为实现自己的目标而努力。还有几个月就要秋招了,现在还不是做梦的时候。醒醒吧,别再沉浸在实习的美梦中了,也许,这本就是场噩梦。
2022年终总结
时间过得真快啊,今天就是大年三十了,一年又这样过去了。
没什么可写的,但又想写点什么,毕竟好久没写记录自己的日常了,连”个站商店“也把我网站删除了。与其说是年终总结,不如说是流水账。
《个站商店》给你发了单独的邮件,
hi 胖虎同学 :
很抱歉,你的网站《胖虎同学》未能通过『个站商店』的审核,主要原因是内容非原创,多是技术类或者转载类,这类网站一般比较少人看。等你整改后,欢迎再来哦!
———— 祝生活愉快! 邮件来自《个站商店》 2023-01-18 12:51:59
今年也和往年一样,疫情,开学,放假……
2月28日,开学,开学没几天,疫情严重,在校上网课。5月25日,请假离校,提前过上暑假生活……
9月5号开始返校,已经是大三的老家伙了,因家里疫情被延期返校,13日回校。开学没几天,疫情严重,在校上网课。11月26日,请假离校,提前过上寒假生活……
除了开学放假外,今年有两件事可以说说。一件好事,一件坏事。
一件好事就是找到了实习。12月,我开始准备找实习的事,很幸运在12月30日拿到了实习offer。
1月5号,去公司报到,开始实习生活。1月21也就是今天,回家过年。这月只工 ...
MySQL数据库:事务
事务的概念
事务是逻辑上的一组操作,能够将各SQL语句打包执行,要么全都执行,要么全都不执行。
想象我们在操作数据库时,数据库突然挂了,或者多个线程写入数据库时覆盖了彼此的更改……一系列操作都会导致数据库数据的不一致性,基于这些问题,数据库有了事务这一机制。
拿转账举例,A想要向B转账500元,该操作分为两步:
A的账户减少500元
B的账户增加500元
事务会将这两步打包在一起执行,要么全都执行,要么全都不执行。不会出现A的账户少了500,而B账户没有增加500的情况。
如何使用事务
①开启事务
1start transaction;
②执行多条SQL语句
1234-- A账户减少500update accout set money=money-500 where name = 'A';-- B账户增加500update accout set money=money+500 where name = 'B';
③回滚或提交:rollback/commit;
1commit;
说明:rollback即是全部失败,commit即是全部成功。
事 ...
MySQL数据库:索引
索引是一种用于快速查找和检索数据的数据结构,类似于图书的目录,通过索引可以更快地找到对应的数据。
索引的优缺点
优点:
提高了查找的效率
通过创建唯一性索引,确保了每一行数据的唯一性。
缺点:
索引使用物理文件存储,带来了空间的消耗。
创建和维护索引需要耗费时间。当数据发生更改时,索引也会动态修改,降低SQL执行效率。
索引SQL
查看索引
1show 索引名 from 表名(列名);
创建索引
1create index 索引名 on 表名(列名);
删除索引
1drop index 索引名 on 表名
索引底层的数据结构
索引是一种查找更快的数据结果。
数组和链表的查找都需要遍历,最先淘汰。
二叉搜索树最坏情况下会变成单支树,查找的时间复杂度变为O(N),淘汰。
AVL树和红黑树使得左右子树高度相对平衡,但数据量太大时,树的高度过高,比较次数过多,即磁盘IO过多,淘汰。
哈希表查找的时间复杂度是O(1),是不是可以作为索引的数据结构了呢?NO!哈希表不支持顺序和范围查找,而SQL要经常进行排序和
范围查询,淘汰。
目前大多数数据库采用B树或B+树作为索引结构,在MyS ...
socket套接字网络编程
网络编程使计算机不再是一个孤立的个体,而是一个互联的整体,通过网络编程,可实现主机各进程间的数据传输。网络编程的核心就是套接字socket。socket是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。
socket主要分为三类:流套接字、数据报套接字、原始套接字。我们这里主要介绍前两种:
流套接字:使用传输层TCP协议,提供面向连接、可靠的数据传输,面向字节流,有接收缓冲区和发送缓冲区,传输数据大小无限制。
数据报套接字:使用传输层UDP协议,提供无连接、不可靠传输,面向数据报,只有接收缓冲区,传输大小受限,一次最多传输64K。
下面我们来看下Java中是如何使用socket来进行网络编程的。
数据报套接字
Java数据报套接字编程有两个核心的类,DatagramSocket和DatagramPacket。
两个核心类
DatagramSocket用于创建一个数据报套接字,用于发送和接收数据报。主要的构造方法如下:
方法名
说明
DatagramSocket()
创建一个UDP数据报套接字的Socket,绑定到本机任意一个随机端口 (一般用 ...
Java文件和IO流
文件基础操作
1234567891011121314151617181920public static void main(String[] args) throws IOException { //创建一个hello的目录 File dir = new File("hello"); if(!dir.exists()){ dir.mkdirs(); } //在hello目录下创建一个hello.txt文件 File file = new File(dir+"/hello.txt"); if(!file.exists()){ file.createNewFile(); } //得到文件名 System.out.println(file.getName()); //得到文件的绝对路径 System.out.println(file.getAbsolutePath()); //得到文件的规范路径,当 ...
多线程实例:线程池
顾名思义,线程池就是存放线程的池子。直接用线程不就好了吗,为什么还需要线程池呢?
相比进程,线程已经轻量很多了,创建和销毁线程消耗的资源会少很多,但终究还是有消耗的。为了进一步降低消耗,我们需要用到线程池。需要用到线程时不用申请,直接从线程池中取,用完之后也不用销毁,再放进线程池。
标准库中的线程池(简化版本):
123456789public static void main(String[] args) { ExecutorService pool = Executors.newFixedThreadPool(10); pool.submit(new Runnable() { @Override public void run() { System.out.println("hello"); } });}
模拟实现一个简化版本的线程池:
描述任务:直接用Runnable接口即可
组织任务:用到阻塞队列
描述工作线程:创建 ...
多线程实例:定时器
定时器是实际开发中常用的组件,例如文章的定时发布,双11的准点抢购活动等。
下面我们来看一下Java标准库中的定时器。
123456789public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("hello"); } }, 3000);}
该定时器会在3秒之后输出“hello”。创建一个定时器需要用到Timer类中的核心方法schedule,该方法内有两个参数,一个表示要执行的任务,一个表示任务在多长时间后执行。
认识了标准库中的定时器后,我们可以自己来模拟实现一个定时器。
首先,描述一个任务。创建一个MyTask类,类中有两个属性:一个是执行的任务,一个是任务执行时间。这两个属性类似于 ...