无需言 做自己 业 ,精于勤 荒于嬉.
- JAVA基础 21.Map
-
发表日期:2022-08-05 16:33:10 | 来源: | 分类:JAVA基础
-
示例1
import java.util.HashMap; import java.util.Map; public class MapDemo01 { public static void main(String[] args) { // TODO 自动生成的方法存根 Map<String, String> map = new HashMap<String, String>(); map.put("name", "zhangsan"); map.put("work", "techer"); } }示例2
import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class HashMapDemo01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub HashMap<String, String> map = new HashMap<String, String>();//HashMap => TreeMap = sort map.put("百度", "www.baidu.com"); map.put("腾讯", "www.qq.com"); map.put("网易", "www.163.com"); if (map.containsKey("百度")) { System.out.println(map.get("百度")); } Set<String> keys = map.keySet();//Collection<String> keys = map.values(); Iterator<String> iterator = keys.iterator(); while (iterator.hasNext()) { String str = iterator.next(); System.out.print(str+"\\"); } } }
- JAVA基础 20.List
-
发表日期:2022-08-05 16:31:29 | 来源: | 分类:JAVA基础
-
示例1
import java.util.ArrayList; import java.util.Collection; import java.util.List; public class ArrayListDemo01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List<String> allList = new ArrayList<String>(); allList.add("hello"); allList.add("world"); allList.add(1,"my");//在第二个位置上添加内容 System.out.println(allList); Collection<String> allCollection = new ArrayList<String>(); allCollection.add("hello"); allCollection.add("world"); //allCollection.add(1," ");//错误i System.out.println(allCollection); allList.addAll(allCollection);//可以指定位置 System.out.println(allList); allList.remove("world");//根据内容删除 但是只删除第一个 System.out.println(allList); allList.remove(0);//根据内容删除 但是只删除第一个 System.out.println(allList); System.out.println("allList的长度为:"+allList.size()); for (int i = 0; i < allList.size(); i++) { System.out.print(allList.get(i)+"、"); } String arr[] = allList.toArray(new String[]{});//将list 对象转换为 array 对象 } }示例2
import java.util.Set; import java.util.TreeSet; class Person implements Comparable<Person> { private int age; private String name; public Person(String name, int age) { setName(name); setAge(age); } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int compareTo(Person person) { if (this.age > person.age) { return 1; } else if (this.age < person.age) { return -1; } else { //return 0; return this.name.compareTo(person.name); } } public String toString() { return "姓名:" + getName() + " 年龄:" + getAge(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } public class TreeSetDemo { public static void main(String[] args) { // TODO 自动生成的方法存根 Set<Person> treeSet = new TreeSet<Person>(); treeSet.add(new Person("张三", 30)); treeSet.add(new Person("李四", 40)); treeSet.add(new Person("王二", 20)); treeSet.add(new Person("赵六", 60)); treeSet.add(new Person("麻子", 30)); treeSet.add(new Person("李四", 13)); treeSet.add(new Person("赵六", 60)); System.out.println(treeSet); //return 0; //[姓名:李四 年龄:13, 姓名:王二 年龄:20, 姓名:张三 年龄:30, 姓名:李四 年龄:40, 姓名:赵六 年龄:60] /** * 麻子 30 不见了 * 李四 13、40 * 赵六去重复了 */ //[姓名:李四 年龄:13, 姓名:王二 年龄:20, 姓名:张三 年龄:30, 姓名:麻子 年龄:30, 姓名:李四 年龄:40, 姓名:赵六 年龄:60] //赵六去重复了只有赵六去重复了 //[姓名:李四 年龄:13, 姓名:王二 年龄:20, 姓名:张三 年龄:30, 姓名:麻子 年龄:30, 姓名:李四 年龄:40, 姓名:赵六 年龄:60] } }
- JAVA基础 19.Charset
-
发表日期:2022-08-05 16:24:36 | 来源: | 分类:JAVA基础
-
示例1
public class CharsetDemo01 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(System.getProperty("file.encoding"));//GBK } }
- JAVA基础 18.zip
-
发表日期:2022-08-05 16:22:18 | 来源: | 分类:JAVA基础
-
示例1
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipDemo01 { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("d:"+File.separator+"test.txt"); File zipFile = new File("d:"+File.separator+"test.zip"); FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(zipFile); ZipOutputStream zos = new ZipOutputStream(fos); zos.setComment("这里是注释"); ZipEntry zEntry = new ZipEntry(file.getName()); zos.putNextEntry(zEntry); int temp = 0; while ((temp=fis.read())!=-1) { zos.write(temp); } zos.finish() ; zos.close(); } private static Object Charset(String string) { // TODO Auto-generated method stub return null; } }示例2
/** * Created by Administrator on 2016/4/5. */ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; public class ZipUtils { public static void zip(ArrayList<String> src, String dest) throws IOException { ZipOutputStream out = null; try { File outFile = new File(dest);// 源文件或者目录 out = new ZipOutputStream(new FileOutputStream(outFile)); for (int i = 0; i < src.size(); i++) { File fileOrDirectory = new File(src.get(i));// 压缩文件路径 zipFileOrDirectory(out, fileOrDirectory, ""); } } catch (IOException ex) { ex.printStackTrace(); } finally { // 关闭输出流 if (out != null) { try { out.close(); } catch (IOException ex) { ex.printStackTrace(); } } } } public static void zip(String src, String dest) throws IOException { // 提供了一个数据项压缩成一个ZIP归档输出流 ZipOutputStream out = null; try { File outFile = new File(dest);// 源文件或者目录 File fileOrDirectory = new File(src);// 压缩文件路径 out = new ZipOutputStream(new FileOutputStream(outFile)); // 如果此文件是一个文件,否则为false。 if (fileOrDirectory.isFile()) { zipFileOrDirectory(out, fileOrDirectory, ""); } else {// 返回一个文件或空阵列。 File[] entries = fileOrDirectory.listFiles(); for (int i = 0; i < entries.length; i++) { // 递归压缩,更新curPaths zipFileOrDirectory(out, entries[i], ""); } } } catch (IOException ex) { ex.printStackTrace(); } finally { // 关闭输出流 if (out != null) { try { out.close(); } catch (IOException ex) { ex.printStackTrace(); } } } } private static void zipFileOrDirectory(ZipOutputStream out, File fileOrDirectory, String curPath) throws IOException { // 从文件中读取字节的输入流 FileInputStream in = null; try { // 如果此文件是一个目录,否则返回false。 if (!fileOrDirectory.isDirectory()) { // 压缩文件 byte[] buffer = new byte[4096]; int bytes_read; in = new FileInputStream(fileOrDirectory); // 实例代表一个条目内的ZIP归档 ZipEntry entry = new ZipEntry(curPath + fileOrDirectory.getName()); // 条目的信息写入底层流 out.putNextEntry(entry); while ((bytes_read = in.read(buffer)) != -1) { out.write(buffer, 0, bytes_read); } out.closeEntry(); } else { // 压缩目录 File[] entries = fileOrDirectory.listFiles(); for (int i = 0; i < entries.length; i++) { // 递归压缩,更新curPaths zipFileOrDirectory(out, entries[i], curPath + fileOrDirectory.getName() + "/"); } } } catch (IOException ex) { ex.printStackTrace(); // throw ex; } finally { if (in != null) { try { in.close(); } catch (IOException ex) { ex.printStackTrace(); } } } } @SuppressWarnings("unchecked") public static void unzip(String zipFileName, String outputDirectory) throws IOException { ZipFile zipFile = null; try { zipFile = new ZipFile(zipFileName); Enumeration e = zipFile.entries(); ZipEntry zipEntry = null; File dest = new File(outputDirectory); dest.mkdirs(); while (e.hasMoreElements()) { zipEntry = (ZipEntry) e.nextElement(); String entryName = zipEntry.getName(); InputStream in = null; FileOutputStream out = null; try { if (zipEntry.isDirectory()) { String name = zipEntry.getName(); name = name.substring(0, name.length() - 1); File f = new File(outputDirectory + File.separator + name); f.mkdirs(); } else { int index = entryName.lastIndexOf("\\"); if (index != -1) { File df = new File(outputDirectory + File.separator + entryName.substring(0, index)); df.mkdirs(); } index = entryName.lastIndexOf("/"); if (index != -1) { File df = new File(outputDirectory + File.separator + entryName.substring(0, index)); df.mkdirs(); } File f = new File(outputDirectory + File.separator + zipEntry.getName()); // f.createNewFile(); in = zipFile.getInputStream(zipEntry); out = new FileOutputStream(f); int c; byte[] by = new byte[1024]; while ((c = in.read(by)) != -1) { out.write(by, 0, c); } out.flush(); } } catch (IOException ex) { ex.printStackTrace(); throw new IOException("解压失败:" + ex.toString()); } finally { if (in != null) { try { in.close(); } catch (IOException ex) { } } if (out != null) { try { out.close(); } catch (IOException ex) { } } } } } catch (IOException ex) { ex.printStackTrace(); throw new IOException("解压失败:" + ex.toString()); } finally { if (zipFile != null) { try { zipFile.close(); } catch (IOException ex) { } } } } } /* * Activity调用 package com.comc; import java.io.IOException; import * com.zipUtil.ZipUtil; import android.app.Activity; import android.os.Bundle; * public class IZipActivity extends Activity { * * * @Override public void onCreate(Bundle savedInstanceState) { * super.onCreate(savedInstanceState); setContentView(R.layout.main); try { * ZipUtil.zip("/data/data/com.comc/databases", * "/data/data/com.comc/databases.zip"); * ZipUtil.unzip("/data/data/com.comc/databases.zip", * "/data/data/com.comc/databases"); } catch (IOException e) { * e.printStackTrace(); } } * * } */示例3
import java.io.IOException; import java.util.ArrayList; import java.util.List; public class Demo { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<String> fileListsList = new ArrayList<String>(); fileListsList.add("D:/zip/device-2016-03-26-195134.png"); fileListsList.add("D:/demo/hyasset/config.xml"); fileListsList.add("D:/demo.txt"); fileListsList.add("D:/demosvn/YCCitizen/build/intermediates/dex-cache/"); try { ZipUtils.zip(fileListsList, "D:/ziped/abc.zip"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } /* try { ZipUtils.zip("D:/zip/", "D:/ziped/abc.zip"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } */ } }
- JAVA基础 15.DataOutputStream
-
发表日期:2022-08-05 16:20:31 | 来源: | 分类:JAVA基础
-
示例1
import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class OutputDemo01 { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("d:"+File.separator+"test.txt"); FileOutputStream os = new FileOutputStream(file); DataOutputStream dos = new DataOutputStream(os); int arg = 123; dos.writeInt(arg); } }
- JAVA基础 14.Scanner
-
发表日期:2022-08-05 16:19:27 | 来源: | 分类:JAVA基础
-
示例1
import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ScannerDemo01 { /** * @param args * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException { // TODO Auto-generated method stub File file = new File("d:"+File.separator+"test.txt"); Scanner scanner = new Scanner(file); /* String string = scanner.next(); System.out.println(string); */ while (scanner.hasNext()) { String string = (String) scanner.next(); System.out.println(string); } } }
- JAVA基础 13.BufferedReader
-
发表日期:2022-08-05 16:17:46 | 来源: | 分类:JAVA基础
-
示例1
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class ReaderDemo01 { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("d:" + File.separator + "OutputStreamDemo.txt"); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String str = null; while ((str = br.readLine()) != null) { System.out.println(str); } fr.close(); br.close(); /* FileReader fReader = null; try { fReader = new FileReader(file); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } BufferedReader bReader = new BufferedReader(fReader); try { System.out.print(bReader.readLine()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } */ } }示例2
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; public class ReaderDemo02 { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub InputStream is = System.in;//字节流 InputStreamReader isr = new InputStreamReader(is);//转换为字符流 BufferedReader br = new BufferedReader(isr); System.out.println("请输入内容"); String str = null; while ((str = br.readLine())!=null) { if ("exit".equals(str)) { break; } System.out.println(str); } is.close(); isr.close(); br.close(); System.out.println("bye!"); /* BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in)); String string = null; System.out.println("请输入内容"); try { string = bReader.readLine(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("输入内容:"+string); */ } }示例3
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ExecDemo01 { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub int i = 0 ; int j = 0 ; BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in)); String string = null; System.out.println("请输入第一个数字:"); string = bReader.readLine(); i = Integer.parseInt(string); System.out.println("请输入第二个数字:"); string = bReader.readLine(); j = Integer.parseInt(string); System.out.println(i+"+"+j+"="+(i+j)); } }
- JAVA基础 12.InputStreamReader和OutputStreamWriter
-
发表日期:2022-08-05 16:13:02 | 来源: | 分类:JAVA基础
-
示例1
package stream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class InputStreamReaderDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("D:"+File.separator+"123.txt"); FileInputStream stream = new FileInputStream(file); InputStreamReader reader = new InputStreamReader(stream); char c[] = new char[1024]; int length = reader.read(c); System.out.println(new String(c,0,length)); stream.close(); reader.close(); } }示例2
package stream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; public class OutputStreamWriterDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("D:"+File.separator+"123.txt"); FileOutputStream stream = new FileOutputStream(file); OutputStreamWriter writer = new OutputStreamWriter(stream); writer.write("测试一下3。"); writer.close(); stream.close(); } }
- JAVA基础 10.RandomAccessFile
-
发表日期:2022-08-05 16:09:05 | 来源: | 分类:JAVA基础
-
示例1
package File; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; public class RandomAccessFileDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("D:" + File.separator + "RandomAccessFile.txt"); //两种写法均可 //RandomAccessFile rFile = new RandomAccessFile("D:"+File.separator+"test.txt", "rw"); RandomAccessFile rFile = new RandomAccessFile(file, "rw"); String string = "abcdefg我去这是什么情况?"; ; rFile.write(string.getBytes());//写入中文会乱码 rFile.close(); write(); read(); } private static void read() { // TODO Auto-generated method stub File file = new File("d:" + File.separator + "123.txt"); RandomAccessFile rFile = null; try { rFile = new RandomAccessFile(file, "r"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { byte c[] = new byte[(int) rFile.length()]; rFile.read(c); System.out.println(new String(c)); } catch (IOException e) { e.printStackTrace(); } } public static void write() { File file = new File("d:" + File.separator + "123.txt"); RandomAccessFile rFile = null; try { rFile = new RandomAccessFile(file, "rw"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } String name = "zhangsan"; int age = 30; try { rFile.writeInt(age); // rFile.writeBytes(name); rFile.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
- JAVA基础 9.FileReader和FileWriter
-
发表日期:2022-08-05 15:57:36 | 来源: | 分类:JAVA基础
-
示例1
package File; import java.io.File; import java.io.FileReader; import java.io.IOException; public class FileReaderDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("D:"+File.separator+"FileWriterDemo.txt"); FileReader fileReader = new FileReader(file); char[] c = new char[1024]; int length = fileReader.read(c); //int length = (int)file.length();其实获取文件大小本该没有错,可是却错了,后面是方格格占位符,为什么呢?如果是汉字会占用2个字节而这里却是以字符读取的。多了一倍 System.out.println(new String(c , 0, length)); fileReader.close(); } }示例2
package File; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class FileWriterDemo { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub File file = new File("D:"+File.separator+"FileWriterDemo.txt"); FileWriter fWriter = new FileWriter(file,false); String string = "踩踩踩踩踩"; fWriter.write(string); fWriter.close(); } }
- JAVA基础 17.TimerTask
-
发表日期:2022-08-05 15:20:57 | 来源: | 分类:JAVA基础
-
示例1
import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask {//必须继承TimerTask public void run(){ System.out.println(new SimpleDateFormat("yyyy年MM月dd日 HH点mm分ss秒").format(new Date())); } }示例2
import java.util.Timer; public class Task { public static void main(String[] args) { Timer timer = new Timer(); MyTask myTask = new MyTask(); timer.schedule(myTask, 1000, 2000); } }
- 集速公告 个人简历
-
发表日期:2022-06-06 16:35:38 | 来源: | 分类:集速公告
-
杨耀东个人简历
过往标签:全栈工程师、架构师、项目经理、技术担当、部门负责人、10年从业经验,工作认真负责。
一、计算机相关学习
进入计算机行业起因:
2008年买第一台个人电脑。联网当天电脑瘫痪,第二天找电脑维修公司维修说中病毒了重做系统,当晚再次瘫痪,第三天电脑公司来重做系统。看了两遍别人做系统,学会了。好奇于计算机病毒是什么,开始了互联网探索。
2009年-2010年 在学校学习期间
常出没于黑鹰基地,黑客基地,绿色兵团等网站论坛学习网络攻防安全。
主要学习了解vmware虚拟机,sql注入,跨站脚本入侵xss,cookie伪造,木马加壳、脱壳、免杀,抓肉鸡,暴力破解,依靠搜索引擎定向嗅探漏洞程序攻击。web挂马,服务器提权,ftp等。对国内外数十款杀毒软件非常了解。梦想是做一个顶尖黑客,完全出于爱好,觉得很酷。
2010年 放弃学习网络安全转学编程原因:
1.入侵成功过一些系统,因看不懂代码,无心之失造成别人服务器宕机。违背自己“友情检测”的初衷,为了不再干错事,所以开始学习编程。
2.当年网络安全不如现在得到重视,没有专业机构可以学习,而曾经学习的那些网站论坛因一些事件该封的封了,该抓的抓了,该关的关了。逐渐没有了学习渠道。
2010-2011年
在校课余自学asp、access数据库、html、css ,了解一点JavaScript
个人博客 学的第一门编程语言和第一个项目
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
asp
Html
Css
Javascript
access
IIS 6
xp
2月
小
2011-2012年
跟着国内一位比较有名的php编程大牛系统化学习html、css、JavaScript、PHP、MySQL。
尤其PHP讲的非常深入,对一些比较高深的如模板引擎实现、静态缓存技术、控制器实现讲的非常透彻。还有URL重写、SEO等扩展,为以后从业打下了比较好的基础。
2012年1-5月
学习中,开发了一款php轻量型MVC框架,取名CanQuick。框架特色是第一次运行生成配置缓存、页面缓存,模板引擎自研实现了前后端分离,支持页面静态化。其实别的框架思路也都八九不离十。
二、工作项目经历
公司名称:宁夏太合集团
公司规模:100 + 人
工作时间:2012年5月8日入职 至2015年7月 约3年
工作职务:普通员工->信息中心副主管->信息中心主管->主管享受副总监待遇
工作内容:在太合集团工作的三年里,2年以上担任信息中心主管。主要负责公司网络、各种打印机设备、电话设备、监控设备、网站开发维护,网站收发稿,部门人员招聘等部门综合事务。
太合集团官网 开发1~2月 长期维护
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
CanQuick
Html
Css
Javascript
自己搭的架子,从0开始,前后端独立完成
mysql
Apache
Server 2003
1月
小
OA办公系统 开发零零碎碎6月+
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
CanQuick
html
Css
Javascript
jQuery + ajax 全项目无刷新,动态异步加载。Web 2.0概念。
这个项目开始我的前端已经炉火纯青,当时思想已经很先进了。
自己搭的架子,从0开始,前后端独立完成
mysql
Apache
Server 2008
1月
中
最后调研了国内一线的大部分OA产品如:泛微、通达OA、致远OA、金蝶OA等。私有化部署试用了一个多月泛微。最后致远便宜性价比,够公司用所以买了致远OA。没有使用自研原因:1有成熟产品价格可接受。2.非研发公司也无团队,我部门其它事务太多根本没有时间一个人去写前后端。3.我从业年头不长很多事情自己也不明白。所以开发了个半成品,不过利用那些时间研究学习了一些知识。当时泛微来部署的技术和日后的致远都见过我写的程序,后来都邀请过offer,没去。
2013年 10月~ 2014年4月 停职工作半年时间,深造
1.和国内一个很牛的Javacript游戏开发工程师系统化学习JavaScript。扎实了JavaScript功底,从一些层面扩展了思路、开了眼界,后来果然node js实现了当初他讲的一些内容。
基于学习的结果,自己写了一个类似jQuery的JavaScript的框架取名JQuick 实现了80% 的jQuery的功能,语法与jQuery大体一致。后续用于数个线上项目,还基于JQuick 框架写了一些弹窗、拖动、表单处理等优秀的插件。
2.学习Java语言,Javaweb开发。
练手博客 1~2月
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
jsp + javabean + JSTL1.2 +Servlet +struts
Html +Css+Javascript
mysql
Tomcat
Xp
3月
小
当年学完JavaWeb只做了一个练手项目,后续未用于线上项目,也并未深入研究。
原因:当年的Javaweb 主要由jsp 、javabean、 JSTL1、Servlet 去实现,由于会其它编程语言都已经MVC或接口化了,感觉这一套又笨又麻烦,就没有深入研究,但是博客里留下了大量学习笔记。
学习深造了半年后又回到单位工作
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
Thinkphp2.x
html
Css
Javascript
jQuery
自己搭的架子,从0开始,前后端独立完成
mysql
Apache
亿恩科技
VPS服务器
2月
小
2015年7月中旬辞职
2015年8月 - 2016年2月
辞职期间继续深造学习安卓,想换一个软件公司,当时安卓刚火不就想干干移动端开发。
第二次系统化学习Java,写了上百个笔记/demo 所以Java的基础功底打的非常好。
系统化学习安卓开发,对Java多线程上传下载、断点续传、异步UI通信,app生命周期,实现各种炫酷UI组件,特效很熟练,对一些常用工具类封装,后续用到了很多线上项目里。
公司名称:银川市中银融信科技发展有限公司
公司规模:研发团队数十人
工作时间:2016年2月 至2019年2月 约3年
工作职务:安卓工程师->全栈工程师、项目负责人->公司副总经理
工作内容:从独立开发,到远程联合开发,到创建团队带领新人,到团队初具战斗力、到客户对接、到项目公关、到项目交付。这三年里从零开始到独当一面,投入了非常多的心血。虽然公司最后因为法律纠纷和资金链断裂结果不尽人意,但是单从技术、项目、团队能力、业务收入的角度上讲是成功的。也比较庆幸,一手带出很多前端、安卓、Java刚入行的新手到最后都能在各个工作单位成为顶梁柱,都能在一个三四线城市10k+的收入体现。
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
+对接大量审批系统接口,事项查询、申报修改,要件上传
+对接公安人口库,统一身份认证。
对接汉王私有化部署的人脸识别服务对比公安库身份证照片
Oracle
Tomcat
应用商店
2月
中
安卓工程师及项目负责人
项目客户:银川市行政审批服务局
开发合作方:南京中兴软创(中兴被制裁后软创卖给了阿里改了名)
项目介绍:行政审批APP是智慧政务下的一款移动端产品。依托中兴软创开发的审批系统的接口,实现足不出户线上办事。长期驻场开发,上线时间紧迫,困难多任务重,对接量大,基本上都是夜以继日的干。白天陪同审批局、中兴开会、演示。还有大量的文档工作,夜里写项目,对接的系统很古老bug多。安卓验收过的模块,再给IOS 组安排开发。
项目成就:上过省、市、央视新闻 (我出镜是群众演员,接受采访的办业务市民) 政务服务改革的亮点 第一批线上办事的政务APP
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
安卓原生开发
IOS 原生开发
Oracle
Tomcat
-
2月
中
项目负责人
APP2.0在1.0的基础上做了优化,增加部分功能。交付后长期维护。
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
基于jeesite平台二开(
Spring Framework + Spring MVC+
MyBatis +
Apache Shiro +
Ehcahe +
)
对接航天信息的电子签章私有化部署服务+usbkey
+对接行政审批系统Mysql
Tomcat
-
2月
大
项目负责人
项目客户:银川市行政审批服务局
开发合作方:南京中兴软创(中兴被制裁后软创卖给了阿里改了名)
项目介绍:实现近百种证照电子化,如教师资格证、园林绿化企业、广告经营许可证、食品经营、药品经营、建筑行业等各种证件及证书电子化。并且证照不同时期板式内容变更会有版本管理,多页管理。模板管理。证照内容是完全实现线上配置的。证照的种类繁多,不光是电子证照,还包含纸质套打。整个系统光模板制作到最后出证标准都是海量的工作。
签章服务采用服务器硬件加密卡+签章服务端后台私有化管理+管理员主USBKey+N个签章usbkey+数字证书。可以在线验证证照有效性。签章防伪、追溯。电子证照上均开创性生成二维码,APP端扫描二维码可以查看证照详情。
我负责项目从需求沟通、项目额商务谈拢、立项,合同,项目开发规划,技术路线选项。找第三方签章厂商谈合作到购买私有化部署。项目原型实现。未参与具体功能代码编码,但是
Java及前端核心的难题和一些诡异bug多是我解决的。
项目成就:上过省、市、央视新闻
政务通信云 2017年3月 - 2017年 5月
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
服务端、PC端 PHP -thinkphp 3.x
安卓端原生开发
对接环信JS SDK、PHP SDK 、Android SDK
Mysql
Nginx
-私有化机房部署 Linux
3月+
中
项目负责人,主开发者
项目客户:自治区政务办
项目介绍:超大的组织架构管理功能,权限每一级单位可以给下级单位处室设置权限。基于环信的实时聊天沟通功能,分布式部署。
服务端及PC端、移动端的接口由我用PHP写。移动端由移动端同事写。
前端PC聊天无论是布局还是js+socket难度都较大,前端工程师没有接触过短时间写不出来,所以我抛弃JavaScript千篇一律的function写法,由Java开发的思想,在当时独具创新的使用了全部面向对象,把数据架构定义实体类,变量监听,事件驱动。界面响应式动态渲染,全项目无刷新保证socket长连接不断,设计思想超前,有点类似现在的vue,这个项目做得比较案例,而且项目里正好用到我当年自己写的JavaScript 框架jQuick其中的很多组件,所以实现效果非常酷炫。【之前在公司给大家演示过。】
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
PHP开发
对接审批系统、公安交管、公积金……
服务端基于**保密框架
前端界面无刷新,布局复杂,独立纯原生手写。
前端及管理端架构从0开始写了一套开发平台,后来我几乎所有系统都基于这套平台做的。
Mysql
Nginx
-私有化机房部署 Linux
3月+
大
项目负责人、主开发工程师
项目简介:网站是省会城市市级官方网站,线上事项查看、申报、电子证照查询的入口,网站访问量在地方来说比较大,每日至少数万人次访问。
除了事项还有银川市大约五六十个市级单位投诉建议问答的平台。这个模块用的人非常多,市民有任何问题都可以上来留言,很快得到解决。这个网站我觉得当初也算得上是一张城市名片,就如同“天津本地宝”在天津一样知名。我觉得这可能是我做过的比较有价值的项目之一。
网站前后端我独立一人完成,加一个美工作图。白+黑开发月2个月初版上线,后常年开发维护新需求,并开发大量接口给APP 和其它项目使用,项目中标价格7位数*N。
开发这个项目时可能是这辈子开发效率最高的时候。那会儿并发大项目太多,公司近40个研发也排不来人,都投入在已展开的项目里,也短时间招聘不到合适的人,中兴(银川智慧城市研究院副总)担心研发人太少项目可能要黄。天天下午绿着脸叫我去他办公室抽烟聊聊。很嚣张的给他们说放心,我能顶一个数十人的团队。当然大家都当成笑话,但为了自己吹过的牛和公司利益,在他们办公室工作两个月,一个人写代码一排人做旁边讲流程看着我写代码调程序,白板,投影在对面一直开着挂着会议指示。总算是不负众望。突破个人极限,也令所有人刮目相看,如期开发完成初版并上线,由此后面xx多次高薪挖过,没去。由于专业技能出色,业务能力强,银川公司打理的不错,boss怕我跳槽,给加了点工资。并发文成了公司副总经理。
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Java开发
基于jeesite平台二开(
Spring Framework + Spring MVC+
MyBatis +
Apache Shiro +
Ehcahe +
Bootstrap
+activit 工作流)
Mysql
Tomcat
-
2月
大
项目负责人
项目客户:银川市行政审批服务局
项目介绍:要办的事项400多个,事项梳理巨麻烦,还有各种事项要件,不同的事项不同的流程。所谓的事项比如办”教师资格证” 由审批系统办理,最后由电子证照系统出电子证和套打纸质证。我的工作内容和电子证照系统差不多,不复述。
政务服务公众号 2017年10月 -- 2019年 长期开发维护
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Mui+ajax
-
Nginx
-私有化机房部署
3月+
项目第二负责人
项目第二负责人,公司副总经理,负责项目商谈,跟进,交付,不参与移动端开发。由项目负责人安排开发工作,依托政务服务网站,项目内容和审批APP差不多,公众号端。
智慧城市APP 2018年5月 -- 2019年
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
安卓原生
Mysql
Nginx
-私有化机房部署
3月+
中
项目第二负责人
项目第二负责人,公司副总经理,负责项目商谈,跟进,交付,不参与移动端开发。由项目负责人安排开发工作,期间帮写了几个服务端接口。
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Java开发
基于jeesite平台二开(
Spring Framework + Spring MVC+
MyBatis +
Apache Shiro +
Ehcahe +
Bootstrap
)
Mysql
Tomcat
-私有化机房部署
3月+
中
项目第二负责人
项目第二负责人,公司副总经理,负责项目商谈,跟进,交付,不参与开发。项目具体需求实现,由项目负责人直接对接。
项目客户:银川市行政审批服务局
项目介绍:安全评价报告,环境评估报告审批系统。涉及建筑行业单位的规划和建设资质。
2019年1月离职,4月底到达天津,10月进入津房
期间自己接过一些中小项目,本来是打算自己开公司的,这些项目大致有:
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x
Mysql
NGINX
-私有云机房部署 Linux
2月
中小
项目负责人
我写后台,3个人写前端,1个美工。多语种网站,绑了5个域名,5个数据库。5套前端界面(网站不一样)。最厉害的是5个站共用了一套后台代码。
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x
基于自研后台管理系统开发
Mysql
NGINX
阿里云 Linux
1月
小
项目负责人
我写后台+2前端+1美工
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x 网站
小程序
Mui 公众号
Mysql
NGINX
阿里云 Linux
1月
中小
项目负责人
我写后台+2前端+1移动端混合开发 +1美工
海南民宿小程序
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x 服务端接口+后台
小程序
对接微信支付
Mysql
NGINX
阿里云 Linux
1月
中小
项目负责人
我写后台+2前端写小程序
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x
基于自研后台管理系统开发
Mysql
NGINX
阿里云 Linux
1月
小
项目负责人
前后端独立完成
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x 后台
小程序前端
Mysql
NGINX
阿里云 Linux
1月
小
项目负责人
独立完成。
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Php
基于第三方平台二次开发
对接百度推广、360推广、搜狗推广。
Mysql
NGINX
阿里云 Linux
2月
中
项目负责人
这个公司每年搜索引擎广告支出超2亿,系统主要是对接各个搜索引擎,里面的关键词设置,方案,费用等,还有审批,广告位管理。所以系统还是比较麻烦的,由于项目额和想做的事差距太大,所以都实现了基本功能,但是深度可能没有那么高。
天津某进出口企业 跨境电商网站
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Php
基于某半开源的电商平台代码二次开发
对接天津海关。
Mysql
NGINX
阿里云 Linux
2月
中
项目负责人
项目是把电商项目代码给我,让我二开对接天津海关179公告,对接报关、清关、物流单,清单等事宜。
公司名称:天津津房置换有限责任公司
公司规模:500 + 人
工作时间:2019年10月至今
工作职务:普通员工->产品经理->自愿辞去产品经理->普通员工
工作内容:业务系统架构设计,功能实现
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x
基于自研后台管理系统开发
Mysql
NGINX
-
1月+
中小
项目负责人
图片云
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x
Gd 库
imagemagick 库
-
NGINX
Linux
之前写的玩的
以前写着玩的一个程序,正好公司做津房小程序时遇到了需要显示大量图片,但是原图太大加载慢或不显示,而且图片不同地方可能需要的大小不一样,有些地方的图需要水印。正好拿来用上了,可以访问图片时动态按需处理,并且可以静态缓存缩略图,加上Nginx静态文件的负载能力很强,所以性能出色。
Php版“融和通” 系统 ----- 124服务器
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x
很多新需求、老业务系统里有BUG需要重做的功能、财务电子收据,电子发票,置换单,MIS系统分成确认等接口,资产的一些报表等……
Mysql
NGINX
-
中
主开发者
产品经理阶段 2个月
1.写了个需求管理小工具,每天和业务部门开会搞清楚需求内容和评估优先级,甄别伪需求,跟进需求开发工作与落实,工作汇报,例行会,还有各种方案,文档,及其它开发工作。
3.幸福里系统对接和业务部门需求敲定,开发进度跟进,演示协调。给科技开发者讲数据库字段。协调开发遇到的问题。
4.小程序开发需求敲定,小程序会演示及文档工作,进度安排。
5.小程序统计系统搭架子,和企划部门需求敲定,开发进度跟进。
编程语言及框架
数据库
服务器软件
服务器
开发周期
项目级别
职务
Thinkphp 5.x + vue +element ui
+ obs对象存储
nacos 配置管理
+泛微OA
+php各种类库
SQL server
NGINX
华为云-Linux
大
核心开发者
因要基于老业务系统SQLSERVER数据库人员架构表进行开发,所以无法使用第三方平台二开,因此从0开始自己搭架子造轮子,兼容老系统的前提下,实现既定目标,我负责项目底层架构设计及核心实现,对Sqlserver类库二次开发封装,在线用户监控,访问记录监控,菜单、人员、角色、权限等核心底层设计,接口响应类库封装。核心业务流程、逻辑实现。
这套框架写接口项目、微服务非常好用。拿来做别的项目也很方便。
开发的同时也帮助其他同事提高了一点点开发技能或成功转型编程语言。
三级审核系统
二级审核系统
合作企业产估价系统
底层采用新MIS业务系统框架
SQL server
NGINX
华为云-Linux
中小
核心开发者
其它开发项目
其实还基于兴趣爱好开发了一些其它很有意思的项目如:社区论坛、门户站、网盘、低代码平台(开发者工具)、邮件平台、中文分词搜索、电商、小程序、桌面应用等。
做过的项目太多了,没法一一列举详细介绍。写一天也写不完,基本上看到比较新奇的技术就会研究一下。
就希望有钱有闲的时候能够整理后开源。也希望有志同道合的可以一起做一下。
技术栈
前端:
Html
Css
JavaScript
Juqery
Native
ECMA6
框架:
Vue + vue cli + vue route + element ui
Bootstrap
LayUI
MUI
Electronic
构建/包管理工具:NPM 、CNPM、yarn
总的来说前端底子不亚于5年的前端工程师,部分新框架学过,会用但不常用。个别一直在用。
PHP
MVC框架: thinkphp、larveral、yii 2、workman、symfony
组件:bz2 、json、hash、gd、libxml、mcrypt、mysqli、pdo_mysql、pdo_sqlserv、sqlite3,phar、openssl、opcache…PDF、Word、Excel…等等,很少有我不熟的类库
构建/包管理工具:Composer
Php 在Linux 、Windows、 Docker下部署环境配置。
Cli下开发。
Java
框架及组件:
jsp 、 javabean 、 JSTL 、Servlet 、struts 、Spring MVC、Hibernate
(时间长不用全都忘记了,不过有大量笔记,复学很快,不过也都过时了现在项目也不用)
MyBatis、Spring boot (长时间没写生疏的很,复学两周可抵2年工作经验开发者)
构建工具:maven
Java基础功底很好5年前敢说不写Java但是比90% Java专业程序员好,现在可能不行,当初学习的方向是安卓,但是当时看不上Spring MVC和Hibernate这些主流框架,又笨开发又慢,配置项多而复杂,所以学而不用。
Android:
原生开发:
核心:Application、activity生命周期、service、BroadcastReceiver广播、Intent
各种基本组件:textview、edittext、button、imageview、linearlayout、listview、scrollview…webview…等
拔高:Thread多线程、异步通信AsyncTask、HttpClient网络请求类库、Animation、io操作等
传感器:相机、gps、罗盘、震动、光线等。
混合开发:MUI + native 实战两个线上项目 / UNI APP了解
数据库
Mysql
Sqlserver
SqlLite
Access
开发涉猎的组件工具等
如
Redis 、
phpanalysis、
Elasticsearch、
Sphinx、
pdf/word/excel处理,
Git,
SVN等等……
服务器/部署
Linux/Windows
Centos
Red hat
Debian
Ubuntu
deepin
Windows Server xx
……等系统都比较熟悉。
Linux安装配置、各环境部署、定时任务…网络配置…等等
服务器软件
NGINX、Tomcat、Apache、IIS 都用于各项目生产环境部署
其中NGINX和Apache 除了普通部署项目外,还做些负载均衡,反向代理等,网站URL rewrite,服务器虚拟空间技术。
虚拟化软件
vmware、virtual box :非常熟悉用了超10年
Docker :php、mysql、sqlserver、NGINX 等自己打镜像非常熟,写过常用环境的dockerfile,基本各种项目直接用,阿里云有自己私有的镜像仓库。也搞的明白docker原理和单一进程。
docker-compose :编排应用环境。如 docker-php + docker-Nginx + docker-mysql 每个docker一个服务。
音、视频、图云处理
GD 、ImageMagick、ffmpeg
其它编程语言
C++、C#、Asp 、node js 、Python 学过或至少了解过一些
结尾对于自己的履历一些评价。
梦想是成为顶尖的软件工程师。 现实是迫于生计过早的在特别能学习的阶段投入工作。大量时间被乱七八糟的事占用,导致没法在一个专业领域长期专注。没有让量变成为质变。
其实职业规划不是很好。期间很多次机会转管理,但是反感各种开会,写文档,讲虚不务实。也反感干活的人踢皮球,所以易导致自己过多事亲力亲为,凭一己之力扛着所有事走,太专注于局部,耽误了自己很多机会。
对于未来,光写代码是不行的,想要做成点事,至于做什么,怎么做还在追寻。
- idea小技巧 语法错误之间跳转
-
发表日期:2022-01-11 21:53:30 | 来源: | 分类:idea小技巧
-
按 F2/Shift+F2 在突出显示的语法错误之间跳转。
按 Ctrl+t+向上箭头/Ctrl+Alt+向上箭头Al 在错误消息或搜索结果之间跳转。
要跳过警告,请右键单击验证侧栏/标记栏并选择仅转到高优先级问题。
- idea小技巧 快速查看类或方法的文档
-
发表日期:2022-01-11 21:52:53 | 来源: | 分类:idea小技巧
-
要快速查看插入符号处的类或方法的文档,请按 Ctrl+Q(查看 | 快速文档)。

- idea小技巧 使用最近的搜索历史
-
发表日期:2022-01-11 21:51:42 | 来源: | 分类:idea小技巧
-
在文件中搜索文本字符串时,使用最近的搜索历史。按 Ctrl+F 打开搜索窗格,然后按 Alt+向下箭头显示最近条目列表。

- idea小技巧 Ctrl+Alt+Shift+D
-
发表日期:2022-01-11 21:47:55 | 来源: | 分类:idea小技巧
-
如果您的项目处于版本控制之下,您可以构建一个 UML 图来反映您的本地更改并可视化修改后的组件之间的关系。
按 Ctrl+Alt+Shift+D 并选择必要的更改列表来构建图表。双击图表上的节点以查看差异对话框中的更改。

- idea小技巧 Shift 两次
-
发表日期:2022-01-11 21:47:07 | 来源: | 分类:idea小技巧
-
在 Search Everywhere(Shift 两次)窗口的搜索字段中输入“/”以搜索设置列表、它们的选项和插件。
您还可以搜索在您正在搜索的 URL 映射部分之前输入“/”的 URL 映射。

- idea小技巧 在列模式下选择多个片段
-
发表日期:2022-01-11 21:45:42 | 来源: | 分类:idea小技巧
-
要在列模式下选择多个片段 Alt+Shift+Insert,请按住 Ctrl+Alt+Shift(在 Windows 和 Linux 上)/⌘⌥⇧(在 macOS 上),然后拖动鼠标:

- idea小技巧 SQL 文件运行查询
-
发表日期:2022-01-11 21:38:17 | 来源: | 分类:idea小技巧
-
双击 SQL 文件以在 IDE 中打开它。要从此文件运行查询,请调用意图操作(对于 macOS,Option + Enter,对于 Windows 和 Linux,Alt+Enter)并选择在控制台中运行查询。在 Sessions 列表中,选择现有控制台或创建一个新控制台。
请注意,新的查询控制台意味着与数据源的新连接。

- idea小技巧 Alt+Enter
-
发表日期:2022-01-11 21:36:43 | 来源: | 分类:idea小技巧
-
在编辑器中按 Alt+Enter 可修复突出显示的错误或警告、改进或优化代码结构。
对于某些意图操作,您可以通过按 Ctrl+Shift+I(查看 | 快速定义)打开预览。

- 前端开发(1)
- 数据库(0)
- PHP(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 数组 函数(81)
- 类/对象 函数(18)
- 函数处理 函数(13)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- 字符串 函数(101)
- JAVA(0)
- Android(0)
- Linux(0)
- AI大模型(9)
- 其他(0)
宁公网安备 64010402001209号