织梦网站怎么修改内容,浏览器被2345网址导航,建筑工程网格化管理实施方案,爱用建站下载1.你先作个自我介绍吧
面试官您好#xff0c;我叫张睿超#xff0c;来自湖南长沙#xff0c;大学毕业于湖南农业大学#xff0c;是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。
大学里面主修的课程是Java、Python、数字图…1.你先作个自我介绍吧
面试官您好我叫张睿超来自湖南长沙大学毕业于湖南农业大学是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。
大学里面主修的课程是Java、Python、数字图像处理、JavaEE。
大学期间英语获得6级460分参加过华为云的比赛获得了全国高校绿色计算系列大赛团体三等奖。
我熟悉的技术栈在简历上都写了我自己认为自己的亮点在以下几点能进行简单的JVM调优有实际处理高并发问题的经验熟悉MySQL的操作了解数据库调优原理熟悉Linux的基本操作。
我自学C#两周、听学校讲解Python的Django框架2周都写出了简单的项目半年时间研究出了一个图像加密算法并发表为了毕业论文。Java学习了一个学期、自学了2个月之后在校企合作的项目中做出了这两个Java项目。
领导过小组作出Django框架的项目参与过校企合作的两个Java项目。
了解到贵公司的业务需求偏向于xxx我正好擅长xxx所以我来应聘贵公司的Java开发岗位。
或者衔接
了解到贵公司的业务需求偏向于xxx我最近做了一个xx项目正好做了xxx您看需不需要作一个简单的项目介绍。 2.你说一下这个IoC和AOP
IoC:Inverse of Control控制反转也叫DI依赖注入指的是将对象的创建权交给 Spring 容器去创建。然后举例轮子和汽车
其实IoC有很多种方式。不仅是Spring技术中最常用的Bean注入还有构造方法、Setter方法实现。
AOPAspect Oriented Programming面向切面编程能增强Spring中具体业务的功能能实现鉴权或公共字段填充的业务。
动态代理主要有两种方式JDK动态代理和CGLIB动态代理。
SpringMVC用的三级缓存而不是二级缓存其中原因之一就是方便使用AOP。
关于SpringMVC使用三级缓存我这里可以给你讲一下……
关于我们用AOP做的公共字段填充我这里可以给你讲一下…… 3.JWT了解过吗有用过吗
了解的有用过。
JWT就是JSON Web Token是继Cookie、Session之后一个比较好用的身份验证技术。 Cookie是HTTP协议支持的技术这是它的优点。
但它的缺点也很明显它不支持移动端APP比如Android、IOS第二点是它不安全用户自己可以禁用Cookie第三点是它不能跨域。 Session则是基于Cookie的服务器会话跟踪技术优点是存储在服务端安全。
缺点也很明显因为是基于Cookie的Cookie自带的毛病它都有移动端APP不能用、用户自己可以禁用、不能跨域除此以外搭建了集群的服务器它也无法使用它还占用服务器内存。 而企业常用的JWT技术则完美解决了上述的问题。PC端、移动端它都行集群中它也能用不需要服务器存储不给服务器带来存储压力。
如果要说它有什么缺点那就是需要自己实现吧。 那么怎么实现呢我们这样把JWT加入我们的登录流程
首先浏览器中访问登录界面校验用户登录成功后我们后端就生成一个JWT令牌并将这个JWT令牌返回给前端。
前端拿到JWT令牌后存起来后续的请求的请求头都带上这个。
然后后端统一拦截就检查这个JWT就完成了校验。 JWT令牌包括三部分
Header头记录令牌类型、签名算法等。 例如{alg:HS256,type:JWT}
Payload有效载荷携带一些自定义信息、默认信息等。 例如{id:1,username:Tom}
Signature签名防止Token被篡改、确保安全性。将header、payload加入指定秘钥通过指定签名算法计算而来。 4.es用过吗你们是怎么用到的
我们用到了es在我的外卖项目中为了提供商家搜索的功能我们设计了es的搜索流程。
首先基本的搜索接口4方面分别是请求方式POST请求路径为/shopSearch/list请求参数有关键词、页数、分页大小、排序方式返回值为页面结果类。
首先定义好Controller
然后准备设置好ES官方提供的Java语言客户端Java HighLevel Rest Client在启动类中创建一个对应Bean初始化时传入ES客户端的ip地址
最后写业务处理Service层。
首先准备请求Request然后准备DSL包括query和请求分页第三步发送请求第四步进行解析
解析的具体流程是
对响应response.getHits()初步解析getTotalHits().value获取总条数再getHits()获取文档数组开始遍历getSourcceAsString()获取文档source然后反序列化parseObject最后放入集合最后的最后封装返回 然后我们扩展基础搜索加上过滤条件比如在排序上可以综合排序、销量优先、速度优先等在优惠活动中可以选择一些日常举办的活动还有选择价格的范围等。 明确了业务之后我们做具体的代码工作
我们对对应传参的实体类进行修改增加这些字段的选项然后在业务逻辑即service层中在准备DSL的阶段增加绑定查询字段的步骤。 首先构建BoolQueryBuilder bool new ~然后添加过滤条件 分别判断传入的实体类中过滤参数不为空比如优惠活动 params.getEvent()!null !params.getEvent().equals()一旦不为空就对构建的BoolQueryBuilder进行过滤条件的构建即bool.filter(QueryBuilders.termQuery(event, params.getEvent());至于价格过滤filter中的参数是这样的QueryBuilders.rangeQuery(price).gte(params.getMinPrice()).lte(params.getMaxPrice())最后放入查询请求的source中 request.source().query(bool); 第二个扩展是添加根据地理位置选择就近的餐馆。
这个在请求和响应中分别添加排序的操作就可以。 第三个扩展是添加店家竞价排名。
我们用function_score查询实现它包括了3个方面要确定
过滤条件查询出符合条件的进一步进行分数计算。算分函数计算出来分数以便进行比较。包括 weight使用权重random_score计算随机数field_value_factor以文档中的某个字段值作为函数结果script_score自定义算分函数算法运算模式计算的分数和原始值原始值是根据词频等计算出的进行操作得到最终结果。包括 multiply相乘replace用function score替换query score其它例如sum、avg、max、min
我们这里确定的三个方面是 过滤条件添加isAD字段为true则进行加权计算算分函数weight运算模式默认的multiply
代码层面的改动
首先在实体类中添加isAD字段然后在DSL中绑定过滤条件时添加算分即 FunctionScoreQueryBuilder functionScoreQuery QueryBuilders.functionScoreQuery(// 原始查询相关性算分的查询boolQuery,// function score的数组new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{// 其中的一个function score 元素new FunctionScoreQueryBuilder.FilterFunctionBuilder(// 过滤条件QueryBuilders.termQuery(isAD, true),// 算分函数ScoreFunctionBuilders.weightFactorFunction(10))}); 最后suorce的不是bool而是包装号的function的。 5.Neo4j数据库是怎么存数据的里面有什么类型的节点什么类型的路线
我们节点存的是机构分为三种标签一级转运中心、二级转运中心和节点。
节点的属性包括Neo4j自带的id、业务id、名称、电话、地址、坐标等。
关系存的是路线属性包括自带id和成本。 6.你说查询最短路线和成本最低路线Neo4j查询语言是什么样的
Neo4j语句
查询最短
MATCH path shortestPath((start:AGENCY) -[*..10]- (end:AGENCY)) WHERE start.bid 123123 AND end.bid 123456 RETURN path
查询成本最低
MATCH path (start:AGENCY) -[*..10]-(end:AGENCY) WHERE start.bid 123123 AND end.bid 123456 UNWIND relationships(path) AS r WITH sum(r.cost) AS cost, path RETURN path ORDER BY cost ASC, LENGTH(path) ASC LIMIT 1
Java语句
查询最短
获取网点的类型构造查询语句执行查询 设置参数设置响应数据类型对结果进行封装处理 读取节点数据进入stream流 取第一个标签作为类型封装好经纬度数据 Overridepublic TransportLineNodeDTO findShortestPath(AgencyEntity start, AgencyEntity end) {//获取网点数据在Neo4j中的类型String type AgencyEntity.class.getAnnotation(Node.class).value()[0];//构造查询语句String cypherQuery StrUtil.format(MATCH path shortestPath((start:{}) -[*..10]- (end:{}))\n WHERE start.bid $startId AND end.bid $endId \n RETURN path, type, type);//执行查询OptionalTransportLineNodeDTO optional this.neo4jClient.query(cypherQuery).bind(start.getBid()).to(startId) //设置参数.bind(end.getBid()).to(endId)//设置参数.fetchAs(TransportLineNodeDTO.class) //设置响应数据类型.mappedBy((typeSystem, record) - { //对结果进行封装处理PathValue pathValue (PathValue) record.get(0);Path path pathValue.asPath();TransportLineNodeDTO dto new TransportLineNodeDTO();// 读取节点数据ListOrganDTO nodeList StreamUtil.of(path.nodes()).map(node - {MapString, Object map node.asMap();OrganDTO organDTO BeanUtil.toBeanIgnoreError(map, OrganDTO.class);//取第一个标签作为类型OrganTypeEnum organTypeEnum OrganTypeEnum.valueOf(CollUtil.getFirst(node.labels()));organDTO.setType(organTypeEnum.getCode());//查询出来的数据x经度y纬度organDTO.setLatitude(BeanUtil.getProperty(map.get(location), y));organDTO.setLongitude(BeanUtil.getProperty(map.get(location), x));return organDTO;}).collect(Collectors.toList());dto.setNodeList(nodeList);//提取关系中的 cost 数据进行求和计算算出该路线的总成本double cost StreamUtil.of(path.relationships()).mapToDouble(relationship - {MapString, Object objectMap relationship.asMap();return Convert.toDouble(objectMap.get(cost), 0d);}).sum();dto.setCost(cost);//取2位小数dto.setCost(NumberUtil.round(dto.getCost(), 2).doubleValue());return dto;}).one();return optional.orElse(null);}
查询成本最优略 7.你的项目是前端后端都有吗前端有什么了解
前端我学过HTML、CSS、JS的基础接触过一些Vue、Ajax的算法了解最新的技术中有饿了么开发的ElementUI等。 8.你的整型数据预测这个是做的什么预测
这个做的是拨叉整型数据的预测。拨叉是汽车上的一个零件像一把只有两个头的叉子。从塑型的机器中做出来的初始拨叉形状精度还达不到需要二次整型。其中机器的参数就是我们的输入整型的形变量就是我们的输出。我们用已经测好的数据作为训练集样本以期预测输入参数后的形变量。 9.我看你还做了个人脸识别是自己做的吗
是我们组做的我是组长负责其他模块对这个人脸识别了解一点。
这个人脸识别调用的是训练好的模型用opencv做的。我还记得组员解决不了我找到了源码给他们看他们自己看完后就完成进度了。 10.核函数了解吗
了解。它是一种数学函数能将高维数据经过它数学函数的计算降成低维结果。
核函数有很多应用场景其中之一就是替代SVM支持向量机中计算距离的函数方便对数据分类。 11.SVM用什么核函数知道吗
一般有线性核除此之外还有高斯核、高斯径向基函数、Sigmoid核等。 12.论文的创新点是什么
我结合了该领域的两种主流思想位图标记与位图嵌入并运用在经典算法中实现了嵌入秘密信息的能力上的进步。 13.Java的基本数据类型有哪些
四类八种。
巴拉巴拉 14.说一下和equals的区别
“”是运算符如果是基本数据类型则比较存储的值如果是引用数据类型则比较所指向对象的地址值。equals是Object的方法比较的是所指向的对象的地址值一般情况下重写之后比较的是对象的值。 摘自详解“”和equals的区别 15.Spring的配置文件有几种
3种。properties、yml和yaml。优先级顺序是
propertiesymlyaml
此外还有两种设置参数的方式
一种是Java系统属性配置格式为-Dkeyvalue这个开发人员偶尔用。例如
-Dserver.port9000
还有一种是命令行参数格式为--keyvalue这个测试人员经常用。例如
--server.port10010 总结有3种配置文件。
此外这三种配置文件加上5种设置参数方式优先级如下从低到高
application.yaml忽略application.yml 企业实用application.propertiesjava系统属性-Dxxxxxx命令行参数--xxxxxx测试人员实用 16.StringBuilder和StringBuffer有什么区别效率的比较呢
StringBuilder是线程不安全的效率比后者快
StringBuffer是线程安全的效率比前者慢
对字符串拼接操作时都比String快。 17.Linux想要获取当前文件夹的路径怎么办
pwd 18.有没有做项目的部署部署过哪些项目
我们用Docker做项目的部署。
Docker是一个容器管理工具它能将某一个组件比如MySQL需要运行的环境单独封装在Linux上跑这样就能方便地部署与使用。
首先安装Docker镜像源之类的就不说了直接
yum install -y docker-ce
关闭防火墙systemctl start docker启动docker -v查看版本没问题就装好了。 然后是拉取镜像比如拉取mysql直接
docker pull mysql:latest 19.Python的Pytest框架你有了解吗 20.写过接口服务吗后端和前端怎么交互的
写过。
前端呈现页面用户通过浏览器操作页面不同的操作发送HTTP请求给后端服务器服务器对这些请求作出反应处理业务并查找数据库返回响应结果给前端。 21.数据库有用过什么
有。有用过关系型数据库MySQL、非关系型数据库MongoDB、Neo4j等。 22.MySQL分类查询怎么查询
group by 23.如果我想复制一张表该怎么写如果我要删除/创建呢
复制
create table 表1 select * from 表2
删除
drop table 表1
创建
create table 表1 if not exists 24.写过比较复杂的查询吗复杂查询是什么样子的
写过。复杂查询通常涉及多表需要灵活运用内外连接。比如两个表table1、table2连接的字段为id则写为如下
select * from table1 as t1 inner join table2 as t2 on t1.id t2.id where 条件1, 条件2 25.我们这里前后端不分离你能写吗